<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: COMMENTERTHE9</title>
    <description>The latest articles on DEV Community by COMMENTERTHE9 (@commenterthe9).</description>
    <link>https://dev.to/commenterthe9</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3823333%2F1af4f546-b6c0-4597-9d66-05fe6c618387.png</url>
      <title>DEV Community: COMMENTERTHE9</title>
      <link>https://dev.to/commenterthe9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/commenterthe9"/>
    <language>en</language>
    <item>
      <title>Cx Dev Log — 2026-04-23</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Tue, 26 May 2026 00:04:21 +0000</pubDate>
      <link>https://dev.to/commenterthe9/cx-dev-log-2026-04-23-1pki</link>
      <guid>https://dev.to/commenterthe9/cx-dev-log-2026-04-23-1pki</guid>
      <description>&lt;p&gt;No code landed today. That makes five consecutive days without a developer-authored commit on any branch. The test matrix on main sits at 78/78, unchanged. The working tree is clean. On the surface, the project looks stalled. But the real story is about the gap between where the work actually is and where it is visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  The submain integration gap
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;submain&lt;/code&gt; branch is carrying 15 unmerged commits. The last human commit there, &lt;code&gt;eb65acf&lt;/code&gt;, is a parser/semantic/interpreter audit (Part 1) plus a parser body-gap fix, now 10 days old. That branch contains real feature work that would move the project forward significantly if merged:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Result&lt;/code&gt; error model with &lt;code&gt;Ok&lt;/code&gt;, &lt;code&gt;Err&lt;/code&gt;, and the &lt;code&gt;?&lt;/code&gt; operator&lt;/li&gt;
&lt;li&gt;Integer overflow enforcement&lt;/li&gt;
&lt;li&gt;Semicolons made optional&lt;/li&gt;
&lt;li&gt;A diagnostics pass&lt;/li&gt;
&lt;li&gt;Parser audit Part 1&lt;/li&gt;
&lt;li&gt;Phase 10 control flow lowering (while, for, loop/break/continue)&lt;/li&gt;
&lt;li&gt;A basic test runner&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Several of these directly satisfy hard blockers on the roadmap. On main, those roadmap items remain unchecked because the code hasn't been merged. As of the 2026-04-18 log, uncommitted audit Part 2 work in a submain working tree context had reportedly pushed the test matrix to 116/116, with a recursive type parser refactor, struct field type resolution, a 64 MB interpreter thread stack increase, struct field truncation fixes, 6 new matrix tests, and 8 new example programs. Whether that uncommitted work still exists is unknown from the main checkout.&lt;/p&gt;

&lt;p&gt;This is the single highest-leverage bottleneck right now. One merge would jump the matrix from 78 to potentially 116+ tests, check off multiple hard blockers, and unblock the final audit and 0.1 gate work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Branch clutter
&lt;/h2&gt;

&lt;p&gt;Twenty-two daily-log branches (2026-03-29 through 2026-04-22) sit on the remote without being merged to main. The last daily log that actually reached main was 2026-03-31. It is operational noise, but it keeps growing by one branch per day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap state
&lt;/h2&gt;

&lt;p&gt;The roadmap on main is at v4.8 (&lt;code&gt;docs/frontend/ROADMAP.md&lt;/code&gt;). The unchecked hard blockers include: basic test runner, minimal error model, integer overflow enforcement, consistent semicolon rules, parser/semantic/interpreter agreement, no soundness holes in the memory boundary model, all examples passing, readable diagnostics, and roadmap/spec alignment with actual behavior. Submain has commits that would partially or fully satisfy at least five of those items.&lt;/p&gt;

&lt;p&gt;There is also a version discrepancy: submain carries roadmap v4.7 while main has v4.8. That will need reconciliation during or after the merge.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The same five items predicted across the last five logs, none of which happened today:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Commit the audit Part 2 sprint on submain&lt;/li&gt;
&lt;li&gt;Merge submain into main&lt;/li&gt;
&lt;li&gt;Update the roadmap post-merge&lt;/li&gt;
&lt;li&gt;Broader audit Part 2 coverage&lt;/li&gt;
&lt;li&gt;IR lowering for &lt;code&gt;Result&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The merge remains the critical path item. Until it happens, main stays frozen and the roadmap stays blocked. If the uncommitted audit Part 2 work exists in a local working tree somewhere, committing it before it gets lost should be a priority.&lt;/p&gt;

&lt;p&gt;Five idle days in a row. The work exists, it just hasn't moved to where it counts.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-23" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-23&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-04-24</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Mon, 25 May 2026 00:07:12 +0000</pubDate>
      <link>https://dev.to/commenterthe9/cx-dev-log-2026-04-24-34kk</link>
      <guid>https://dev.to/commenterthe9/cx-dev-log-2026-04-24-34kk</guid>
      <description>&lt;p&gt;Day six in limbo and still no commits on the main branch. Every time I refresh, the test matrix holds steady at 78/78. No movement, no change in status. The unmerged work gathers dust while the last code commit fades into history—eleven days ago now. Let's dissect what’s stuck and why it matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bridging the Integration Gap
&lt;/h2&gt;

&lt;p&gt;The gap between the &lt;code&gt;submain&lt;/code&gt; and &lt;code&gt;main&lt;/code&gt; branches has grown into a minor chasm. With 15 unmerged commits on &lt;code&gt;submain&lt;/code&gt;, there’s a significant backlog of progress:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We’ve implemented a &lt;code&gt;Result&lt;/code&gt; error model with &lt;code&gt;Ok&lt;/code&gt;, &lt;code&gt;Err&lt;/code&gt;, and even the &lt;code&gt;?&lt;/code&gt; operator.&lt;/li&gt;
&lt;li&gt;Addressed integer overflow enforcement.&lt;/li&gt;
&lt;li&gt;Made semicolons optional.&lt;/li&gt;
&lt;li&gt;Undertook a diagnostics readability pass.&lt;/li&gt;
&lt;li&gt;Conducted a parser/semantic/interpreter audit Part 1, fixing the parser body-gap.&lt;/li&gt;
&lt;li&gt;Progressed phase 10 with &lt;code&gt;while&lt;/code&gt;, &lt;code&gt;for&lt;/code&gt;, &lt;code&gt;loop&lt;/code&gt;, &lt;code&gt;break&lt;/code&gt;, and &lt;code&gt;continue&lt;/code&gt; control flows.&lt;/li&gt;
&lt;li&gt;Built a basic test runner.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;submain&lt;/code&gt; test matrix is up to 116/116, a clear improvement over main’s 78/78. Many tasks blocking the roadmap for version 0.1 completion are effectively done on &lt;code&gt;submain&lt;/code&gt;. A merge would be a pivotal move, practically doubling the test count, clearing several roadmap items, and freeing up the runway for the final audit work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Unseen Audit
&lt;/h2&gt;

&lt;p&gt;There's a mysterious Audit Part 2 that so far has shown no face. Buried either in a local repo or lost, it’s the ghost of promises unfulfilled—recursive type parser refactors, struct field type resolution, all of it reportedly boosting &lt;code&gt;submain&lt;/code&gt; tests to 116/116 is still invisible from the main’s perspective. No commits, no confirmation. Just whispers of what might be.&lt;/p&gt;

&lt;h2&gt;
  
  
  Accumulating Branch Clutter
&lt;/h2&gt;

&lt;p&gt;Scan over the remote repo and witness a growing clutter. Twenty-three daily-log branches since 2026-03-29 linger like a bad habit, unmerged since the last to touch main on 2026-03-31. Each passing day, another log accumulates. Clean-up is overdue yet remains unattended.&lt;/p&gt;

&lt;h2&gt;
  
  
  Unmatched Roadmap Versions
&lt;/h2&gt;

&lt;p&gt;The main branch stubbornly holds onto roadmap v4.8. It lists unchecked blockers like the test runner, &lt;code&gt;Result&lt;/code&gt; error model, integer overflow fix, optional semicolons, and more—some of which are complete and waiting in limbo on &lt;code&gt;submain&lt;/code&gt;. We also face a version mismatch: submain is stuck on v4.7, while main has moved to v4.8. This gap will need closing before any merging happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving Forward
&lt;/h2&gt;

&lt;p&gt;The tasks are the same as six days ago:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Commit and surface the full Audit Part 2 sprint from &lt;code&gt;submain&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Merge &lt;code&gt;submain&lt;/code&gt; into &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Re-evaluate and update the roadmap post-merge.&lt;/li&gt;
&lt;li&gt;Expand Audit Part 2’s coverage.&lt;/li&gt;
&lt;li&gt;Initiate IR lowering for &lt;code&gt;Result&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of these have happened yet, leaving the submain-to-main merge as the most critical action needed to advance. Until this occurs, the main branch stands frozen at 78 tests, and the 0.1 gateway remains barred by tasks effectively solved but languishing unmerged.&lt;/p&gt;

&lt;p&gt;The project is at a standstill. Progress lies waiting, poised to propel us forward if we choose to integrate. The real question: how much longer can we linger in this holding pattern before taking the plunge? &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-24" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-24&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-05-23</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Sun, 24 May 2026 02:43:32 +0000</pubDate>
      <link>https://dev.to/commenterthe9/cx-dev-log-2026-05-23-463k</link>
      <guid>https://dev.to/commenterthe9/cx-dev-log-2026-05-23-463k</guid>
      <description>&lt;p&gt;Two real features landed today in the Cx language project, changing both the type system and the runtime layer itself: &lt;code&gt;void&lt;/code&gt; now has its own AST type, and &lt;code&gt;exit()&lt;/code&gt; made its debut as a comprehensive control-flow builtin. Let’s break down why these changes matter and what they bring to the table.&lt;/p&gt;

&lt;h2&gt;
  
  
  Type::Void — No Longer Just an Identifier
&lt;/h2&gt;

&lt;p&gt;Previously, &lt;code&gt;void&lt;/code&gt; in Cx function signatures was parsed simply as an identifier, resolved through the same path as user-defined struct types. This was functional but suboptimal, sometimes leading to edge-case bugs where &lt;code&gt;void&lt;/code&gt; might accidentally shadow or collide with user-defined types. PR #278 addressed this by making &lt;code&gt;void&lt;/code&gt; a first-class citizen in our type system. Now, every layer gives &lt;code&gt;void&lt;/code&gt; its distinct representation: &lt;code&gt;Token::TypeVoid&lt;/code&gt; in the lexer, &lt;code&gt;Type::Void&lt;/code&gt; in the AST enum, direct parser mapping, and &lt;code&gt;SemanticType::Void&lt;/code&gt; in the semantic phase.&lt;/p&gt;

&lt;p&gt;Two unit tests ensure nothing broke in the process: one verifies that a function signature like &lt;code&gt;fnc: void main() {}&lt;/code&gt; correctly produces &lt;code&gt;Type::Void&lt;/code&gt;, and another confirms that a function ending with a void call, like &lt;code&gt;print()&lt;/code&gt;, clears semantic analysis without hiccups. With 74 lines added over four files, we integrated this cleanly into main with commit &lt;code&gt;2a2e1b2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This change is more than an aesthetic cleanup. It clarifies how the parser resolves types — &lt;code&gt;void&lt;/code&gt; is now specifically and explicitly defined as a keyword with its own token.&lt;/p&gt;

&lt;h2&gt;
  
  
  exit() as a Control-Flow Signal
&lt;/h2&gt;

&lt;p&gt;The bigger update here is the introduction of &lt;code&gt;exit()&lt;/code&gt;, which recently landed in submain via commit &lt;code&gt;4d612df&lt;/code&gt;. This update spanned 25 files across four crucial layers: types, semantic analysis, runtime, and the main event loop.&lt;/p&gt;

&lt;p&gt;The core decision was making &lt;code&gt;exit()&lt;/code&gt; propagate an &lt;code&gt;RuntimeError::Exit(i32)&lt;/code&gt; signal instead of calling &lt;code&gt;process::exit&lt;/code&gt; directly. This means &lt;code&gt;exit()&lt;/code&gt; integrates seamlessly with our existing runtime’s control-flow model, sitting alongside constructs like &lt;code&gt;EarlyReturn&lt;/code&gt;, &lt;code&gt;BreakSignal&lt;/code&gt;, and &lt;code&gt;ContinueSignal&lt;/code&gt;. This unified signal propagation offers consistent control flow handling in Cx.&lt;/p&gt;

&lt;p&gt;In normal interpreter mode, the &lt;code&gt;Exit&lt;/code&gt; signal is caught and handled in &lt;code&gt;main.rs&lt;/code&gt; before rendering any error messages. Standard output is flushed before &lt;code&gt;process::exit(code)&lt;/code&gt;, ensuring all output is seen (a crucial safeguard since &lt;code&gt;process::exit&lt;/code&gt; skips Drop). In &lt;code&gt;--test&lt;/code&gt; mode, things get interesting: &lt;code&gt;exit(0)&lt;/code&gt; results in a PASS while &lt;code&gt;exit(n != 0)&lt;/code&gt; leads to a FAIL, but crucially, the test runner continues instead of crashing.&lt;/p&gt;

&lt;p&gt;From a semantic perspective, &lt;code&gt;exit()&lt;/code&gt; has restrictions: it only takes 0 or 1 arguments, checked during analysis. The runtime evaluates these, ensuring they fit within i32, flagging out-of-bounds as &lt;code&gt;TypeMismatch&lt;/code&gt;. A new safety-net arm in &lt;code&gt;diagnostics.rs&lt;/code&gt; was also added for unrendered &lt;code&gt;RuntimeError::Exit&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Seven New Matrix Fixtures
&lt;/h2&gt;

&lt;p&gt;Our testing matrix expanded to include &lt;code&gt;.expected_exit&lt;/code&gt; files, allowing fixtures to assert specific exit codes and verify stdout. Seven new tests cover various scenarios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;t_exit_default&lt;/code&gt; — no-arg exits with code 0.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;t_exit_zero_explicit&lt;/code&gt; — explicit &lt;code&gt;exit(0)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;t_exit_nonzero&lt;/code&gt; — &lt;code&gt;exit(3)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;t_exit_before_output&lt;/code&gt; — exit before prints.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;t_exit_after_partial&lt;/code&gt; — exit after partial output, ensuring stdout flush.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;t_exit_in_branch&lt;/code&gt; — exit from an if-branch.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;t_exit_in_function&lt;/code&gt; — exit crosses function-call boundaries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additional integration tests in &lt;code&gt;diff_harness.rs&lt;/code&gt; handle &lt;code&gt;--test&lt;/code&gt; mode actions: &lt;code&gt;exit(1)&lt;/code&gt; marks a FAIL, runner continues; &lt;code&gt;exit(0)&lt;/code&gt; records as PASS, runner continues, supporting robust testing of exit conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Matrix Status and a Line Ending Note
&lt;/h2&gt;

&lt;p&gt;Right now on main, we have 172 passing tests and 10 failing out of 182. The failures are due to output-verification tests — not code regressions. The discrepancy stems from &lt;code&gt;.expected_output&lt;/code&gt; files using CRLF line endings versus the interpreter's LF-only output on Windows. This is purely a platform-specific mismatch, hinting at a need for CRLF-tolerant comparison in the harness for Windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;The immediate goal is merging the &lt;code&gt;exit()&lt;/code&gt; builtin from submain to main — it’s the sole commit waiting to make the leap. Beyond that, tackling DotAccess in compound forms remains the last hurdle for phase 11 completion. Our work on the &lt;code&gt;exit()&lt;/code&gt; feature set a clear pattern: semantic analysis, runtime integration, and robust testing — all this will guide us as we extend other functions like print and println to support additional formatting options.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-05-23" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-05-23&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-04-27</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Sun, 24 May 2026 00:13:25 +0000</pubDate>
      <link>https://dev.to/commenterthe9/cx-dev-log-2026-04-27-16k</link>
      <guid>https://dev.to/commenterthe9/cx-dev-log-2026-04-27-16k</guid>
      <description>&lt;p&gt;Nothing landed today in the Cx language project, making it a perfect opportunity to delve into something that's been lurking in the background: the merge gap between submain and main. This isn't just a gap; it's the biggest structural challenge we're facing right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Merge Gap
&lt;/h2&gt;

&lt;p&gt;Submain sits 21 commits ahead of main. And these aren't trivial updates. These commits incorporate crucial updates: Phases 10 and 11 of the IR backend covering while/for/loop/break/continue lowering, unary expression transitions, a reworked error model with &lt;code&gt;Result&lt;/code&gt;, integer overflow enforcement, optional semicolons throughout the language, comprehensive audits on parser/semantic/interpreter agreement as well as memory boundary soundness, a diagnostics readability pass, and the version bump for the roadmap to v5.0—with all 9 hard blockers resolved.&lt;/p&gt;

&lt;p&gt;Main is still at version 4.8 with 8 hard blockers hanging overhead. Test data paints the same picture: main holds at 78/78 tests, whereas submain runs ahead with 117/117. Merging these would address a significant 39-test disparity in one swift action.&lt;/p&gt;

&lt;p&gt;Every daily log over the past week has identified "merge submain into main" as a critical next step. Yet, the merge isn't happening. It's not a crisis at this moment, but the longer submain stays diverged, the more complex merging will become if new work gets added to either branch independently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Branch Housekeeping
&lt;/h2&gt;

&lt;p&gt;Alongside the merge gap, there's another mess that needs addressing: the proliferation of daily-log branches. 26 branches from March 29, 2026, to April 26, 2026, sit unmerged in the remote repository. Only two—March 28 and March 30—made it via PRs. The remaining 24 persist as operational noise. They're not blocking anything critically, but tidying up would certainly clean the remote branch list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Yesterday's Expectations vs. Reality
&lt;/h2&gt;

&lt;p&gt;The last log suggested four next actions: the submain to main merge, progressing through Phase 11 expression lowering, addressing the IR backend test failure, and clearing out the daily-log branch backlog. None of this happened. Development was idle, with zero new contributions made—in stark contrast to the day's predictions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;What's striking is how the priority list has remained consistent, which says something about our current state. Based on leverage:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Merge submain to main.&lt;/strong&gt; This is the highest priority action. It upgrades main from v4.8 to v5.0, addresses all remaining hard blockers, and closes the 39-test gap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continue Phase 11 expression lowering.&lt;/strong&gt; Remaining unsupported expressions like ArrayLit, Index, MethodCall, StructLit, HandleVal, HandleDrop, and Range in &lt;code&gt;lower.rs&lt;/code&gt; need handling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix the IR backend test failure.&lt;/strong&gt; Submain has 123 tests passing against one failing. Fixing this would render the suite fully green.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean up stale daily-log branches.&lt;/strong&gt; While they don't block progression, tidying these 24 branches would help reduce clutter.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Quiet days will inevitably dot any development journey. The project's not in crisis mode by any means, but the delay in merging submain is flagging as an overdue task on the agenda. Whenever development picks up, this merge should be top of the to-do list.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-27" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-27&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-04-28</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Sat, 23 May 2026 00:09:05 +0000</pubDate>
      <link>https://dev.to/commenterthe9/cx-dev-log-2026-04-28-5a95</link>
      <guid>https://dev.to/commenterthe9/cx-dev-log-2026-04-28-5a95</guid>
      <description>&lt;p&gt;No code landed today. No commits, no in-progress work, no uncommitted changes. This is the second day in a row where the repository sat still. The main test matrix holds at 78/78. That number has not changed in a while.&lt;/p&gt;

&lt;p&gt;What makes this worth writing about is not the silence itself but what it sits next to.&lt;/p&gt;

&lt;h2&gt;
  
  
  The submain gap
&lt;/h2&gt;

&lt;p&gt;Submain is 21 commits ahead of main. The last merge to main was PR #27, back on March 28. That is now 31 days ago. In those 21 commits, submain carries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phases 10 and 11 of the IR backend (while/for/loop/break/continue lowering, unary expression lowering)&lt;/li&gt;
&lt;li&gt;The error model (&lt;code&gt;Result&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Integer overflow enforcement&lt;/li&gt;
&lt;li&gt;Optional semicolons&lt;/li&gt;
&lt;li&gt;Two full audits (parser/semantic/interpreter agreement and memory boundary soundness)&lt;/li&gt;
&lt;li&gt;A diagnostics readability pass&lt;/li&gt;
&lt;li&gt;A cargo test fix&lt;/li&gt;
&lt;li&gt;A roadmap bump from v4.8 to v5.0 with all 9 hard blockers checked off&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is on main. The main roadmap still says v4.8 with 8 hard blockers unchecked. Submain's roadmap says v5.0 with all of them checked. The test count gap tells a similar story: main runs 78 tests, submain runs 117.&lt;/p&gt;

&lt;p&gt;A single merge would close that entire gap. But it has not happened, and predicting when it will happen has not been reliable. The daily logs have listed "merge submain to main" as the top predicted next step for an extended streak now, and it has not materialized once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stale daily-log PRs
&lt;/h2&gt;

&lt;p&gt;There are 18 open PRs for daily-log branches, covering dates from March 29 through April 27. Only three of the daily-log PRs (#28, #30, #31) have actually been merged. The rest sit open. This is operational noise. They could be batch-merged or closed with a note that later logs supersede them. Either way, they are cluttering the PR list without adding value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where things stand
&lt;/h2&gt;

&lt;p&gt;The project is in a holding pattern. The code on submain is substantially ahead of what main reflects. Anyone looking at main would get a misleading picture of what the language actually supports right now. The submain branch has the real state of the compiler, including the IR backend work through Phase 11 and a passing test count 50% higher than main's.&lt;/p&gt;

&lt;p&gt;The next meaningful action is still the same as it was yesterday: merge submain to main. After that, Phase 11 expression lowering has remaining unsupported IR instructions (ArrayLit, Index, MethodCall, StructLit, HandleVal, HandleDrop, Range) and there is one pre-existing test failure on submain (123 passed, 1 failed) that needs attention.&lt;/p&gt;

&lt;p&gt;Until the merge happens, the gap between main and submain will keep growing stale.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-28" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-28&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-04-29</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Fri, 22 May 2026 00:11:20 +0000</pubDate>
      <link>https://dev.to/commenterthe9/cx-dev-log-2026-04-29-35g</link>
      <guid>https://dev.to/commenterthe9/cx-dev-log-2026-04-29-35g</guid>
      <description>&lt;p&gt;No commits for three days straight, while submain sits 21 commits and 32 days ahead of main. The Cx language project is experiencing a development pause, not because there's no progress—the work exists, but it's all stuck in the unmerged submain branch. Let's dig into what this means for the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Integration Gap
&lt;/h2&gt;

&lt;p&gt;The real story isn't just about what's being developed; it's what's remaining unmerged. Submain boasts 21 commits not yet on main, with the last merge into main (PR #27) being over a month old. The testing matrices of both branches tell a detailed story: main is frozen at 78/78, while submain strides ahead with 117/117. The unmerged work includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phases 10 and 11 of IR backend improvements, including while/for/loop functionalities&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Result&lt;/code&gt; error model introduction&lt;/li&gt;
&lt;li&gt;Enforced integer overflow&lt;/li&gt;
&lt;li&gt;Optional semicolons across the board&lt;/li&gt;
&lt;li&gt;Parser, semantic, and interpreter audits for consistency and soundness&lt;/li&gt;
&lt;li&gt;Diagnostics readability enhancement&lt;/li&gt;
&lt;li&gt;Cargo test bug fix&lt;/li&gt;
&lt;li&gt;Roadmap elevation to v5.0, marking all 9 hard blockers resolved&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Main, however, is stagnant at v4.8 with these blockers unresolved. A significant discrepancy is forming between what has been done and what's visible to the community.&lt;/p&gt;

&lt;h2&gt;
  
  
  The PR Backlog
&lt;/h2&gt;

&lt;p&gt;Eighteen open PRs from 2026-03-29 to 2026-04-28 sit unmerged, adding noise with each passing day. While handfuls like PR #28, #30, and #31 made it through, the majority linger. Each unmerged log adds another layer to the backlog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Predictions vs. Reality
&lt;/h2&gt;

&lt;p&gt;For the past three days, the same predictions have echoed in the daily logs, unchanged:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Merge submain to main&lt;/li&gt;
&lt;li&gt;Resolve stale daily-log PRs&lt;/li&gt;
&lt;li&gt;Continue on Phase 11 expression lowering&lt;/li&gt;
&lt;li&gt;Address the existing IR backend test failure (123 passed, 1 failed on submain)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Yet, these actions remain on the to-do list, marked but not moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means
&lt;/h2&gt;

&lt;p&gt;The stasis at the integration boundary is palpable. While real progress locks behind submain, main isn't reflecting Cx's true state. One merge, that of submain, could propel main from v4.8 to v5.0 overnight, amplifying the test count and clearing out remaining blockers. Until this release occurs, main remains a misrepresentation of what Cx actually embodies today.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-04-29" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-04-29&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-05-06</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Thu, 21 May 2026 00:05:46 +0000</pubDate>
      <link>https://dev.to/commenterthe9/cx-dev-log-2026-05-06-5b9k</link>
      <guid>https://dev.to/commenterthe9/cx-dev-log-2026-05-06-5b9k</guid>
      <description>&lt;p&gt;Merging ten pull requests into submain in a single day signifies a turning point for Cx. We're talking about the JIT backend making a leap from theoretical to tangible execution. This involved delivering the first real JIT-compiled arithmetic and memory operations using Cranelift, among other things. If you’ve been following the backend development, today’s progress might get you nodding along with me.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Real JIT Execution
&lt;/h2&gt;

&lt;p&gt;If you’ve ever stared at a scaffold and wondered whether it’ll hold when it all comes together, the journey of CX-25 is a familiar one. PR #78 took the skeleton of &lt;code&gt;HostBoundary::execute&lt;/code&gt; and fleshed it out into a functioning Cranelift JIT pipeline. Now, Cx can compile arithmetic operations like iadd, isub, and imul, right up to returning a result. We added nine integration tests to make sure the holistic structure is sound. This marks the first time Cx programs produce correct results through the Cranelift path, handing the baton to stack operations in CX-26. &lt;/p&gt;

&lt;p&gt;PR #79 extended this by introducing stack memory support, implementing &lt;code&gt;Alloca&lt;/code&gt;, &lt;code&gt;load&lt;/code&gt;, and &lt;code&gt;store&lt;/code&gt;, facilitating byte-specific operations that dare not step on each other’s toes. With these foundational pieces falling into place, the JIT path is no longer just a potential, but a lever we can pull on.&lt;/p&gt;

&lt;p&gt;CX-41 swept in to patch a hole left by PR CX-27. It brought Jump and Branch into the action with proper testing, turning failure into a collection of 11 successful cases. &lt;/p&gt;

&lt;h2&gt;
  
  
  Runtime Intrinsics Boundary
&lt;/h2&gt;

&lt;p&gt;In CX-35, PR #86 did more than just audit. It defined a clear boundary for built-in operations. This means a &lt;code&gt;UnsupportedSemanticConstruct&lt;/code&gt; is the new sheriff in town when encountering unsupported semantics in &lt;code&gt;lower.rs&lt;/code&gt;. What follows are the seeds of a plan ready to sprout in CX-38, setting a framework where intrinsics can be reality-checked via compilation declarations and Cranelift import binding. The implications? For starters, the first visible output through JIT by putting &lt;code&gt;printn&lt;/code&gt; into action.&lt;/p&gt;

&lt;h2&gt;
  
  
  Loop Variable Safety Ensured
&lt;/h2&gt;

&lt;p&gt;Loops, those repetitive workhorses, got a security upgrade with CX-40. By marking loop variables as read-only, Cx has shifted towards safety, dispatching pitfalls of inadvertent reassignment. The IR validator is now tighter with logic to back up this guarantee. It’s a fundamental protection, now formally supported at the IR level.&lt;/p&gt;

&lt;p&gt;Elsewhere, CX-37 sets the stake for expression evaluation order, a subtle yet vital aspect of concurrent code complexity. Left-to-right rules govern not just mathematical logic but how computations intertwine with print sequences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Catching Up and Moving Forward
&lt;/h2&gt;

&lt;p&gt;The sweep through CX-21 to CX-24 brought the previous day’s pipeline promises to life. From method call errors to lowering and boundary groundwork, these pieces laid a foundation that today’s leap depended on. Though submain diverges with new code shadows expanding from the ever-pursuing main tip, the resolve remains: keep merging and advancing. &lt;/p&gt;

&lt;p&gt;As we stand on the crest of what's been done, a tidal wave of reviews awaits. PRs across phases hold keys to unleashing Cx's potential—covering arithmetic, functions, pointers, and beyond. Syncing submain and main becomes crucial each time the backlog clears this threshold. We didn’t touch Phase 11 or the elusive string layout questions today, but it's an orchestra in progress. Harmony lies in our evolving capability to build on momentum.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-05-06" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-05-06&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-05-07</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Wed, 20 May 2026 00:04:15 +0000</pubDate>
      <link>https://dev.to/commenterthe9/cx-dev-log-2026-05-07-5f5m</link>
      <guid>https://dev.to/commenterthe9/cx-dev-log-2026-05-07-5f5m</guid>
      <description>&lt;p&gt;JIT Backend: Cracking the Realness Code&lt;/p&gt;

&lt;p&gt;Back-edge sealing, assert native lowering, and functional tests—sounds like just another day in the trenches. This week marks a pivotal moment in the Cx language devlog, focusing on JIT correctness and leaving the merge backlog behind for a more intriguing question. Can the JIT really run Cx programs as intended? &lt;/p&gt;

&lt;h2&gt;
  
  
  No-Panic Guarantee on Valid IR
&lt;/h2&gt;

&lt;p&gt;With PR #101 (CX-50), we see the JIT backend promising not to panic on any IR that successfully passes &lt;code&gt;validate_module&lt;/code&gt;. Closing unsafe paths is key here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Back-edge Sealing Panic&lt;/strong&gt; was a thorn in the side as Cranelift panicked on loops targeting a previously sealed block, now resolved by deferring &lt;code&gt;seal_all_blocks()&lt;/code&gt; until all instructions are emitted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Float Arithmetic on Integer Ops&lt;/strong&gt; is no longer a surprise party for the wrong guests. F64 operations mistakenly handed off to integer ops like &lt;code&gt;iadd&lt;/code&gt; are cut off with an &lt;code&gt;UnsupportedConstruct&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Float Comparison Guard&lt;/strong&gt; ensures proper type-checking, verifying &lt;code&gt;builder.func.dfg.value_type()&lt;/code&gt; before deploying &lt;code&gt;icmp&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This patch also corrects three missing &lt;code&gt;read_only&lt;/code&gt; fields in &lt;code&gt;BlockParam&lt;/code&gt;, pushed by previous CX-40 changes. Ending with 197 successful tests and an augmented &lt;code&gt;host_boundary.rs&lt;/code&gt; by 258 lines, this work guarantees not just correctness in theory but secure invocation in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Assert and Assert_eq Lower Natively
&lt;/h2&gt;

&lt;p&gt;CX-48 advances by letting &lt;code&gt;assert&lt;/code&gt; and &lt;code&gt;assert_eq&lt;/code&gt; cut out the middleman, lowering directly through IR and Cranelift. Enter &lt;code&gt;IrTerminator::Trap&lt;/code&gt;—a new, no-nonsense terminator—causing unconditional aborts.&lt;/p&gt;

&lt;p&gt;Here’s how:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;assert(cond)&lt;/code&gt;: Forms a two-branch CFG, branching on condition, trapping on fail.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;assert_eq(a, b)&lt;/code&gt;: Uses &lt;code&gt;Compare(Eq)&lt;/code&gt; with a similar branch-and-trap pattern.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With &lt;code&gt;Trap&lt;/code&gt;, execution stops dead on failure instead of rambling through with control transfers. This translates into +588 lines across six files and a total of 204 tests in that branch.&lt;/p&gt;

&lt;h2&gt;
  
  
  First JIT Parity Baseline
&lt;/h2&gt;

&lt;p&gt;The CX-51 change introduces a differential harness meant to push all interpreter tests through the JIT. The result: 23 passing, 97 skipping unsupported constructs, and zero parity failures out of 120 fixtures.&lt;/p&gt;

&lt;p&gt;Achieving zero parity failures is the holy grail of these tests. It shows alignment with the interpreter across board, even as many constructions aren't JIT-ready. As more capabilities light up, the JIT scoreboard—tracking 23 successful JIT fixtures—will evolve. Meanwhile, it eliminates the silent exit zero faux pas, ensuring failure codes aren't lost in the cracks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Determinism Testing
&lt;/h2&gt;

&lt;p&gt;Then there’s CX-49, bringing determinism testing into play with a dozen tests for re-compiling &lt;code&gt;IrModule&lt;/code&gt; and checking for identical results. Testing covers simple to complex constructs, from &lt;code&gt;ConstInt&lt;/code&gt; to multiple functions. A formal spec, &lt;code&gt;docs/backend/cx_jit_determinism.md&lt;/code&gt;, backs this up. &lt;/p&gt;

&lt;p&gt;Achieving JIT predictability per session may not sound groundbreaking, but it feels like securing a future where debugging doesn't dig into recurring non-determinism bugs, making life simpler down the line.&lt;/p&gt;

&lt;h2&gt;
  
  
  Branch Management at Scale
&lt;/h2&gt;

&lt;p&gt;Not forgetting steady hands, CX-45 and CX-44 calmly steered through rebasing and cleaning six branches. Conflicts speckled across &lt;code&gt;host_boundary.rs&lt;/code&gt; suggest a typical day, each branch passing through audits and tests, showing 196 to 201 tests per branch.&lt;/p&gt;

&lt;p&gt;Managing this highlights the complexity of 12+ active branches, but submain's trajectory strongly suggests steady progress stands ahead of a main merge delay, now expanded by 16+ non-merge commits.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;As the task turns towards merging six, rebased human reviews into submain, closing multiple phases, strides should soon include integrations of today’s latest branches (CX-47, CX-48, CX-49, CX-51). The real roadblock’s the submain-to-main merge—looming large and risky if ignored much longer.&lt;/p&gt;

&lt;p&gt;Method call lowering and &lt;code&gt;when&lt;/code&gt; block support—as part of Phase 11—remain in waiting, cast aside while the JIT backend deserves undivided attention. Assertive lowering of &lt;code&gt;assert&lt;/code&gt; and &lt;code&gt;assert_eq&lt;/code&gt; is progress, yet, handfuls of runtime intrinsics—&lt;code&gt;print&lt;/code&gt;, &lt;code&gt;println&lt;/code&gt;, &lt;code&gt;printn&lt;/code&gt;, &lt;code&gt;read&lt;/code&gt;, and &lt;code&gt;input&lt;/code&gt;—stay untamed.&lt;/p&gt;

&lt;p&gt;With 23 out of 120 fixtures JIT-ready, the path's clear to closing even more as pending branches weave into the main. Onward to closing those gaps:&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-05-07" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-05-07&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-05-09</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Tue, 19 May 2026 00:06:04 +0000</pubDate>
      <link>https://dev.to/commenterthe9/cx-dev-log-2026-05-09-4c9i</link>
      <guid>https://dev.to/commenterthe9/cx-dev-log-2026-05-09-4c9i</guid>
      <description>&lt;p&gt;Nine PRs into submain and ten new feature branches created in a single day. The headline is CX-74: exit-code propagation through the backend trait. Six silent &lt;code&gt;return;&lt;/code&gt; paths in &lt;code&gt;main.rs&lt;/code&gt; where backend errors would exit 0 are now replaced with structured &lt;code&gt;BackendError { message, exit_code }&lt;/code&gt; propagation. This directly fixes a problem where the differential harness misclassified failures as SKIPs because the CLI was swallowing error exits. The &lt;code&gt;Backend&lt;/code&gt; trait now owns exit-code semantics: 127 means the JIT can't handle the program, 126 means runtime panic, anything else is the Cx program's own return value.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Merged
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;CX-74 (PR #117): Exit-code propagation.&lt;/strong&gt; This change brought clear improvements to how we handle errors. The &lt;code&gt;Backend&lt;/code&gt; trait gained a &lt;code&gt;BackendError&lt;/code&gt; return type, ensuring exit codes flow from JIT to CLI without needing string parsing. We introduced three new exit-code tests as this was pushed by CX-69's parity harness, where errors exiting with 0 caused false SKIPs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CX-73 (PR #115): Assert/assert_eq lowering.&lt;/strong&gt; Transitioning &lt;code&gt;assert(cond)&lt;/code&gt; and &lt;code&gt;assert_eq(a, b)&lt;/code&gt; into native Cranelift codegen represents a milestone. With &lt;code&gt;assert(cond)&lt;/code&gt; lowering to a Branch + Trap on failure, and &lt;code&gt;assert_eq(a, b)&lt;/code&gt; via Compare(Eq) + Branch + Trap, these built-ins no longer require runtime intrinsic dispatch. This change reflected across six files, reinforcing the IR printer, validator, and JIT.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CX-53 (PR #106): IrType::Void handling.&lt;/strong&gt; By introducing &lt;code&gt;IrType::Void&lt;/code&gt; and adapting function lowering to Cranelift's lack of void type, we refined how void-return functions operate. This manifested in six new tests, aligning semantic and IR void types.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CX-52 (PR #105): JIT float comparison.&lt;/strong&gt; We added &lt;code&gt;fcmp&lt;/code&gt; for float comparison along with &lt;code&gt;ConstFloat&lt;/code&gt; for Cranelift's emit path, expanding our floating-point computation capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CX-54 (PR #104): Controlled IR dumping.&lt;/strong&gt; Addressing IR &lt;code&gt;println!&lt;/code&gt; clutter, IR dumps now require &lt;code&gt;--debug-trace&lt;/code&gt;. This improves the cleanliness of dispatch paths.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CX-55 (PR #107): Determinism test improvements.&lt;/strong&gt; A rebased 12 determinism tests now align with the current submain better, especially with tightened naming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CX-67 (PR #109): CodeRabbit integration.&lt;/strong&gt; With &lt;code&gt;.coderabbit.yaml&lt;/code&gt;, we configured our repo for automated reviews, targeting &lt;code&gt;submain&lt;/code&gt; and &lt;code&gt;main&lt;/code&gt;, and emphasizing relevant file path filtering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CX-70 (PR #112) and CX-71 (PR #113): CodeRabbit-driven fixes.&lt;/strong&gt; Enhancements in assertions and CI-running processes denote our responsiveness to CodeRabbit feedback. The 30-second timeout particularly stands out for CI processes, transforming previously hanging tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ten Branches in Flight
&lt;/h2&gt;

&lt;p&gt;The day's addition of ten new branches targets significant advancements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CX-57:&lt;/strong&gt; F64 remainder achieved through &lt;code&gt;fmod&lt;/code&gt; in Cranelift.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CX-58:&lt;/strong&gt; Logical operations AND/OR optimized to short-circuit IR branches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CX-60:&lt;/strong&gt; I128 constants incorporated into the JIT.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CX-63:&lt;/strong&gt; Direct function call implementation with corresponding determinism tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CX-64 and CX-66:&lt;/strong&gt; Pointer operations across structure fields and arrays.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CX-59, CX-61, CX-62:&lt;/strong&gt; Enhanced test fixtures for control flow logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once these routes are integrated, we can expect a substantial boost in JIT's IR instructions coverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decisions and Direction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Exit-code semantics take shape.&lt;/strong&gt; The introduction of the &lt;code&gt;BackendError&lt;/code&gt; struct formalizes error handling across backends, establishing clear semantic guidelines—127 for unmanageable programs, 126 for runtime panic, and others reflective of the actual Cx return value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assert handling reaches codegen.&lt;/strong&gt; By removing asserts from the built-in tier, we move closer to native code generation. This step simplifies runtime processes, while future endeavors await for I/O related built-ins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CodeRabbit's role solidified.&lt;/strong&gt; As we continue refining developer-tooling integration, CodeRabbit's automated insights streamline PR reviews, ensuring prompt and effective feedback deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JIT harness compliance enforced.&lt;/strong&gt; Implementing a JIT timeout has precautioned us against CI blocks. This small tweak averts latent deadlocks from becoming broader issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Things Stand
&lt;/h2&gt;

&lt;p&gt;Submain sits 40 commits ahead of main, pushing the need for a merge soon to avoid escalated conflict resolution. Reviewing test successes shows promise—an unblemished submain JIT, and a mostly intact audit branch. However, noted CRLF issues in matrix status persist without regression.&lt;/p&gt;

&lt;p&gt;The impending steps include merging the freshly formed branches into submain, surpassing 50 ahead of main. This precedes the pivotal submain-to-main merge. Outstanding facets in Phase 9 and deferred items in Phase 11 beckon our focus next.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-05-09" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-05-09&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-05-16</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Sun, 17 May 2026 02:43:17 +0000</pubDate>
      <link>https://dev.to/commenterthe9/cx-dev-log-2026-05-16-4g46</link>
      <guid>https://dev.to/commenterthe9/cx-dev-log-2026-05-16-4g46</guid>
      <description>&lt;p&gt;The biggest concrete win today? Without a doubt, it was CX-218: a pivotal fix in &lt;code&gt;lower_binary&lt;/code&gt; that took us from 8 arithmetic JIT parity passes, with 9 skips, to a much cleaner 13 passes and only 4 skips. This was no minor detail; it unblocked five more operations that had been silently sidestepping execution due to an unresolved type placeholder. Beyond that, the day was driven by determinism test coverage enhancements and some necessary site refinements.&lt;/p&gt;

&lt;h2&gt;
  
  
  The CX-218 Fix: Tackling SemanticType::Numeric in lower_binary
&lt;/h2&gt;

&lt;p&gt;Whenever the lowering pass reaches an arithmetic expression—think &lt;code&gt;0 + 0&lt;/code&gt; or &lt;code&gt;3 * 4&lt;/code&gt;—the result was defaulting to &lt;code&gt;SemanticType::Numeric&lt;/code&gt;. This placeholder essentially waved a red flag, screaming "numeric type unresolved," until a fix could be devised. Previously, &lt;code&gt;lower_value&lt;/code&gt; quietly resolved this to the target’s &lt;code&gt;numeric_literal_ir_type()&lt;/code&gt;, defaulting to I64 on 64-bit systems. But &lt;code&gt;lower_binary&lt;/code&gt;? Not so much. It was busy calling &lt;code&gt;lower_type(result_ty)&lt;/code&gt;, which cheerfully replied with &lt;code&gt;UnsupportedSemanticType&lt;/code&gt;. Consequently, every test silently exited with a skip, leaving parity untested and unnoticed.&lt;/p&gt;

&lt;p&gt;What changed? The fix mirrored &lt;code&gt;lower_value&lt;/code&gt; by resolving &lt;code&gt;SemanticType::Numeric&lt;/code&gt; directly to &lt;code&gt;ctx.target.numeric_literal_ir_type()&lt;/code&gt; within &lt;code&gt;lower_binary&lt;/code&gt;. A pragmatic move, even if it slightly duplicated logic across paths. If this tweak sounds like a band-aid, that's because it is. Until a centralized resolution emerges, this approach lets tests run and ensures zero parity failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Determinism Test Effort
&lt;/h2&gt;

&lt;p&gt;Eight new PRs have made their way into submain. They are all gradually paving the way for our Phase 12 differential harness strategy, ensuring we remain on the cutting edge of determinism:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CX-197&lt;/strong&gt; (PR #238) — Improved determinism coverage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CX-199&lt;/strong&gt; (PR #240) — Rebased CompoundAssign determinism tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CX-200&lt;/strong&gt; (PR #241) — Unary determinism tests, also rebased and fresh.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CX-202&lt;/strong&gt; (PR #243) — CodeRabbit’s logical OR fix freshens up CX-198.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CX-203&lt;/strong&gt; (PR #244) — While-in loop determinism tests, rebased cleanly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CX-204&lt;/strong&gt; (PR #245) — Conditional branch merge patterns got some love.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CX-213&lt;/strong&gt; (PR #255) — Added documentation coverage following submain’s latest changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CX-214&lt;/strong&gt; (PR #256) — Determinism tests that cover complex pointer/array/casts for good measure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These PRs showcase our revised strategy: each JIT instruction domain now demands a solid determinism test pass prior to implementation being folded into submain. The latest batch covered a broad array of operations: conditional branches, loops, various operators, and data constructs. Everything’s rebased, ready to merge, and straining at the leash, poised to boost our reliability matrix.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Growing Submain Gap
&lt;/h2&gt;

&lt;p&gt;Submain's pace has outstripped main by 164 commits, skyrocketing from just 40 a week ago. Main’s been sluggish, only seeing daily log updates, and its test matrix stands at 111 passes with a few notable failures. These are usually down to Result/try semantics and looping within functions. Submain, by all indications, clears all 117 tests currently identified. With such a divergence, integration's gonna be one tough cookie: an issue we’ve anticipated for a while, but no signs of a merge plan clear the horizon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Elevating the Site
&lt;/h2&gt;

&lt;p&gt;In a single day, five new commits polished the site to a gleam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documentation overhaul, aligned with the most recent interpreter/JIT operations, encompassing arrays, control-flow, and more.&lt;/li&gt;
&lt;li&gt;Updated homepage status and voice, to reflect current capabilities.&lt;/li&gt;
&lt;li&gt;Addressed mobile accessibility and fonts to improve user experience.&lt;/li&gt;
&lt;li&gt;SEO and social metadata enhancements to prime us for public eyes.&lt;/li&gt;
&lt;li&gt;Concise copy voice to round it all off.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was no small feat. Aligning the docs with real Cx functionality (as opposed to past aspirational goals) was a massive step. Meanwhile, the SEO and accessibility tweaks hint that we’re getting ready for prime time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;First up: push through the merges for CX-215 to CX-222 in submain. Eyes are particularly on CX-218 for its tangible code fixes, while the others bring in valuable determinism tests. The coming cycles promise more of the same: decisive determinism tests coupled with solid implementation once they pass muster.&lt;/p&gt;

&lt;p&gt;But what of the submain-to-main merge? With a daunting 164 commits to reconcile, it looms large as our biggest conundrum. The site, freshly polished, seems to stand ready for its debut, assuming it's not waiting on the main branch to catch up. The path forward? Clear in parts but tantalizingly opaque in others.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-05-16" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-05-16&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-05-02</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Fri, 08 May 2026 00:08:28 +0000</pubDate>
      <link>https://dev.to/commenterthe9/cx-dev-log-2026-05-02-h9f</link>
      <guid>https://dev.to/commenterthe9/cx-dev-log-2026-05-02-h9f</guid>
      <description>&lt;p&gt;Clearing a backlog of stale PRs might sound like mundane maintenance, but today's work on Cx has brought a key piece of technical documentation into focus. It's all about the unary lowering strategy in the Intermediate Representation (IR), which isn't visible without those extra insights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Unary Lowering Strategy
&lt;/h2&gt;

&lt;p&gt;Ever noticed Cx's IR doesn't handle negate or boolean-not instructions directly? Instead, we've decided to encode them in a two-operand form:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Op::Minus&lt;/code&gt; becomes &lt;code&gt;0 - value&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Op::Not&lt;/code&gt; becomes &lt;code&gt;value == 0&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This choice minimizes the work for backends, needing just one instruction pattern for both arithmetic and comparison tasks. The nuances of this strategy are now documented in &lt;code&gt;src/ir/lower.rs&lt;/code&gt;, thanks to a recent commit (&lt;code&gt;2d665a4&lt;/code&gt;) on &lt;code&gt;stokowski/cx-6-document-unary-lowering&lt;/code&gt;. These 25 lines of comments don't alter code behavior but offer crucial context to understand our IR encoding decisions.&lt;/p&gt;

&lt;p&gt;The documentation sits on a branch yet to reach main, inheriting a chunk of history from Phases 10-11 IR backend work. Although it won't impact the system since it's purely comments, this documentation is central to understanding our IR processing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dealing with PR Backlog
&lt;/h2&gt;

&lt;p&gt;With PRs #29 to #52 now merged, the daily logs from the past month are no longer sitting in limbo. These merges connect entries from 2026-03-29 to 2026-05-01 and update the &lt;code&gt;docs/frontend/ROADMAP.md&lt;/code&gt;. While this task doesn't shift Cx's functionality forward, it restores traceability and organization, areas highlighted in prior logs as growing liabilities.&lt;/p&gt;

&lt;p&gt;Maintaining a clear record from late March onwards, even without language revisions, reinforces our historical and developmental context. It's all about keeping the narrative straight, especially when planning future pathways.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Submain Dilemma
&lt;/h2&gt;

&lt;p&gt;The real challenge lies with submain's drift. Holding 22 unmerged commits, submain is where version 5.0 resides with 117 tests done and all blockers fixed, while main lags at version 4.9 with just 78 tests. New branches are developing from submain, not main, emphasizing the difference between the roadmap and the live language state.&lt;/p&gt;

&lt;p&gt;This division compromises how we integrate new work. While not a new issue, its impact on development plans is pronounced. Closing this gap is imperative before any significant next steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s on the Horizon
&lt;/h2&gt;

&lt;p&gt;Immediate tasks? A PR for the CX-6 documentation is low-risk and simple. Beyond that, we need to focus on merging submain with main—a priority that's been hovering for some time. Once aligned, struct field access lowering becomes feasible, supported by submain's existing infrastructure for &lt;code&gt;DotAccess&lt;/code&gt; using &lt;code&gt;StructLayoutInfo&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Our testing matrix is holding steady with no regressions on main. Today may seem quiet, but it's a crucial step in setting up future development paths.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-05-02" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-05-02&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cx Dev Log — 2026-05-05</title>
      <dc:creator>COMMENTERTHE9</dc:creator>
      <pubDate>Thu, 07 May 2026 00:15:46 +0000</pubDate>
      <link>https://dev.to/commenterthe9/cx-dev-log-2026-05-05-44pm</link>
      <guid>https://dev.to/commenterthe9/cx-dev-log-2026-05-05-44pm</guid>
      <description>&lt;p&gt;Seven commits in a single session, and the spotlight is on CX-22, CX-23, and CX-24. They leap ahead in the backend roadmap, laying down the critical components of the differential harness, Cranelift lowering skeleton, and the JIT host boundary contract. These are the essential pieces for any Cx program to run through the JIT path. Meanwhile, the trio of CX-18, CX-19, and CX-20 have successfully merged into submain, wrapping up the array lowering sequence from Phase 11.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Merged
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;CX-20 (PR #70)&lt;/strong&gt;: This commit delivered array element writes via the IR. Introducing the &lt;code&gt;SemanticLValue::Index&lt;/code&gt; variant into semantic analysis, the interpreter, and IR lowering, it ensures that &lt;code&gt;arr:[i] = value&lt;/code&gt; and compound assignments like &lt;code&gt;arr:[i] += value&lt;/code&gt; function as intended. This involved adding 428 lines across five files. Filed on May 4th, it secured its place in submain today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CX-18 (PR #67)&lt;/strong&gt;: Commits here verified that &lt;code&gt;Array(N, Struct)&lt;/code&gt; lowers correctly, addressing type mapping along with one-, two-, and three-element scenarios. This patch was crucial, closing a test gap from previous array literal work done in CX-16.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CX-19 (PR #68)&lt;/strong&gt;: This update swapped out the generic &lt;code&gt;unsupported!("Range")&lt;/code&gt; panic with &lt;code&gt;LoweringError::UnsupportedSemanticConstruct&lt;/code&gt;, offering a structured, descriptive error message instead. It was a minimal change but significant for transforming panic indications into useful error values.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jumping Ahead: Execution Infrastructure
&lt;/h2&gt;

&lt;p&gt;The momentum is with the three recent branch-local commits, blazing a trail beyond the backend roadmap. Phases 12 and 13, tagged as "Next" items following Phase 11, found an early spotlight. Getting them up and running was strategic—their completion doesn't rely on Phase 11, and they're prerequisites for any JIT execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CX-23: Differential Harness Shell (Phase 12, sub-packet 1)&lt;/strong&gt;: A fresh &lt;code&gt;src/diff_harness.rs&lt;/code&gt; popped up, hosting structures and functions like the &lt;code&gt;TestExpectation&lt;/code&gt; enum, &lt;code&gt;TestFixture&lt;/code&gt; struct, and others. The shell also includes a function to enumerate all 116 fixtures and run them through an interpreter subprocess capture mechanism. Interesting to note is the consistency in the subprocess method used for both interpreter and JIT paths.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CX-22: Cranelift Lowering Skeleton (Phase 13)&lt;/strong&gt;: Laid down the mapping groundwork for all nine &lt;code&gt;IrType&lt;/code&gt; variants, set up scaffolding for module traversal, and established function, block, and instruction dispatch stubs. It also introduced the &lt;code&gt;CraneliftLoweringError&lt;/code&gt; type with distinct variants to handle various exceptions. These +460 lines craft the framework Cranelift codegen will eventually inhabit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CX-24: JIT Runtime Host Boundary&lt;/strong&gt;: Establishes the contract between the JIT backend and the host process. Notably, JIT operates within the host process—no forking. This lines up with the subprocess output strategy of the differential harness, streamlining output comparisons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CX-21: MethodCall Structured Error&lt;/strong&gt;: It rides the same wave as CX-19, refining &lt;code&gt;unsupported!("MethodCall")&lt;/code&gt; with an error that details the instance and method name (e.g., &lt;code&gt;"MethodCall 'p.take_damage'"&lt;/code&gt;). A small change but one that significantly enriches error clarity during debugging.&lt;/p&gt;

&lt;p&gt;These commits remain on branch locals, awaiting their merger into submain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decisions Worth Noting
&lt;/h2&gt;

&lt;p&gt;Leaping ahead in the phase sequence is the pivotal decision from this latest stretch. Although Phases 12 and 13 were slated to follow Phase 11, they hold no strict sequencing reliance. Initiating them ensures crucial infrastructure is in place without waiting for the entirety of Phase 11.&lt;/p&gt;

&lt;p&gt;The architectural choice embedded in CX-24 is critical. By deciding that JIT operations should occur in-process, the team avoids process forking. This matches seamlessly with the differential harness's design, which uses subprocess execution for capturing outputs, simplifying the comparison logic and ensuring consistency across paths.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;The submain now carries over 26 commits ahead of the main—a gap that's widening as submain accumulates more changes. The last merge to main (PR #57) corrected a 37-day divide. Reducing this divergence remains the highest priority, highlighted in daily logs.&lt;/p&gt;

&lt;p&gt;Immediate tasks on the docket include folding in CX-21 through CX-24 into submain and pushing a submain merge to main sooner rather than later. On the roadmap, the next Phase 11 task involves method call lowering, which currently returns errors instead of generating IR. The upcoming challenge lies in translating &lt;code&gt;obj.method(args)&lt;/code&gt; to actual call instructions.&lt;/p&gt;

&lt;p&gt;Phase 12's subsequent sub-packet will focus on embedding Cranelift baseline captures within the differential harness, enabling side-by-side comparisons of interpreter and JIT outputs.&lt;/p&gt;

&lt;p&gt;Matrix status stands at: 117 PASS / 0 FAIL / 117 total. The numbers remain steady.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the Cx language project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://cx-lang.com" rel="noopener noreferrer"&gt;cx-lang.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/COMMENTERTHE9/Cx_lang" rel="noopener noreferrer"&gt;github.com/COMMENTERTHE9/Cx_lang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dev.to: &lt;a href="https://dev.to/commenterthe9"&gt;dev.to/commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bluesky: &lt;a href="https://bsky.app/profile/thecomment.bsky.social" rel="noopener noreferrer"&gt;thecomment.bsky.social&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter/X: &lt;a href="https://x.com/commenterthe9" rel="noopener noreferrer"&gt;@commenterthe9&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://cx-lang.com/blog/2026-05-05" rel="noopener noreferrer"&gt;https://cx-lang.com/blog/2026-05-05&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cx</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
