CREXX

REXX Language implementation

View the Project on GitHub adesutherland/CREXX

CREXX 1.0.0 Beta 3 Release Notes

Status: work-in-progress planning note for develop. Target tag: v1.0.0-beta.3. Do not describe beta 3 as released until that tag and its release assets exist. Created: 2026-06-17, after the v1.0.0-beta.2 tag.

CREXX 1.0.0 beta 3 is planned as the Release 1 foundation beta after the beta 2 close-out. It should convert the beta 2 hardening work into the branch state needed for Release 1 design lock, foundation decisions, package validation, and final feature completion.

Timetable

Date Milestone Beta 3 meaning
2026-06-17 Beta 3 opens on develop Version strings, README, docs index, and planning notes move to beta 3 WIP while beta 2 remains the latest completed beta tag.
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 Beta 3 foundation target High-risk VM/compiler foundations either land with tests or move out; beta 3 package status, known limitations, and release assets are checked against the tag.
2026-08-14 Feature complete after beta 3 User-facing Release 1 surface is frozen except for release defects, documentation, QA, examples, packaging, and measured performance work.

Planned Scope

Beta 3 should focus on a smaller, more explicit Release 1 contract rather than new broad language surface:

Implemented Foundation Work

The current develop branch includes the following beta 3 WIP foundations; they are not released until the beta 3 tag exists:

Cross-platform QA, the central beta 3 performance baseline, package validation, and final documentation review remain open release work.

SHA-256 public family

Beta 3 WIP stages the complete rx_hash SHA-256 family for both Level B and Level G:

rxhash.sha256(data = .binary) = .binary
rxhash.sha256hex(data = .binary) = .string
rxhash.sha256init() = .binary
rxhash.sha256update(state = .binary, data = .binary) = .binary
rxhash.sha256final(state = .binary) = .binary
rxhash.sha256finalhex(state = .binary) = .string
rxhash.sha256file(path = .string) = .binary
rxhash.sha256filehex(path = .string) = .string

Raw results are exactly 32 bytes; direct hexadecimal results are exactly 64 canonical lowercase characters. All .binary data is byte-preserving, including embedded NUL and invalid UTF-8. Incremental state is an immutable, copyable and transferable 152-byte version-1 value: canonical big-endian header/count/chaining fields and zero-padded pending bytes are protected by an integrity digest, with no pointer, C padding or host-endian representation. Updates return a new state, empty updates are valid, and finalization is repeatable. Invalid length/magic/version/format/invariants/integrity raise INVALID_ARGUMENTS before hashing.

File procedures synchronously read binary files in fixed 32 KiB chunks and do not accumulate the whole file. Open, read and close failures raise NOTREADY with the failed stage; path selection, connector and cancellation policy, and application size ceilings remain caller responsibilities. The dynamic provider autoload and static/native package-selection contract is unchanged. For example, callers can use sha256hex(data), retain the new value from each sha256update(state, chunk) before sha256finalhex(state), or call sha256filehex(path) when synchronous path hashing is appropriate. The full state layout, signal contract, and examples are in Binary hashing with rxhash.

Out Of Scope For Beta 3

Expected Package Shape

The final package list must be checked against the v1.0.0-beta.3 tag assets. The intended beta 3 shape is:

Known Limitations