CREXX

REXX Language implementation

View the Project on GitHub adesutherland/CREXX

CREXX Beta 3 Issue Candidates

Status: working planning scratchpad for beta 3. This file captures candidate GitHub issues before they are created. It is not a release contract.

Target milestone: 1.0.0-beta.3. Current baseline: develop is beta 3 WIP after the tagged v1.0.0-beta.2 release.

How To Use This File

Issue Creation Waves

Create these immediately with the beta 3 milestone:

Create the remaining foundation implementation issues after their design-lock decisions are approved or narrowed.

Created First-Wave Issues

Created on 2026-06-17 under GitHub milestone 1.0.0-beta.3.

Candidate id GitHub issue Owner Role
B3-DL-00 #606 Adrian Parent tracker
B3-FT-00 #607 Adrian Parent tracker
B3-PKG-00 #608 Rene Parent tracker
B3-DOC-00 #609 Rene Parent tracker
B3-DL-01 #610 Adrian Design lock
B3-DL-02 #611 Adrian Design lock
B3-DL-03 #612 Adrian Design lock
B3-DL-04 #613 Adrian Design lock
B3-DL-05 #614 Adrian Design lock
B3-DL-06 #615 Rene Design lock
B3-DL-07 #616 Adrian Design lock
B3-DL-08 #617 Peter Design lock
B3-DL-09 #618 Adrian Design lock
B3-DL-10 #619 Adrian Design lock
B3-DL-11 #620 Adrian Design lock, high risk
B3-DL-12 #621 Adrian Design lock
B3-F-06 #622 Peter Foundation starter
B3-F-13 #623 Rene Foundation starter
B3-F-14 #624 Rene Foundation starter
B3-F-15 #625 Rene Foundation starter
B3-F-16 #626 Adrian Foundation starter, high risk

Team Guidance To Capture

These principles should be turned into issue text, acceptance criteria, or design notes as the beta 3 issues are created.

  1. The preprocessor is a first-class part of the toolchain.

    Preprocessing should not be treated as text glue hidden before compilation. It needs explicit ownership, tests, diagnostics, source provenance, and a documented relationship to source files, generated source, and downstream compiler stages.

  2. Source provenance is a release concern.

    Errors, warnings, traces, generated code, preprocessed code, and RexxScript integration should preserve enough mapping information to report the right user source line. If exact mapping is not yet possible everywhere, beta 3 should document the known gaps and choose the next foundation slice.

  3. RexxScript integration is a distinct development line, not Level C.

    RexxScript should be treated as a modern, interpreted-only Rexx-family surface that primarily uses strings. It may later migrate toward a light Classic Rexx subset, and it should share BIF implementations with Classic Rexx / Level C where that is clean, but it is not the Level C compiler path.

  4. Level C is compiled Classic Rexx through canonical AST lowering.

    Level C should compile Classic Rexx by transforming the Level C parse/AST shape into the canonical compiler AST shape used by the normal validation, optimization, and emission pipeline. This is separate from RexxScript.

  5. Classic Rexx support needs a deliberate value model.

    Classic Rexx variables should be represented by a dedicated value class that owns the canonical string value and can cache derived forms such as integer, decimal, boolean, or binary where appropriate. The cache rules must preserve Classic Rexx semantics rather than leaking Level B type assumptions.

  6. Classic Rexx variable pools are a first-class runtime abstraction.

    A variable-pool class should model Classic Rexx variable lookup, assignment, stems, host-visible variable access, and any SAA/ADDRESS integration needs. BIFs and Level C work should use this abstraction instead of ad hoc maps.

  7. Rexx BIFs should be curated for shared use where possible.

    The beta 3 plan should identify a clean set of BIFs that can serve RexxScript and Classic Rexx / Level C where possible. The implementation should avoid bespoke conversions per BIF: RexxScript may call string-first BIF entry points, while Level C uses the Classic Rexx value class and variable pool where Classic semantics require them.

  8. Level B classes should feel designed for Level B.

    The Level B class library should be reviewed for Classic Rexx oddities, historical compatibility leftovers, confusing names, or APIs that are only there because of older implementation paths. Keep what supports Level B clearly; move Classic-oriented behavior toward the Level C/value-pool layer.

  9. Plugins and exits need curation, not just cleanup.

    Classify plugins, compiler exits, host exits, demos, and legacy integrations as core, integration, optional, deprecated, experimental, or remove. The default build and package contents should make that classification visible.

Candidate Parent Issues

Candidate id Gate Title Owner Type Acceptance signal Fallback
B3-DL-00 Design lock Beta 3 design lock tracker Adrian Parent All design-lock decisions below are linked, assigned, and have explicit approve/defer outcomes by 2026-07-03. Keep unresolved items out of beta 3 scope and record them as post-beta-3.
B3-FT-00 Foundation Beta 3 foundation tracker Adrian Parent Foundation issues below have land/defer decisions, tests or design notes, and package/release-note status by 2026-07-31. Defer incomplete foundation work with explicit known limitations.
B3-PKG-00 Foundation Beta 3 package shape tracker Rene Parent ZIP fallback, macOS pkg, Linux deb hardening, and Windows NSIS status are known before beta 3 publication. Ship portable ZIPs plus only proven installers.
B3-DOC-00 Foundation Beta 3 docs, demos, and release-note tracker Rene Parent Demos, tutorials, known limitations, and beta 3 release notes match the shipped tag. Ship fewer curated demos with clear limitations.

Candidate Design-Lock Issues

Candidate id Title Owner Labels Acceptance signal Notes
B3-DL-01 Define the preprocessor as a first-class toolchain concern Adrian beta3, design-lock, compiler, preprocessor Design note states ownership, supported inputs/outputs, source-provenance expectations, test strategy, and relationship to compiler stages. Should include whether preprocessing is a separate stage, an rxc mode, or both.
B3-DL-02 Define source mapping and diagnostics provenance contract Adrian beta3, design-lock, compiler, diagnostics Errors and warnings have a documented expectation for original source line mapping through preprocessing and generated code. Cross-cuts preprocessor, RexxScript, parser mode, TRACE, and debug metadata.
B3-DL-03 Define RexxScript integration strategy for beta 3 Adrian beta3, design-lock, rexxscript Design note identifies beta 3 RexxScript goal, integration points, out-of-scope items, and tests/demos. RexxScript is not Level C; keep it separate from compiled Classic Rexx.
B3-DL-04 Define Classic Rexx value class semantics Adrian beta3, design-lock, level-c, runtime Design note specifies canonical string ownership, cached numeric/binary forms, invalidation rules, comparison/conversion semantics, and memory ownership. Foundation for Classic BIFs and variable pool.
B3-DL-05 Define Classic Rexx variable pool model Adrian beta3, design-lock, level-c, runtime, saa Design note specifies lookup, assignment, stems, exposure, host-variable access, and SAA/ADDRESS interaction. Should avoid coupling Level B class APIs to Classic variable behavior.
B3-DL-06 Define shared Rexx BIF surface for RexxScript and Level C Rene beta3, design-lock, rexxscript, level-c, bifs Candidate BIF list is grouped by must/should/defer and identifies whether each BIF can share string-first and Classic value/pool entry points. First slice should be useful for RexxScript demos and later Level C lowering.
B3-DL-07 Define Level B class library design principles Adrian beta3, design-lock, level-b, library Principles identify what belongs in Level B classes, what should move to Classic/Level C support, and what compatibility oddities should be removed or deprecated. Turns “clean class library” into reviewable guidance.
B3-DL-08 Define plugin, exit, and integration classification policy Peter beta3, design-lock, plugins, exits Classification categories are approved and mapped to default build/package policy. Covers plugins, compiler exits, host exits, demos, and legacy integrations.
B3-DL-09 Define Level B versus Level G boundary Adrian beta3, design-lock, level-b, level-g Short design note states stable Level B contract and first Level G overlay scope. Already in Release 1 plan; keep linked here.
B3-DL-10 Define UTF/text ownership Adrian beta3, design-lock, unicode, level-b, level-g .string, .binary, VM codepoint baseline, and Level G Unicode ownership are agreed. Keep Classic Rexx value semantics separate from Level B .string.
B3-DL-11 Define Level C canonical AST lowering milestone Adrian beta3, design-lock, level-c, compiler, high-risk Decide whether beta 3 includes a small compiled Classic Rexx proof by transforming Level C AST into the canonical compiler AST shape. RexxScript is separate and should not be used as the Level C lowering proof.
B3-DL-12 Decide GPU/threading Release 1 status Adrian beta3, design-lock, vm, initial Threading is initial, while GPU remains experimental, design-only or post-R1 as separately recorded. Prevents accidental release commitment.

Candidate Foundation Issues

Candidate id Title Owner Labels Acceptance signal Fallback
B3-F-01 Add source-provenance foundation for preprocessor output Adrian beta3, foundation, compiler, preprocessor, diagnostics Minimal source map or provenance metadata exists with focused tests for mapped diagnostics. Document unmapped diagnostics and keep preprocessing opt-in where needed.
B3-F-02 Build RexxScript integration beta 3 slice Adrian beta3, foundation, rexxscript Agreed demo/test shows the selected interpreted RexxScript path and reports useful status/errors. Ship design/demo only and move deeper integration post-beta-3.
B3-F-03 Implement Classic Rexx value class prototype Adrian beta3, foundation, level-c, runtime Value class handles string canonical form plus selected cached conversions with tests. Keep design note and defer BIF migration.
B3-F-04 Implement Classic Rexx variable pool prototype Adrian beta3, foundation, level-c, runtime, saa Variable pool supports the agreed first lookup/assignment/stem behavior with tests. Keep current ad hoc paths and mark Level C integration blocked.
B3-F-05 Implement first shared Rexx BIF slice Rene beta3, foundation, rexxscript, level-c, bifs First curated BIF set has tests for RexxScript string-first use and a clear path to Classic value/pool use. Publish BIF list and defer implementation.
B3-F-06 Inventory and classify plugins and exits Peter beta3, foundation, plugins, exits Table lists each plugin/exit/demo as core, integration, optional, deprecated, experimental, or remove. Docs-only classification if CMake/package changes are not ready.
B3-F-07 Align default build/package set with plugin classification Peter beta3, foundation, plugins, packaging CMake/package defaults match approved classification and release docs. Keep defaults but document optional/deprecated status clearly.
B3-F-08 Review and curate Level B class library APIs Adrian beta3, foundation, level-b, library Review identifies keep/deprecate/remove/move decisions for Level B classes and tests. Defer breaking changes until after Release 1 and document oddities.
B3-F-09 Harden late load, relink, and class/interface rebinding Adrian beta3, foundation, vm, classes Tests cover current expected behavior for late load and rebinding. Document unsupported cases and keep hot-path changes gated.
B3-F-10 Replace hot-path linear lookup with indexed lookup Adrian beta3, foundation, vm, performance Method/factory lookup uses indexed search and preserves late-load correctness. Keep current lookup and record performance risk.
B3-F-11 Add large immutable constant foundation Adrian beta3, foundation, rxas, rxbin, vm RXAS/RXBIN/VM have tested minimum representation for approved constant structures. Defer source sugar; keep only documented internal support.
B3-F-12 Decide perfect-hash select implementation path Adrian beta3, foundation, compiler, performance Static select optimization is either implemented with tests or explicitly deferred. Keep current nested IF lowering.
B3-F-13 Establish beta 3 performance baseline Rene beta3, foundation, performance, tests Baseline command set and recorded results exist before optimizer claims. Ship without optimizer claims.
B3-F-14 Validate beta 3 package shape Rene beta3, foundation, packaging, qa Asset list, signing status, install smoke tests, and known limitations are verified against tag assets. Publish only proven package formats.
B3-F-15 Curate beta 3 demos and tutorials Rene beta3, foundation, docs, demos Examples and tutorials match beta 3 capabilities and expected output. Ship fewer demos with clear boundaries.
B3-F-16 Prototype Level C canonical AST lowering proof Adrian beta3, foundation, level-c, compiler, high-risk A small Classic Rexx source slice transforms from Level C AST into canonical compiler AST and reaches the agreed downstream phase. Keep Level C as parser/highlighter plus published lowering plan.

Foundation Progress Through 2026-07-11

Candidate Status Evidence and remaining work
B3-F-09 Implemented on develop Late-loaded interface providers are exercised through both VM variants and through the crexx driver. The driver test names exact contract/provider files; cross-platform QA remains.
B3-F-10 Implemented on develop Method and factory registries are sorted after link/relink. Method dispatch uses binary search; factory dispatch binary-searches a provider bucket and caches provider signatures. See reports/runtime-interface-lookup.md.
B3-F-11 Release 1 minimum implemented Binary constants, typed binary-memory access, zero-copy comparison, and packed jump tables cover the approved internal/demo needs. Dedicated typed arrays and records are deferred.
B3-F-12 Implemented on develop RXAS/VM packed jump tables and conservative compiler lowering are complete; arbitrary RXAS ladder recognition is an unscheduled CFG/dataflow roadmap item.
B3-F-13 Open The runtime lookup and jump-dispatch measurements are component evidence, not the central beta 3 benchmark baseline tracked by #623.

Suggested GitHub Issue Body Shape

Use this shape when converting candidates into GitHub issues:

## Purpose

Why this issue exists and what Release 1 or beta 3 risk it reduces.

## Guidance

How to approach the work, including boundaries and things not to do.

## Acceptance

- Concrete observable result.
- Tests, docs, or note updates expected.
- Fallback/defer decision if the work does not land.

## Notes

Link to the durable repo note, related issues, and important source paths.

Parent Issue Guidance

B3-DL-00: Beta 3 Design Lock Tracker

Purpose:

Guidance:

Acceptance:

B3-FT-00: Beta 3 Foundation Tracker

Purpose:

Guidance:

Acceptance:

B3-PKG-00: Beta 3 Package Shape Tracker

Purpose:

Guidance:

Acceptance:

B3-DOC-00: Beta 3 Docs, Demos, And Release-Note Tracker

Purpose:

Guidance:

Acceptance:

Design-Lock Issue Guidance

B3-DL-01: Define The Preprocessor As A First-Class Toolchain Concern

Purpose:

Guidance:

Acceptance:

B3-DL-02: Define Source Mapping And Diagnostics Provenance Contract

Purpose:

Guidance:

Acceptance:

B3-DL-03: Define RexxScript Integration Strategy For Beta 3

Purpose:

Guidance:

Acceptance:

B3-DL-04: Define Classic Rexx Value Class Semantics

Purpose:

Guidance:

Acceptance:

B3-DL-05: Define Classic Rexx Variable Pool Model

Purpose:

Guidance:

Acceptance:

B3-DL-06: Define Shared Rexx BIF Surface For RexxScript And Level C

Purpose:

Guidance:

Acceptance:

B3-DL-07: Define Level B Class Library Design Principles

Purpose:

Guidance:

Acceptance:

B3-DL-08: Define Plugin, Exit, And Integration Classification Policy

Purpose:

Guidance:

Acceptance:

B3-DL-09: Define Level B Versus Level G Boundary

Purpose:

Guidance:

Acceptance:

B3-DL-10: Define UTF/Text Ownership

Purpose:

Guidance:

Acceptance:

B3-DL-11: Define Level C Canonical AST Lowering Milestone

Purpose:

Guidance:

Acceptance:

B3-DL-12: Decide GPU/Threading Release 1 Status

Purpose:

Guidance:

Acceptance:

Foundation Issue Guidance

B3-F-01: Add Source-Provenance Foundation For Preprocessor Output

Purpose:

Guidance:

Acceptance:

B3-F-02: Build RexxScript Integration Beta 3 Slice

Purpose:

Guidance:

Acceptance:

B3-F-03: Implement Classic Rexx Value Class Prototype

Purpose:

Guidance:

Acceptance:

B3-F-04: Implement Classic Rexx Variable Pool Prototype

Purpose:

Guidance:

Acceptance:

B3-F-05: Implement First Shared Rexx BIF Slice

Purpose:

Guidance:

Acceptance:

B3-F-06: Inventory And Classify Plugins And Exits

Purpose:

Guidance:

Acceptance:

B3-F-07: Align Default Build/Package Set With Plugin Classification

Purpose:

Guidance:

Acceptance:

B3-F-08: Review And Curate Level B Class Library APIs

Purpose:

Guidance:

Acceptance:

Purpose:

Guidance:

Acceptance:

B3-F-10: Replace Hot-Path Linear Lookup With Indexed Lookup

Purpose:

Guidance:

Acceptance:

B3-F-11: Add Large Immutable Constant Foundation

Purpose:

Guidance:

Acceptance:

B3-F-12: Decide Perfect-Hash select Implementation Path

Purpose:

Guidance:

Acceptance:

B3-F-13: Establish Beta 3 Performance Baseline

Purpose:

Guidance:

Acceptance:

B3-F-14: Validate Beta 3 Package Shape

Purpose:

Guidance:

Acceptance:

B3-F-15: Curate Beta 3 Demos And Tutorials

Purpose:

Guidance:

Acceptance:

B3-F-16: Prototype Level C Canonical AST Lowering Proof

Purpose:

Guidance:

Acceptance:

Open Questions