DEV Community

COMMENTERTHE9
COMMENTERTHE9

Posted on • Originally published at cx-lang.com

Cx Dev Log — 2026-03-29

Some days nothing ships. March 29 was one of those days when no new COMMENTERTHE9-authored commits landed, the working tree was spotless, and our test matrix held strong at 78/78 on main. But don't mistake this quiet for inactivity. Two key backend changes are stacked on submain, just waiting for their moment. It begs the question, why hasn't submain been merged yet?

The submain backlog

Right now, submain holds onto two locally branch-locked commits from March 28:

Wrapping arithmetic (d93582b) changes our runtime arithmetic methods from saturating_add/saturating_sub to wrapping_add/wrapping_sub in src/runtime/runtime.rs. It incorporates guards for critical edge cases like i128::MIN / -1 and i128::MIN % -1. While our arithmetic now wraps correctly at the i128 limit, this update is just a step towards fully enforcing integer overflow behavior—a hard blocker still looming.

Phase 10: while loop lowering (0fa06a6) adds a hefty 189 lines to src/ir/lower.rs. This update implements a header/body/exit CFG pattern, loop-carried SSA with block parameters, and introduces backedge generation. Right now, there are three tests supporting this Rust implementation. Notably, this is the debut of backend IR loop support in Cx.

Both commits represent solid progress but they already shipped on March 28, as noted in that day's log. Yet, for two days running, the merge to main remains in limbo. A snag: docs/frontend/ROADMAP.md is out of sync between branches. Main field's roadmap stands at v4.7, while submain's is at v4.6, dropping some annotations. Tackling this roadmap divergence will require a careful conflict resolution during the merge.

Roadmap v4.8

Version 4.8 of the roadmap brings a measured update:

  • "Backend ABI / Data Layout" now captures Phase 8's structured layouts for structs, arrays, and enums, and formally records the locking of calling conventions on submain. Phase 10's while loop lowering is flagged as active backend work.
  • "Multi-file imports" got a tick with the merging of PR #27 to main.
  • The "Integer overflow" known gap entry was adjusted to note the partial fix with wrapping arithmetic.
  • We confirmed struct field type checking and method call return type fixes on main post-PR #27.

Yet, no boxes were checked off. The wrapping arithmetic moves us closer to resolving the integer overflow blocker but hasn’t fully tackled it.

What is next

The list of upcoming tasks hasn't budged:

  1. Merge submain to main. A merge is overdue by two days, complicated slightly by roadmap version divergence but not blocked.
  2. If/else lowering in the backend. With IR lowerer now supporting while loops, the next logical step is handling conditional branches. This is crucial for supporting Cx 0.1-level programs.
  3. Test runner and assert. A hard blocker, currently hitting day five of deferral.
  4. Error model (Result). Another five-day deferral, another hard blocker.

Here’s the truth: March 29 wasn’t about breakthroughs. Our significant changes are parked on a branch, awaiting the merge. The blockers are still there, sitting quietly in the backlog. True advancement is on hold until we finalize the submain merge and move on to pick up if/else lowering or clear one of the deferred blockers.


Follow the Cx language project:

Originally published at https://cx-lang.com/blog/2026-03-29

Top comments (0)