Loment
中文

路线图

接下来是什么

项目瞄准的那些版本,从 0.1.5 往后,以及每一版是为了什么。这是一份计划 —— 项目给自己定下的工作的形状,而不是一份时间表。

没有日期,这里也没有任何东西可以下载。下面每一条都是项目选定的一个方向; 没有任何一条是对某个时间的承诺,也没有任何一条是你今天能用的功能。你能安装的是 最新发布,而它包含什么写在 发布历程上。

最近的里程碑:0.1.5 Alpha 1

清单上的下一件事不是一个功能。它的目标被表述为零沉默:这门语言作出的 每一条声称,要么得到一个裁决,要么得到一条能证伪它的测试 — 没有任何东西被描述, 却没有能证伪那份描述的东西。

输入是一份针对其它语言做得好的地方的调研 —— 取自 C、Rust、Java 和 Python —— 目标是 其中每一条最后都被裁决。允许的裁决有三种:照搬机制;照搬意图而不 照搬形式;或者干脆拒绝它,并说明它撞上了哪一处冲突、选了哪一边。有三种说法被当作 失败态:未定、待讨论、以及视情况而定 —— 一条以它们之一结尾的条目并没有被裁决, 它被推迟了,而规则是推迟即算失败。

调研里有些优点无法共存,而这项练习有用的部分,正是被逼着说出放弃的是哪一个、以及 为什么。其中有三处冲突值得点出来,因为它们是这门语言真正坐在其上的那三处:

抽象机器有多厚

C 薄到允许未定义行为,而正是这份薄买来它的速度和可移植性 —— 这门语言什么也不假定。 Rust 厚到能在编译期裁定借用,而正是这份厚买来它的证明 —— 这门语言假定了一大批东西。 两者不可能同时被最大化。

智能住在哪里

Java 把它放进 runtime,并借此买来峰值吞吐和更简单的运维。Loment 存在的理由,是一个 没有 runtime、行为可预测的程序。把收集器塞进内核,就是放弃这门语言存在 的理由 —— 所以回收是一个分档的选择,而不是一条策略。

一个名字在什么时候被解析

Python 在运行期解析:没有仪式,写得也快。Java 在编译期解析:可靠的工具与重构。同一个 import 不可能既在编译期被检查、又不被检查。

这三处里没有一处是靠找到某个聪明的中间点解决的。每一处都是靠选一边、并把另一边的代价写下来 解决的。

之后是什么

0.1.5 —— 回收变成你可以依赖的东西

回收阶梯正是 0.1.5 的目的:它不再是一份设计、而成为一个程序可以指望的性质的那个点。 这座阶梯的大部分已经建成 —— 全部四层都有实现和判据,自适应收集器和 分代那一半都已落地,而这门语言的两份实现在它们上逐字节一致。0.1.5 添加的,是那部分 算不上功能的东西:把它定下来,并且能够说出它保证什么、不保证什么。阶梯本身在 它自己那一页上有描述,而那一页维护着自己的状态行。

0.1.5.x —— runtime 完成

runtime 设置已经存在,带一个默认值,而且它是被强制的,而不只是 提示:在声明没有 runtime 的同时,要求那个需要收集器的回收档,是一个编译错误, 因为两者按定义就互相矛盾。runtime 今天装着的,恰好就是那一档需要的那部分。这一条要 补上其余的部分。

0.1.6 —— 解释器进包

运行程序的第二种方式,落在它那座阶梯的最底一级。那几级已经建好了 —— T0 到 T3 都在仓库里,每一级各有一条判据 —— 但它们一级都还不在发行版里,而 choose vm 仍然不改变编译器发出的东西。0.1.6 补的是这个缺口:解释器随包 发出,而那一页自己带着状态说明。

0.1.7 —— 对象系统被补齐

今天这门语言有结构体、变体各携带单个载荷的枚举、静态派发的 trait,以及在编译期解析的 泛型。这一条是补齐缺的东西,而不是加一个没人要过的功能。

0.1.8 —— 内存管理系统被补齐

它立在上面那些档和那座阶梯之上:回收变成一个系统,而不是一组机制。

0.1.8 之后,那些还在计划之中的条目,这一页不会替它们编造。清单之外有一样东西是单独公布的: 包管理器自己的下一个版本,它在它自己的仓库上 公布。

你怎么判断这些有没有发生

一份路线图只有在日后有办法核对时才值得读,所以诚实的做法是说明核对发生在哪里。这个 项目不把它的计划放在公开的 issue 追踪器里。它把它们记成仓里带编号的设计文档,而 那些文档是中文写的 —— 在你去找之前这件事值得知道,因为这份路线图并不在你预期它会在的地方。

于是每个版本的到来是一件可供查证的事,而不是一句公告:发布历程说明实际发布了什么、什么时候 发布,而下面每一页都维护着自己的状态行,而不是自称已经完工。

发布历程 实际发布过什么,从第一个版本到此刻正在构建的这一版。 wiki 上的路线图 同一份计划,更详细,与语言的其余部分放在一起。 docs/ 带编号的设计记录,这里的每一条在那里是被论证的,而不是被概括的。中文写的。 回到首页 Loment 是什么,以及它构建的两类程序。