REXX Language implementation
Status: draft plan for maintainer review and GitHub discussion, updated after beta 2 release-note alignment. Date: 2026-06-17. Target release: end of August 2026.
This plan describes the intended path from the v1.0.0-beta.2 release baseline
to Release 1. It is not itself a release contract. After the GitHub discussion
is approved, create the issue candidates below as GitHub issues with owners,
labels, acceptance criteria, and fallback decisions.
The release date is fixed. Scope is managed by tiering.
Release 1 should ship a coherent, stable Level B toolchain with a credible first Level G layer, a visible Level C compatibility milestone, and a clear path for language-engineering work. It should not try to make every future level stable.
The final two-week sprint is for QA, documentation, usability, examples, packaging, and performance validation. User-facing feature work should be complete by 2026-08-14 unless it is fixing a must-ship release defect.
| Date | Gate | Exit condition |
|---|---|---|
| 2026-06-15 | Beta 2 close | Beta 2 release note is finalized, tag/package status is explicit, beta 1 to beta 2 delta is documented, and post-tag develop is labelled beta 3 WIP. |
| 2026-07-03 | Design lock | Level B/G split, plugin policy, UTF ownership, Level C MVP, GPU/threading scope, and issue owners/labels are approved. |
| 2026-07-31 | Foundation go/no-go | High-risk VM/compiler foundations either landed with tests or moved out; large constants, perfect-hash select, and Level C execution proof have explicit go/no-go decisions. |
| 2026-08-14 | Feature complete | User-facing surface is frozen; demos and tutorials are ready for manual testing; known limitations are drafted. |
| 2026-08-31 | Release 1 | Release 1 is shipped, or a release candidate is ready with explicit residual risks. |
Must-ship items are part of the Release 1 contract or release process.
Beta 2 closure
Keep v1.0.0-beta.2 release notes aligned with the beta 1 to beta 2 delta,
including the final ASan, build, packaging, and regression fixes. Confirm
whether beta 2 is tagged before making shipped-release claims. After the beta
2 tag, describe develop as beta 3 WIP.
Release 1 governance
Open the GitHub discussion from the approved version of this plan. Create
issues for must-ship and should-ship items only after the discussion is
accepted. Use labels for must, should, experimental, and post-r1.
Level B lockdown
Freeze Level B syntax and stable library surface by 2026-07-03. Complete documentation and tests for UTF/binary, references, arrays, collections, interfaces/classes, ADDRESS, TRACE, imports, linking, and packaging.
Level B/G split
Publish a short design note explaining what Level B owns and what Level G owns. The Release 1 wording should say: Level B is stable; Level G has an initial library overlay and selected demos, not a full separate language contract.
Core UTF contract
Keep .string as valid UTF-8 and .binary as arbitrary bytes. Complete the
Release 1 docs and tests around boundaries. Deprecate compiler/plugin-owned
Unicode semantics in favor of VM codepoint validity plus Level G Unicode
libraries.
Plugin policy
Classify plugin directories and update CMake/package defaults to make the release surface obvious. Core algorithms should move to Rexx libraries where practical; tight runtime integration should move to VM/RXAS instructions; plugins should mainly represent external integration, OS/application boundaries, or experimental/edge capabilities.
Runtime lookup and late loading
Harden late load/relink tests and replace interface method/factory hot-path linear scans with indexed lookup. Treat this as the enabling VM work for classes, large tables, and later Level G/L performance.
Large constant foundation
Implement or explicitly document the Release 1 minimum for immutable constant bytes, integer arrays, string arrays, and table records. If full source sugar is not ready by 2026-07-31, expose only the RXAS/VM and compiler-internal pieces needed for demos and keep broader syntax post-release.
Performance baseline and targeted improvements
Establish performance baselines before changes. Ship only measured or strongly justified RXAS/rxc optimizer improvements. Use the existing inlining gate inventory to choose small, valuable optimizer slices.
Demos, tutorials, and docs
Ship curated Level B, Level G, Level L, and Level C demos with expected commands and outputs. Complete final docs in the last sprint.
Packaging status discipline
For the beta 2 release line, package only the formats already in the release close-out path and document their status clearly. Treat new installer formats, especially the Windows click-through installer, as beta 3 work unless they are needed to fix a release-blocking packaging defect.
Should-ship items are important but have explicit fallback paths.
Perfect-hash select
Target static string/int select x when ... cases. Fallback: current nested
IF lowering remains the Release 1 behaviour, with the optimization moved
post-release.
First Level G library version
Make rxfnsg coherent around the existing LLM work and possibly first
Unicode helpers. Fallback: ship LLM plus docs/tutorial and mark Unicode as
planned.
Initial Level C execution proof
Try for a small executable lowering slice: variables, SAY, IF, simple
DO, ARG, and string-literal ADDRESS. Fallback: ship DSLSH/highlighter
as the Release 1 Level C milestone and publish the lowering plan as the next
phase.
Level L lexer/parser demo
Use large constants and optimized lookup if available. Fallback: a smaller demo using current arrays/tables, with performance work documented.
Plugin/demo cleanup
Clean enough that users can tell core from optional. Fallback: docs and CMake options clarify status even if all source directories are not moved.
Windows installer user experience after beta 2
Add a signed NSIS setup.exe from the signed Windows payload for beta 3 if
the local signing flow can build, sign, and upload it reliably. Fallback:
keep the signed Windows ZIP as the supported Windows asset and document
manual PATH setup.
Linux package hardening
Keep the .deb path, but add install/uninstall smoke testing and dependency
metadata review before treating it as more than a prototype. Fallback: ZIP
remains the portable Linux asset and .deb remains dev-snapshot-only.
These should not block Release 1.
The owner below is accountable for driving the work and keeping the issue honest. Ownership does not mean that person must implement every line.
Adrian:
Peter:
Rene:
Create these after the GitHub discussion is approved. Suggested labels assume a
common rel1 label plus the tier and area labels shown here.
| # | Candidate issue | Owner | Labels | Acceptance signal |
|---|---|---|---|---|
| 1 | Finalize beta 2 release notes from beta 1 to beta 2 git delta | Rene | rel1, must, docs, release |
Release note covers user-visible deltas, compatibility notes, known limitations, and package/tag status. |
| 2 | Align README, release notes, and language reference on beta 2 status | Rene | rel1, must, docs |
Public docs agree on beta 2 versus post-tag beta 3 WIP status. |
| 3 | Define Release 1 scope tiers and final feature-freeze date | Adrian | rel1, must, planning |
GitHub discussion records tiers, dates, and fallback policy. |
| 4 | Lock Level B Release 1 language surface | Adrian | rel1, must, level-b, language |
Syntax and stable library surface are frozen or explicitly listed as exceptions by 2026-07-03. |
| 5 | Define Level B versus Level G language and library boundary | Adrian | rel1, must, level-b, level-g |
Short design note states what each level owns for Release 1. |
| 6 | Stabilize Level B core library API and iterator/reference contracts | Rene | rel1, must, library, tests |
Public API names, examples, and focused tests agree. |
| 7 | Complete Unicode/text semantics issue #583 for Level B | Adrian | rel1, must, unicode, level-b |
.string, .binary, conversion, comparison, and BIF behaviour are documented and tested. |
| 8 | Normalize tool output path behaviour issue #584 | Adrian | rel1, must, toolchain |
rxc, rxas, and driver workflows have consistent -o behaviour and tests. |
| 9 | Complete RXAS float precision coverage issue #585 | Rene | rel1, must, rxas, tests |
Regression coverage distinguishes stored binary64 precision from display formatting. |
| 10 | Complete RXAS instruction coverage issue #586 | Rene | rel1, must, rxas, tests |
Instruction inventory and regression coverage are updated. |
| 11 | Retire/deprecate compiler-owned Unicode plugin path | Adrian | rel1, must, unicode, plugins |
Obsolete path is removed, disabled, or documented as deprecated with replacement guidance. |
| 12 | Inventory and classify all plugins as core, integration, optional, deprecated, or experimental | Peter | rel1, must, plugins |
Classification table exists and matches build/package defaults. |
| 13 | Change default plugin build/package set to match Release 1 policy | Peter | rel1, must, plugins, packaging |
Default build makes the release surface clear; optional legacy paths are opt-in. |
| 14 | Harden METALOADMODULE late load and class/interface rebinding |
Adrian | rel1, must, vm, classes |
Late-load and rebinding tests cover current expected behaviour. |
| 15 | Replace interface method/factory linear scans with indexed lookup | Adrian | rel1, must, vm, performance |
Hot lookup paths use indexed search and retain late-load correctness. |
| 16 | Design fast register/class attribute metadata lookup | Adrian | rel1, must, vm, compiler |
Metadata representation and lookup policy are documented and tested where implemented. |
| 17 | Add large immutable constant structures to RXAS/RXBIN/VM | Adrian | rel1, must, vm, rxas |
Bytes, integer arrays, string arrays, and table records have a tested minimum representation or explicit deferral. |
| 18 | Expose large constant structures through rxc for lexer/parser use | Adrian | rel1, must, compiler, level-l |
Compiler can emit the minimum constant tables needed by approved demos, or surface syntax is deferred with VM/RXAS support documented. |
| 19 | Add performance benchmark baseline for Release 1 | Rene | rel1, must, performance, tests |
Baseline command set and recorded results exist before optimizer changes are claimed. |
| 20 | Run final demo/tutorial usability pass | Rene | rel1, must, docs, qa |
Curated examples have commands, expected output, and manual pass/fail notes. |
| 21 | Run final packaging/signing/notarization validation | Rene | rel1, must, packaging, qa |
Release assets, signing status, and platform package notes are verified before publishing. |
| 22 | Publish Release 1 known limitations | Rene | rel1, must, docs, release |
Known limitations are in release notes and match the shipped feature set. |
| # | Candidate issue | Owner | Labels | Fallback |
|---|---|---|---|---|
| 23 | Decide and implement Level G Unicode baseline | Adrian | rel1, should, level-g, unicode |
Ship LLM-focused Level G and document Unicode as planned if utf8proc or API design is not settled. |
| 24 | Add build-time perfect hash optimization for static select |
Adrian | rel1, should, compiler, performance |
Keep current nested IF lowering. |
| 25 | Add RXAS/VM lookup primitives needed by perfect-hash select | Adrian | rel1, should, rxas, vm |
Generate optimized branch sequence or move primitive post-release. |
| 26 | Add Level L lexer/parser library demo | Peter | rel1, should, level-l, demos |
Ship a smaller demo using current arrays/tables. |
| 27 | Define Level G first library baseline | Rene | rel1, should, level-g, library |
Document the existing LLM surface as the first baseline and move extra APIs post-release. |
| 28 | Add Level G tutorial and demos | Rene | rel1, should, level-g, docs |
Ship one tutorial plus known limitations if the broader demo set is not ready. |
| 29 | Define initial Level C Release 1 milestone | Adrian | rel1, should, level-c, planning |
Ship parser/highlighter milestone plus lowering plan. |
| 30 | Implement first Level C lowering/execution proof if approved | Adrian | rel1, should, level-c, compiler |
Keep normal Level C compilation unsupported and document the next phase. |
| 31 | Decide whether to create lib/rxfnsc for initial Level C |
Adrian | rel1, should, level-c, library |
Reserve the namespace in docs without creating a library directory. |
| 32 | Add Level C demo and known-limits documentation | Peter | rel1, should, level-c, docs |
Ship DSLSH/highlighter demo with explicit no-compile limitation. |
| 33 | Add RXAS peephole optimizer improvements from measured cases | Rene | rel1, should, rxas, performance |
Keep baseline optimizer and publish benchmark results. |
| 34 | Add rxc optimizer/inlining improvements from current fail-closed gates | Rene | rel1, should, compiler, performance |
Keep gates fail-closed and document deferred cases. |
| 35 | Clean up plugin demos and separate core from non-core examples | Peter | rel1, should, plugins, demos |
Clarify status in docs/CMake even if directories are not moved. |
| # | Candidate issue | Owner | Labels | Fallback |
|---|---|---|---|---|
| 36 | Add Level L syntax-sugar demo if syntax is approved | Adrian | rel1, experimental, level-l |
Keep Level L demo library-only for Release 1. |
| 37 | Add GPU VM plugin proof of concept behind experimental status | Adrian | rel1, experimental, vm, plugins |
Publish design notes or keep the work out of the release branch. |
| 38 | Define VM multithreading/subtask design and Release 1 scope | Adrian | rel1, experimental, vm |
Ship design-only; keep shared-memory subtasks post-Release 1. |
Decisions needed before implementation:
select perfect-hash semantics, fallback behaviour, and supported types.Technical dependencies:
select depends on static-case detection, constant table
emission, VM/RXAS lookup support or branch-sequence generation, and fallback.utf8proc
or a Rexx-first alternative.Documentation dependencies:
docs/releases, security policy, examples, and language reference
need to agree on beta 2 status.docs/ai-context/CREXX_LIBS.md should describe rxfnsc as planned or
reserved until a real Level C library directory exists.The final sprint is reserved for:
Feature work that misses the 2026-08-14 gate should move to post-Release 1 unless it fixes a must-ship defect.