标准
Loment 语言标准(LLS)
这门语言有一份具名、可引用的标准 —— LLS,也就是 Loment 语言标准 —— 它住在仓库里、挨着它所描述的代码,而不在这一页上。
它是做什么用的,以及它拒绝成为什么
标准存在的意义,是让"这个实现对不对?"有一个不取决于问谁的答案。多数标准自己把规则 写出来作为回答。这一份不这样:项目有一条规则 —— 任何东西的权威副本只存在于一处 —— 所以这份标准不写它自己的任何语言规则。它是套在规则外面的一个框,而框里 的每一样东西,要么是指向单一来源的指针,要么是一句关于"符合性"意味着什么的陈述。
这个框做两件事。它固定表层 —— 语言的哪些部分只能经由一道定义好的程序 改动,以及那道程序是什么。并且它决定符合性,办法是指名由哪套判据来决定。
什么决定符合性
不是这份文档,也不是任何一份实现。标准把这句话明说出来了:当散文、某一份实现、和判据 三者不一致时,判据是对的。一条没过的判据,不许靠放宽这条判据让它通过 —— 只能改实现,或者按那道程序改表层。
还有这套判据看不见的东西。有些判据需要某个工具,而某台机器上未必有, 于是它们报的是跳过,而不是通过 —— 所以"绿"的意思是:跑起来的那几条是绿的。 标准把每一条都点名列出,它还写下了整份文档里最让人不舒服的那句话:这套判据和那些实现 出自同一个作者,所以两份实现彼此吻合,只证明它们吻合。
那些开关
标准用开关来描述 Loment,而不是用它缺什么。这门语言能有的每一个子系统 —— 程序可以用 哪一层、谁来回收内存、二进制里带不带 runtime、它有没有通往外界的端口、以及它是给哪种 执行模型用的 —— 都是程序在它的根单元里说一次、由构建记录下来的一个设置。默认值是那些 让现有程序的行为保持不变的取值。这是默认值的一个属性,不是关于这门语言的一个断言。
标准还划了一条容易漏看的界线。有些开关组合被拒绝,是因为那两个取值意思相反; 另一些被拒绝,只是因为还没有人把它们做出来。一个关着的开关,不是一个被禁止的 开关,标准有意把这两件事分开。
它住在哪里
挨着它所描述的代码,并随它一起定版:标准的版本就是它所定义的那层表层的版本。 一个号,不是两个 —— 因为单开一条"版次"轴,就需要一张把版次映射到语言版本的对照表, 而那张表会成为第二个事实来源。