The on-wiki version of this newsletter can be found here: https://www.wikifunctions.org/wiki/Wikifunctions:Status_updates/2026-03-11 ---- A new composition language
The team addressed long-standing issues with the composition language this quarter. We decided to rewrite how the composition language works, resulting in what we have surprisingly termed "composition language v2". Our primary goal was to increase service stability by reducing the orchestrator's memory consumption. However, this rewrite has had many ancillary effects: substantial latency reduction, code simplification, and better abstractions, which will open the door to later feature additions.
The next paragraph concerns the internal details of the change. If you're just interested in what you can expect and how to work with the new composition language, feel free to skip this paragraph.
At its core, composition language v2 cleans up the composition language's handling of scope. Previously, we had allowed a form of dynamic scoping, which seemed necessary because of how Objects are stored. Notionally, our Implementations are defined externally to Functions: both Functions and Implementations live on Wikifunctions and can be referenced separately. This means that Implementations bind variables that are not properly available for binding. To resolve this problem in v2, we basically cheat: as we build Functions for execution, we retrieve implementations from Wikifunctions and pretend that they are defined at precisely that time. With this change, we are now able to consolidate the language around purely lexical scoping. This has made it much easier to develop reasonable abstractions for the composition language's primitives, to handle closures, etc.
Within the next day, we plan to make the switch, routing calls to the new version of the composition language. As a writer or user of Functions, what can you expect? Ideally, this change will be more-or-less invisible: happy-path functionality should be identical. You should find snappier Function execution and better system stability and consistency. As for the sad paths, it's a mixed bag: some errors are clearer, and we're now well-positioned to implement true stack traces; however, other errors will be less legible. Test cases that previously relied on the system timing out or reaching other resource limits may need to be re-visited.
We welcome feedback about this change. We hope to be able to switch to the v2 endpoint once, and then address errors/inconveniences as they arise. If you encounter new bugs or issues after this switch, please make a Phabricator task under T418887 https://phabricator.wikimedia.org/T418887 (this Phabricator link will pre-fill it as the parent https://phabricator.wikimedia.org/maniphest/task/edit/form/1/?parent=418887&template=418887&status=open). If severe problems arise, we may also decide to roll back temporarily to v1; we will communicate as we make changes so you know what's going on.
Thank you for all your efforts to make Wikifunctions what it is. No NLG SIG meeting next week
Next week’s NLG SIG meeting is cancelled due to a lack of suggested topics. Fresh Functions weekly: 16 new Functions
This week we had 16 new functions. Here is an incomplete list of functions with implementations and passing tests to get a taste of what functions have been created. Thanks everybody for contributing!
- link to Item article with display text (Z31870) https://www.wikifunctions.org/wiki/Z31870 - trim element from start of list (Z31874) https://www.wikifunctions.org/wiki/Z31874 - trim Code point from start of String (Z31880) https://www.wikifunctions.org/wiki/Z31880 - reference marker HTML from string (Z31906) https://www.wikifunctions.org/wiki/Z31906 - value of Numeric_Type=Digit or Decimal code point (Z31907) https://www.wikifunctions.org/wiki/Z31907 - create Reference with HTML (Z31917) https://www.wikifunctions.org/wiki/Z31917 - add reference to a statement (Z31921) https://www.wikifunctions.org/wiki/Z31921 - site of Wikidata sitelink (Z31931) https://www.wikifunctions.org/wiki/Z31931 - language of Wikidata sitelink (Z31934) https://www.wikifunctions.org/wiki/Z31934 - Rational to LaTeX (Z31944) https://www.wikifunctions.org/wiki/Z31944 - String without prefix (Z31955) https://www.wikifunctions.org/wiki/Z31955
A complete list of all functions sorted by when they were created https://www.wikifunctions.org/wiki/Special:ListObjectsByType?type=Z8&orderby=latest is available.
abstract-wikipedia@lists.wikimedia.org