Abstract Wikipedia Mailing List,
Hello. Congratulations on launching the new and exciting Wikilambda and Abstract Wikipedia projects.
Which Programming Languages?
Which programming languages are to be developed with on Wikilambda for use with Abstract Wikipedia? Might a new programming language be useful? Might it be useful to transpile a new programming language into an existing one (e.g. resembling TypeScript and JavaScript)?
Models of Function Definitions
On the topics of programming language design, while we most often consider functions as being comprised of signatures and bodies, might it be useful to consider models of functions with more components? We could express such things with multiple, nested “{}” brackets or scopes.
In some models, a function definition might include a guard, preconditions, a body, and effects.
Inspired by PDDL:
function foo(…) { guard { /* … */ } preconditions { /* … */ } body { /* … */ } effects { /* … */ } }
In other models, a function definition might include requires, a body, and ensures.
Inspired by code contracts:
function foo(…) { requires { /* … */ } body { /* … */ } ensures { /* … */ } }
Such models can be phrased as transformations or mappings from existing languages which separate and organize varieties of content which frequently occur in function body definitions.
Structured Comments, Metadata and Versioning
Structured content (e.g. XML) in comments is both useful and increasingly popular. Structured comments can provide extensible metadata for functions, ease the searching for functions in large collections, and make possible the automatic generation of documentation.
Structured comments could be processed and utilized by the Wikilambda project to provide features.
Also, some programming languages (e.g. C#, Java) have the expressiveness of metadata attributes which can adorn methods and their parameters. A useful attribute is [Obsolete] which supports the use of messages to make use of a newer version of a function, e.g. [Obsolete(“Consider use of foo_2 instead.”)].
Via structured comments, attributes, or other means, the capability of adorning functions with versioning-related metadata would simplify versioning scenarios on evolving crowdsourced resources.
Namespaces and Modules
Namespaces and modules can be useful when organizing large collections of functions. With namespaces or modules, multiple paradigms or ecosystems of functions could coexist in a crowdsourced resource for use in natural language generation scenarios.
Global Variables and Runtime Environment API
Global variables, such as the currently desired natural language for output, could be provided by the runtime environment. An API could be specified for the runtime environment.
Output Streams, Logging and Diagnostic Events
When editing / developing Wikilambda content for use on Abstract Wikipedia, it would be convenient to be able to output to multiple streams, to log, or to raise typed events. It would also be useful to be able to aggregate, organize and view these diagnostic outputs with a configurable granularity or verbosity.
Developer Experiences with the Rendering of Natural Language
A possible user experience for Wikilambda editors / developers is having a means of toggling a developer mode or debugging mode on Abstract Wikipedia such that one could view rendered articles and hover over natural language output to view relevant diagnostic messages in hoverboxes.
Another possible user experience for Wikilambda editors / developers is having a means of toggling a developer mode or debugging mode on Abstract Wikipedia such that visual indicators for diagnostic messages would be placed in a margin to the side of rendered natural language output.
Best regards, Adam Sobieski