Loment 0.1.4 即将发布——这是一个极其激进的语言项目
「激进」这个词容易被用滥,所以下面每一条都跟着它的判据。先说结论:Loment 0.1.4 把语言的两个面交了出去——你用什么语法写、你的项目是什么模式,都不再由语言官方说了算。而它最激进的一条不在语言里,在仓库里。
一、它不接受「多种语言 = 多种语义」
C / Rust / Go / Java / Python 的源都能读进来(判据 loment_multisyntax_test 55/55)。但这不是「支持了五种语言」,方向刚好相反——choose write grammar python 之后,代码就是 Loment,只是用你熟的那种拼法读。语义仍然全是 Loment 的。
这条是回改出来的。原先那版把 Python 当外语处理,还专门加了一对辅助去保住 CPython 的向下取整语义。后来发现方向反了——照着「这是 Loment 的另一种写法」重做,那对辅助就拆掉了。docs/187 自己留了一句「不要再照它做」。
二、编译器不允许只产出目标代码
每一个编译单元都强制导出一份 Potato 形式对象,没有关闭的开关。这不是可选的调试产物,是编译的一部分:不给形式对象,编译就失败。0.1.4 里它长到 v6——逐版把「读者需要知道的东西」收进来:这个程序是 std 还是 no_std、有没有方言、有没有外来语块、这份源码用哪种写法读。
收益是具体的:独立校验器不读源码、不读二进制,只看那份对象,就能判「这个产物声明自己是 no_std,而它引用的原语全在 freestanding 子集里」。「内核读得懂这段代码被允许碰什么」是默认值,不是努力方向。
三、模式是项目级的,恰好一次,库不许写
Rust 的 #![no_std] 是按 crate,组合起来会出问题。Loment 反过来:一条 choose 定死整个项目,只能出现在根单元、恰好一次,而且库不许写——只限次数不够,一个依赖能替你的项目做这个决定,方向是反的。
那库要 hosted 的能力怎么办?声明能力需求——这正是库系统已经在算的东西(能力需求闭包,带来源链)。于是报错报得出是谁拉的:A 需要 fs,A 由 B 引用,B 在根单元里。而且这一版把它开给了用户:set choose <名字> { … } 可以自己定义开关,关掉时是真的不编——词法与括号配对仍跑,解析、语义、代码生成跳过。
四、最激进的一条在仓库里
2026-09-18 定下的一条:0.1.4 正式版之前,移除全部非 Loment 代码——包括参考实现、判据、工具,全部。措辞不是「少依赖」,是「仓里不许有」。清单量过:按扩展名统计,175 个非 Loment 代码文件。
五、一条反复出现的规矩:静默才是敌人
这一版里被修掉的东西,多数不是「不支持」,而是不说。产品路径走的是自举链接器,而它曾经对重定位静默忽略——那是错编,不是不支持。它曾经对超过缓冲上限的输入静默截断,产物在启动时段错误。翻译器曾经把上游跳过的函数整批丢掉不报,看起来像「它只认出一个函数」。认不出源语言时,它的选择是报「请用 --lang 指明」,不猜——一份被猜成 C 的 Loment 文件会转出一堆错的 extern 声明,而且不报错。
所以有一条判据是「跳过项必须被报出来」,另一条是「--out 模式下成功行里还要带跳过的条数」。宁缺勿错,但不许沉默。
但激进不等于完成
- 预编译工具链尚未发布 —— 现在能拿到的是源码。
- 「仓里只有 Loment」那个里程碑还没到 —— 这一版发的是能用的工具链(自举、运行期无 Python、无 libc),不是那个目标。参考实现与 Python 判据仍在仓里。
- 第三方审计仍未过 —— 门禁侧齐了(一条 tools/loment_audit.py 跑完 24 条主张并落盘证据),缺的是第三方复核本身,而这件事作者无法自证。这也是开源不等于发布的原因。
- 前端只出接口,不出实现 —— Potato 的 schema 里没有函数体。所以「用 Rust 语法写整个 Loment 程序」还做不到,那要动 Potato 的结构,不是加个字段。
- 「十种语言」要照着读 —— 四门(C / C++ / Rust / Zig)走 C ABI,链的是你自己手工挑的自包含对象;另六门走进程桥,只是把字符串递给解释器,调不到它的 API。而「这个库在哪、怎么取、怎么装」那一段还不存在。仓库自己的审计(docs/183)点名说 README 的措辞比实情强。
这一版的判据
| 判据 | 结果 |
|---|---|
| loment_multisyntax_test | 55/55 —— 五种语法每种十条,加五条跨语法 |
| loment_ffi_test | 18/18 —— 没有一个 SKIP |
| loment_grammar_test | 14/14 —— 枚举对拍 469 条 |
| loment_std_test | 2/2 —— 27 项与 Python 版逐字节一致 |
| potato_test | 9/9 —— 另有 36 条反例 |
| loment_audit.py | 24 条主张 —— 门禁侧齐,第三方复核未过 |
顺带一处工程上的:静态门禁有 41 条彼此独立的判据,串行跑纯是浪费。并行之后墙钟从 25+ 分钟降到约 3 分钟(实测 188.6 秒墙钟 / 各条合计 1029.3 秒)。