XCX 4.4.1 is now available as a maintenance update for the 4.4 series. This release focuses on compiler correctness, standard library fixes, runtime stability, and JIT performance improvements.
This is a patch release with no new language features or syntax changes. All correctness fixes included in 4.4.1 have also been applied to the 5.0a development line.
Compiler Fixes
Several parsing and tokenization issues have been resolved, improving error reporting and preventing unexpected behavior in otherwise valid programs.
- [FIX] Parser recovery: Malformed
conststatements, includingconst(andconst(1);, now produce compilation errors instead of causing the compiler to hang indefinitely. - [FIX] Statement validation: Invalid
while,elseif,for, andincludestatements now report the expected syntax rather than silently ignoring their keywords. For example, awhilecondition without parentheses no longer executes its body unexpectedly. - [FIX] Identifier handling: Variables named
hascan now be declared and used normally. Previously, their usage could be silently discarded. TheHASinfix operator remains unchanged. - [FIX] Comment parsing: Divider comments using
---no longer interfere with string literals containing*---. - [FIX] Terminal output:
.terminal !writenow works correctly inside function bodies, fixing blank frames in terminal-based interfaces. - [FIX] NOT operator:
!!is now correctly recognized as a single NOT token. Previously, it was interpreted as two separate!tokens, resulting in incorrect boolean evaluations.
Standard Library
- [FIX] mathlib:
is_pow2now correctly identifies powers of two. Previously, multiples of four such as 12, 20, and 96 incorrectly returnedtrue. - [FIX] ZIP operations:
store.zipnow returnsfalsefor source paths without a filename or paths containing invalid UTF-8, instead of crashing the process. - [FIX] Environment variables: Calling
env.get()for an unset variable now raises the documented, catchablehalt.errorrather than returning an empty string or zero. - [FIX] Bundled packages: Package resolution now searches the XCX installation's
lib/directory after the project's locallib/. Bundled libraries such as mathlib can now be included without copying them into individual projects.
Runtime and JIT
This update also addresses several runtime correctness issues and improves the handling of compiled execution paths.
- [FIX] JIT global synchronization: Direct JIT function calls now avoid unnecessary writes to cached global variables when the called function cannot access them. Recursive calls retain the required synchronization, while indirect callbacks continue using full synchronization.
- [FIX] Loop optimizations: Array bounds-error paths are moved outside hot loops, and simple boolean-guarded integer counters avoid an unnecessary conditional jump. Existing bounds checks and integer semantics remain unchanged.
- [FIX] Fatal errors: Security violations involving restricted file paths and invalid
database:paths now terminate consistently with anXCX Fatal:diagnostic and exit code 1, instead of potentially hanging or aborting with an unexpected exception code. - [FIX] While-loop variables: Loop-limit variables now retain their values when accessed inside the loop body.
- [FIX] String literals: Appending to a string variable initialized from a literal no longer modifies the original literal used elsewhere in the program.
- [FIX] JIT arrays: Non-boolean array elements inserted with
.insert()now retain their correct values when read under JIT execution, instead of potentially returningtrue. - [FIX] Redirected output: Output redirected to files or consumed by scripts no longer contains terminal erase sequences. Interactive terminals preserve their existing redraw behavior.
Performance Improvements
XCX 4.4.1 also includes measurable improvements across the existing benchmark suites, particularly in cross-function calls and sieve execution.
The following results compare XCX 4.4 against XCX 4.4.1. All timings are in milliseconds (ms). The execution mode was not specified in the supplied benchmark results.
| Benchmark | XCX 4.4 | XCX 4.4.1 | Improvement |
|---|---|---|---|
| FIB (30) | 6.53 ms | 6.32 ms | 3.2% |
| LCG (100M) | 105.87 ms | 104.51 ms | 1.3% |
| SIEVE | 34.287 ms | 28.74 ms | 16.2% |
| JSON | 0.55 ms | 0.52 ms | 5.6% |
Additional benchmark results:
- Cross-function calls: 14.79 ms → 7.62 ms, a 48.5% reduction in execution time.
- Loop suite total: 1570.17 ms → 1544.30 ms, a 1.6% improvement.
All four main benchmarks show lower execution times compared to XCX 4.4, with the largest relative improvement in the SIEVE test.
Upgrading
XCX 4.4.1 is a drop-in maintenance update for XCX 4.4. No language-level migration is required, although programs relying on previously incorrect behavior may need adjustments.
For the complete source code and release information, visit the XCX GitHub repository.