Skip to content

Phase 0 设计冻结与语言定位

目标

Phase 0 的任务是把“想做一门语言”收敛成一组不会频繁摇摆的基础决策:

  • 语言定位
  • 语法风格
  • 类型与并发方向
  • LLVM / FFI / 工具链边界
  • 仓库结构与阶段路线图

关键设计结论

语言定位

Qlang 的目标不是做一门“语法上很特别”的语言,而是做一门:

  • 面向 LLVM 的编译型语言
  • 以安全、可维护、工程体验为先
  • 允许和 C / C++ / Rust 现实协作
  • 把简单留给程序员,把复杂留给编译器和工具链

语法方向

语法风格明确吸收了 Rust、Kotlin、Go、TypeScript 的优点,但避免直接复制:

  • Rust:表达式导向、代数数据类型、trait / impl、强语义边界
  • Kotlin:友好的 API 风格、smart cast 倾向、工程可读性
  • Go:简洁、明确、工具优先、工程落地感
  • TypeScript:开发体验优先、编辑器能力、易理解的语义反馈

收敛后的原则是:

  • 默认显式
  • 默认不可变
  • 语义优先于语法技巧
  • 不为了炫技引入独立多返回语法或过多局部魔法

运行时与互操作

Phase 0 明确把这些方向放进主线:

  • LLVM 作为主要后端
  • C ABI 作为第一层现实互操作桥梁
  • Rust 通过 C ABI 稳定协作
  • C++ 通过 shim 工作流接入,而不是一开始就做全量直接绑定

工程策略

Phase 0 还冻结了后续开发方式:

  • compiler 永远测试驱动
  • 文档和实现必须同步
  • parser / semantics / MIR / codegen / LSP 必须分层
  • 同一个 truth surface 不能在 CLI、LSP、bridge 三处重复实现

对后续阶段的影响

这一步最重要的成果不是某条语法规则,而是把后续阶段的方向锁住了:

  • P1 先做前端闭环
  • P2 先做语义地基,而不是上来追求完整类型系统
  • P3 先做 MIR 和 ownership foundation
  • P4/P5 先做真实产物和最小 FFI 闭环
  • P6 再把 editor-facing truth surface 做扎实

当前仍有效的边界

Phase 0 的这些判断到现在仍然成立:

  • 不提前引入宏系统
  • 不提前引入复杂效果系统
  • 不提前引入直接 C++ 绑定生成
  • 不为了语法“省字”引入过多新符号机制
  • 不把跨文件/project-wide IDE 能力冒进到 P2/P6 的 same-file truth surface 里

归档

原始设计稿已归档到:

Qlang research repository