{"path":"/sutl/guide/history","content":{"title":"Historical sUTL dialects and implementations","summary":"Where the historical implementations differ, and what sUTL 1.0 has since settled.","body":"[sUTL](/sutl) · [Guide](/sutl/guide) · [Reference](/sutl/reference) · [Examples](/sutl/examples)\n\nThis appendix describes historical implementations. The current guide teaches sUTL 1.0, whose explicit contract resolves the disagreements below.\n\n## Timeline\n\n- The handwritten JavaScript implementation is the earliest surviving\n  executable implementation.\n- The old v0.3 specification documents `#`/`##` paths and `*` multiplication.\n- The deployed language changed to `^`/`&` paths and `x` multiplication.\n- Studio used JavaScript generated from the Haxe implementation.\n- The Python 2 implementation continued through 2018 and saw substantial\n  production use.\n\n## Why Python is not the sole specification\n\nPython contains later production fixes, deterministic key ordering, conversion\nbuiltins, and the strongest surviving test suite. It also contains observable\nhost-language leaks:\n\n- integer division under Python 2\n- operand-returning `and` and `or`\n- no `!!` form\n- a broken builtin-override name\n- incomplete `compilelib` test filtering\n\nThe recovered dialect therefore weighs production Python heavily but checks it\nagainst explicit documentation, Studio examples, HaxeJS, and handwritten\nJavaScript.\n\n## Confirmed implementation defects\n\n- Both JavaScript implementations allow host coercion in numeric comparisons.\n- Studio/HaxeJS merges the wrong value into scope for `!!`.\n- Studio/HaxeJS returns null for an unparseable number where documentation and\n  Python specify zero.\n- Handwritten JavaScript predates conversion builtins and deterministic key\n  ordering.\n- Python returns logical operands where documentation and both JavaScript\n  implementations specify booleans.\n\n## Decisions now settled\n\nsUTL 1.0 fixes floating division, argument eagerness, evaluation order, invalid operands, unequal `zip` truncation, builtin overrides and library candidate rollback. Those are no longer open questions. General map order is not semantic; `keys` and `values` use sorted-key order. See the [current reference](/sutl/reference).\n\nThe old `sUTL0` declarations and Studio records remain useful historical material. New JavaScript, Python and Go implementations share the executable contract in [sutl-language](https://github.com/emlynoregan/sutl-language/blob/0c3463677495ea00767f8266ae900eb4e2f98617/SPEC.md).\n\n## Source\n\nAdapted from [the sUTL source material](https://github.com/emlynoregan/sutllang-site/blob/e59ecafd364848cd71a1d18ce74cdf67f2f69328/content/guide/appendix-history.md).\n\n[Back to sUTL](/sutl) · [Software & Agents](/topics/software-and-agents) · [All topics](/guide)","author":"Emlyn O'Regan"}}