学习
学习 Loment
有三个可以看的地方,而最有力的那个是一个会解释自己的工具链:它能打印出 整门语言、列出所有内建函数,还能告诉你它给你的任何一个错误码是什么意思。这一页给出合理 的顺序,并把每一步缺什么放在那一步旁边。
缺的是教学,不是材料。手册是参考而不是教程,而且它是用中文写的;设计 记录也是。下面某个资源不完整、或者从没被按你正要用的方式用过时 — 这一页会明说, 而不是让你自己撞上。
在读任何东西之前,先跑点什么
这里没有什么是需要先弄懂才能做的。从 最新发布装上包 — 在 Windows 上取 zip,不要取安装器 — 而那条给你写一个起点的命令,本身就是一段 Loment 程序:
$ loment new hello # writes hello.lomt; it will not overwrite one$ loment run hello.lomt # compile, link, run — the exit code is the program's
编译加运行这条路径不需要 Python、不需要 clang、不需要 WSL。它产出什么、为什么,在 入门那一页;它能产出的两类程序,在 首页。
这门语言,一口气读完
整门语言就是一个带注释的文件,而打印它的那条命令随工具链发布,不是挂在 这个网站上。从头到尾读一遍,你就见过了它所有的构造 — 这门语言是为了经得起这样读 而建的,而不是为了让人一个特性一个特性地学。
另有一份写下来的指南,它刻意做成自足的:安装包里那一份与仓库里那一份 是同一个文件,所以断网也能读,而这个项目的判据就是这两份保持一致。
$ loment example tour # the language as one commented source file$ loment skill --print # the written guide, printed in full
在你运行第一条命令之前,关于它有两件事。tour 里的注释是中文的, 而在当前已发布的这一版上,那个文件链接不过 — 这是自举链接器的一个已知缺陷, 示例页上那四个程序才是已验证能跑的。第二条命令打印出来的 指南是英文的。
不用离开终端就能查东西
这才是真正不寻常的地方,哪怕你压根没打算用这门语言,也值得试一试。工具链就是 参考。这几条都从安装包里读,所以断网也能用,而且回答的是你手上真正的那个版本, 而不是网站上一次说了什么。
$ loment cheat # the whole language on one page$ loment syntax # the syntax on one page$ loment builtins # every built-in function there is$ loment keywords # the reserved words$ loment explain E4 # what a diagnostic means, and what to change
最后一条是值得记住的。一个错误码本身只是个数字;工具链存着与它配套的那句话,会告诉你
编译器在反对什么、该往哪边走。不带参数的 loment help 会列出其余的,而
wiki 上是加长版。
用写下来的材料查东西
手册
从编译器和随包示例构建,随仓库发布:各种规范,以及每个示例模块的 API 参考。 它是用中文写的,而且它是参考而不是教程 — 它告诉你 一个东西是什么,不告诉你拿它做什么。
Wiki
与本站相同的材料,按这门语言的百科来编排:语法、类型、内建表、回收档位、错误码, 以及哪些地方是刻意与其他语言不同的。英文,当你想一页只讲一件事的时候就去那里。
设计记录
这门语言里的每一个决定背后都有一份编号文档,为它辩护,也写出它付了什么代价。 它们是用中文写的,而且不是为学习者写的 — 但当这里或 wiki 上 某一页说"设计上就是这么定的"时,那说的就是这里。
靠读代码来学
仓库里带着一卷示例程序语料,工具链能把其中任何一个打印出来,不用你打开浏览器:
$ loment examples # what is bundled$ loment example demo # print one of them in full
想更温和地上手,本站上那四个程序很短,每一个都带着它真正 产出的输出。完整语料在仓库的 loment/examples/ 下,而其中并不是每个文件今天都链接得过。
让编辑器帮你
VS Code 扩展已经上架扩展市场,名字是
hooyan2022.loment
— 在扩展面板里搜 Loment 就能找到。语言服务器做的事是真的:在你敲字时
给出检查器的诊断、补全、跳转到定义,以及格式化 — 走的是另一个独立的格式化器,不是
服务器本身。也有给 Vim 的文件,而服务器用 LSP 走 stdio 通信,所以任何带客户端的编辑器
都能接上去。
这个扩展是一个客户端,不是一个编译器。它身上不带工具链:语言服务器、 构建和调试器,都从一份 Loment 检出(checkout,从仓库取下来的源码)里跑程序,而这份检出 是从你打开的文件夹一路往上找出来的。装上它、打开一个文件,附近却没有检出时,你只会得到 高亮,别的一概没有 — 在断定这个扩展坏了之前,这点值得知道。
在你依赖它之前,值得知道三处缺口。没有跨文件符号索引,所以补全和 跳转到定义只看得到当前文档。服务器不声明格式化能力;格式化是单独一个程序。而项目 自己的笔记说,服务器从没被人在真编辑器里手动驱动过 — 它的测试直接调用 同一个请求处理器。调试器也有自己的缺口:没有条件断点、没有表达式求值,局部变量是 寄存器而不是名字。wiki 上的 编辑器页把完整清单列了出来。