Language versions

Version: 5

Every saved movement is pinned to the language version it was written against: an integer with a two-word name. The pin governs syntax and semantics, and every layer honours it: the parser, the checker, both engines, plugins and adapters. The version above is the current one, what a movement saved today is pinned to and what an entry point given no version compiles and runs under.

The versions #

versionnamesupporteddeprecatedis
1Quiet Heronnonothe language as of tag v0.6.0
2Bright Otternonothe language from v0.7.0 through v0.9.1
3Steady Lynxnonothe language from v0.10.0: a list literal is a tuple, exact at a literal index and a list of its members' union elsewhere
4Luminous Owlnonothe language from v0.11.0: a match yields absent on a miss, a write handle reaches its pre-write record through @old
5Dancing Wrenyesnothe language after v0.11.0: no engine-side store and no meta edges; no write … bind, no # hops (a plugin is a function you call), delete only where the system declares a type deletable, _resources only on an extraction's result

The language release names the versions it supports; versions it has dropped are served by the platform's legacy packages until their saved movements are upgraded.

The integer is the identity: code compares it and never parses the name, which is display only. A version keeps its row after it leaves the supported set, so a movement pinned to it can still be refused by name. undefined is the migration guide from version 2 to 3, undefined from 3 to 4, and undefined from 4 to 5.

The rules #

Breaking changes never break a saved movement.

Changes #