CLI / LSP · 源码级兼容
2026-09-26
ZERO UPGRADE COST
P0 崩溃级修复
三条。
这三条都是普通写法就能触发的崩溃,不是边角用法。
修之前:debug 断言 / release 访问违规 0xC0000005。
arena 动态下标写崩溃
arena 缓冲区配 while 循环做 p[j] = j 这类动态下标写入时,会覆盖指针自身,大下标触发访问违规 0xC0000005。
根因:下标读/写路径的指针分支漏了一次 load。所有分支统一 load — 指针始终指向正确缓冲区。
聚合类型隐式返回崩溃
返回 str / String / Vec / struct/enum 的函数,若存在"可能走到函数末尾"的兜底路径(典型如尾部 if 没有 else),兜底值被按整数构造——debug 下断言、release 下访问违规。
编译器现在强制要求:显式 else 或函数末尾显式兜底值。
arena 容量越界静默终止
alloc() 超池容量原本什么都不打印就退出。现在先打印所需槽数、字节数与池容量再终止。
语义不变(宁可错杀、不静默写坏内存),但开发者能定位是哪个 arena 爆了。
CLI & 工具链
不再翻车。
路径含空格彻底修好
以前在 E:\Projects\Aero 这类路径下会被按空格切分 → cannot read file E:\Projects\Aero。现全程按参数数组传递。
新增 version / help
-V / -v / version 输出版本号;--help 退出码 0,不再像以前那样 exit 1。
LSP 诊断全丢 — 已修
诊断 JSON 的对象闭合顺序写反,编辑器解析失败后静默丢弃整条诊断——也就是"IDE 里看不到任何编译错误"。
清掉 4 个历史碎片
tests/verify/ 里有 4 个遗留测试文件实际上不可编译,已修正。
诊断质量
报错更清楚了。
重定义内置函数
以前只报 "cannot define print",现在明确提示"这是内置函数,请改名"。
unknown type 报得更细
会指出该类型在第几行被声明为 struct/enum/union,以及为何此处不可见(可见性规则)。
裸 self 参数
直接提示正确写法(应带 & 或 &mut),而不是只报 "unexpected token"。
HashMap 实参报错
补上"键恒为 i64、值类型由绑定决定"的说明,不会让开发者一头雾水。
已知限制
有意保留。
这些不是 bug,是 1.2.x 版本范围外的设计取舍。以后版本迭代时处理。
数字字面量
十六进制 0xFF / 二进制 0b1010 / 下划线 1_000_000 未支持。
HashMap 键
只能是 i64,且值类型必须由绑定写明。
AI 计算未接运行时
Tensor 只有零初始化与 matmul,Autograd 与一批内建函数未实现。
名义类型顺序
必须"先声明后使用",且 struct 字段不能引用 enum/union。
arena 溢出
直接终止程序(不可捕获、不可恢复)— 宁可错杀、不静默写坏内存。
Vec 越界
原生 Vec 越界是未定义行为(无边界检查);深度递归约 5 万层以上可能栈溢出。
1.2.0 源码包不同源 — 1.2.1 已加自检防复发
1.2.0 的 Windows 源码包与它自带的 aero.exe 不同源(缺 --pyext / --cpp / aero install)。1.2.1 已加入源码树能力自检,构建时逐能力与源码树对表,漏了就拒绝发布。
项目更新
aero-quant 暂停。
已暂停 aero-quant 的 M4 里程碑工作
我们决定暂停 aero-quant 的 M4 里程碑工作,把精力转回语言核心。 这次 1.2.1 暴露的三个 P0 崩溃级缺陷不是小瑕疵 —— 它们在普通写法下就能触发,说明编译器的指针安全层还不够扎实。 在这个层面修好之前,继续叠 AI 模块只会让基础问题更难定位。
不放弃 aero-quant — 只是延后。等 1.3.x 基础稳定后,重新排期。
仓库与插件
aero-lang
编译器源码 github.com/SereinCin/aero-lang
aero-book
官方文档 github.com/SereinCin/aero-book
Marketplace
扩展 ID: serein.aero-lang
SHA256SUMS.txt
发布页校对 — 三平台安装均提供。
Aero 1.2.1
现已发布。
补丁版 · 3 个 P0 崩溃修复 · CLI / LSP 更可靠 · 源码级兼容 ——
升级零成本,直接替换二进制就行。