历史

  • 从首个提交到今天
  • 共 57 条
  • 阅读约 11 分钟
  • English

状态:current。项目从第一个提交到今天的时间线;有工作线落地就往后续写,不改写已有条目。

这一页按条目讲 Dawn 从第一个提交到今天的历史,一条工作线一条。 它按时间正序分六个时期,每条给出日期、首次带上它的 release(如果有),以及一句话说清改了什么。 每条的权威出处是它链到的设计文档或规范章节;日期是 UTC+8 的提交日期,背后的提交在 git log 里。

M0–M7:从零到自举(2026-07-11 至 07-22)

只剩一个编译器(2026-07-23 至 07-31)

效果与前端(八月)

设备与标准库(2026-09-01 至 09-07)

收紧(2026-09-08 至 09-30)

十月

从 2026-07-17 的 v0.1.0 到 2026-10-01 的 v0.81.0,共 83 个 release tag。

被推翻的决定

早期决定按当时写下的样子保留。其中后来被推翻的,这张表写明被什么取代、在何时。

当初现在何时
编译器用 Kotlin 写,预算 6–8 千行(§1、D7)唯一的编译器是 selfhost/ 里的自举实现;Kotlin 实现只留在 kotlin-final tag2026-07-23
日常工具链(run、test、fmt、doc、LSP)仍是 Kotlin 版(M7)全部工具都来自自举编译器2026-07-23
Kotlin 编译器冻结为 bootstrap 种子,学 Go 保留 go1.4(M7)种子是上一个 release 的 dawn-selfhost.jar;v0.6.0 仍是可重放链条的根2026-07-23
唯一后端是 JVM 字节码,native 由 GraalVM native-image 得到(§1、D1)C 后端与 JVM 后端平级并已自举,另有面向 GPU 的 cuTile 后端2026-07-30;2026-09-02
无中间 IR(D6)Core IR 位于检查与两个后端之间2026-07-25
JVM 的 GC 就是我们的 GC(非目标表)native 后端没有 GC,内存由 Perceus 引用计数管理2026-07-29
效果系统只有两级:pure 与 io(D2)用户可声明具名效果并处理它们;io 是唯一的环境效果2026-08-01;2026-09-24
纯度/效果标记致谢 Flix,「简化到两级」(§4)带 handler、控制臂与 handler 状态的具名效果;勘察过的先例是 Koka 与 Effekt2026-08-01
延续捕获与 C 后端的单栈模型冲突(非目标表)一次性恢复(ctl、resume k、discard)两个后端都支持;仍不做的只有多次恢复2026-08-31 至 09-01
unsafe 逃生门不向用户代码开放(D5)unsafe_pure 曾向用户开放,后收窄到 std,再连同关键字删除2026-07-18;2026-07-30;2026-09-24
TList 运行时就是 java.util.List,桥成本约一次调用(D8)List 是用 Dawn 写的 std/pvec;交给 Java 的 List 以 Array 过桥2026-07-27
单参数 trait,无条件 impl;== 保持结构相等(D9、trait v1)条件 impl、关联类型,== 走 Eq bound2026-07-26;2026-08-02
Map/Set 是 copy-on-write 的 LinkedHashMap/LinkedHashSet(M4)持久哈希字典树,07-27 起用 Dawn 写成2026-07-21;2026-07-27
无 dawn.toml,目录约定即工程(M4)dawn.toml 可选,承载工程身份与依赖2026-07-17;2026-07-22
字符字面量是 Int(M4)'a' 的类型是 Char,Int 上的 opaque type2026-08-06
教程 11 章,由 Kotlin 测试检查(M3)17 章,英文为正本,每个 dawn run 块由 doc-check.py 实跑2026-08-05 至 08-07
异常屏障叫 java_try(M6)改名为 catch_fault2026-07-29
M5 只是计划;M6 等待生产切流M5 于 2026-07-12 上线;M6 于 2026-07-15 切流、2026-07-16 退役 Python2026-07-12;2026-07-16

早期决定

早期设计决定(M0–M7)按当时写下的样子,保留了自举之前每个选择背后的理由。