Cx 开发日志 — 2026-05-01
发布: (2026年5月3日 GMT+8 08:17)
3 分钟阅读
原文: Dev.to
Source: Dev.to
IR 后端更新
内存操作(提交 6252994)
- 向 IR 类型系统中添加了 Ptr 类型(大小 = 8 字节,对齐 = 8 字节)。
- 新增了三条 IR 指令:
Alloca– 按指定的大小和对齐方式在栈上分配空间。Load– 从特定类型的指针读取值。Store– 通过指针写入值。
IR 验证器现在包含 43 项新检查,强制执行以下规则:
Alloca的大小必须 > 0,且对齐必须是 2 的幂。Load与Store要求指针操作数显式标记为IrType::Ptr。
这些扩展对于处理超出单寄存器值的内存结构至关重要,类似于 Cranelift 或 LLVM 降级阶段中的基础设施。
结构体注册表(提交 c95eea6)
- 引入
build_struct_table(),遍历每个SemanticStmt::StructDef。 - 对每个结构体,字段类型被降级并通过
compute_struct_layout()(最初在第 8 阶段加入)计算布局。 StructLayoutInfo现在记录字段的偏移、大小和对齐,并在LoweringCtx与降级函数之间传递。lower_type现在将SemanticType::Struct(_)映射为Ok(IrType::Ptr),而不再返回UnsupportedSemanticType。
这与 LLVM 将结构体视为指针的做法相呼应,提高了计算效率。布局计算仅在每个结构体上执行一次,并在函数之间复用,避免了重复工作。
Submain 与 Main
- Submain:在 34 天内有 22 次新提交,包含第 10‑11 阶段的更新(错误管理、溢出控制、可选分号)。
- 测试覆盖率:submain 有 117 条测试,main 有 78 条。
- 风险:长期分叉会增加集成难度和项目风险。合并工作亟需进行。
下一步
- 降级结构体字段访问 – 使用
StructLayoutInfo实现点访问的降级,进行指针算术后再使用Load/Store。 - 降级结构体字面量 – 将
SemanticExprKind::StructLit转换为Alloca加上基于布局偏移的每个字段的Store操作。 - 将 submain 合并到 main – 最高优先级;需要整合 22 次新提交和 39 条待完成的测试。
这些工作为 Cx 中更复杂的结构体处理奠定了基础。立即开展实现工作并完成待合并的内容,对统一项目进展至关重要。
关注 Cx 语言项目
- Website:
- GitHub:
- Dev.to:
- Bluesky:
- Twitter/X: @commenterthe9