DEV Community

COMMENTERTHE9
COMMENTERTHE9

Posted on • Originally published at cx-lang.com

Cx Dev Log — 2026-07-10

The v0.3.1 release is finally here, capping off a series of daily logs predicting its arrival. The integration on July 9 brought us more than what was initially scoped, folding in Handle core, pattern matching enhancements, an f64 comparison fix, and a new known-issues tracker. It's been a significant addition, pushing our test matrix from 292 to 321.

What shipped

Handle core (D2.5a/b/c). We've introduced the Handle construct, adding read/val and drop functionality for scalar payloads. This uses a packed i64 representation—slot and generation fields, anchored by a host-side registry. Empirical tests confirm no aliasing on double-drop and generational safety. Nine new test fixtures ensure coverage.

Pattern matching first slices. Originally destined for 0.3.2, enhancements like as v named bindings and guard clauses in when enum arms have arrived early. Guard clauses repurpose existing mechanics, avoiding new control-flow constructs. The additions were well-received, with twenty new fixtures targeting positive behavior and leak rejection.

Interpreter f64 comparison fix. This fix addressed missing Value::Float match arms for comparison operators like <, >, <=, >= in src/runtime/ops.rs. Interestingly, the JIT got it right from the start, reversing an often-seen pattern where the interpreter leads. Five new fixtures ensure correctness.

Known-issues tracker. We've established a tracker in docs/known_issues.md, cataloging ongoing divergences between the interpreter and JIT. The f64 issue is resolved, but others like bare builtin in trailing positions and print issues remain.

The I128 host-boundary finding

The standout technical takeaway? A failed fix on our JIT system. Trying to pass a raw i128 by value proved unsuccessful—it segfaulted. This boundary scenario, untested before, requires a pass-by-pointer strategy instead. This insight, although not immediately operational, is crucial for any wide scalar work moving forward.

Attempting to resolve the print(enum) issue revealed another layer of complexity. It involves setting up tag-to-name tables rather than simple dispatch-arm fixes. This pivot in approach, while unplanned, is necessary for the print parity objective.

State of the project

Following the merge, both submain and main branches are aligned, leaving our working tree clean. 321 tests now pass without failure—a testimony to the release's impact, bolstered by 29 new fixtures.

What is next

Addressing the I128 host-boundary ABI snag is next up, with a sizing pass pinned as our most pressing task. The subsequent task involves implementing the tag-to-name string tables for full JIT print parity. Issues around expression handling (#2 and #3) remain unsized and open, awaiting attention.

For the feature roadmap, the gene and phen design pass is queued for release 0.3.2. However, the timeline is uncertain as multiple pull requests linger, awaiting review.


Follow the Cx language project:

Originally published at https://cx-lang.com/blog/2026-07-10

Top comments (0)