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