主要观点:介绍了 Scrapscript 编程语言,包括其解释器和编译器的开发过程,还涉及到运行时的垃圾回收、标记指针、句柄等方面,以及将 Scrapscript 编译为 WebAssembly 和 Cosmopolitan 可执行文件的内容,最后提及未来的项目计划。
关键信息:
- 解释器简单易写,编译器基于延续传递风格(CPS)开发,核心代码与解释器核心量级相近。
- 编译器处理表达式时生成临时变量来线性化表达式树结构,处理函数时要创建顶层 C 函数并处理函数的闭包。
- Scrapscript 支持模式匹配,实现过程较为复杂,关键是编写与解释器版本相似的匹配函数编译器。
- 运行时采用 Andy Wingo 的半空间收集器进行垃圾回收,通过标记指针和句柄来管理堆对象和指针的有效性。
- 可将 Scrapscript 编译为 WebAssembly 和 Cosmopolitan 可执行文件,未来计划进行活度分析和构建中间表示以进行优化。
重要细节: - 解释器核心约 1300 行 Python 代码,编译器核心约 721 行 runtime.c 和 514 行 compiler.py 代码(不含解析部分)。
- 函数作为值在 Scrapscript 中可传递,闭包对象由函数和环境组成,用于存储自由变量。
- 模式匹配在处理列表和记录时较复杂,需递归匹配并更新环境。
- 运行时的垃圾回收通过标记指针区分堆对象和小整数,句柄用于管理指针的有效性,避免垃圾回收导致指针失效。
- 可通过
./scrapscript.py compile
命令编译 Scrapscript 代码并运行生成的可执行文件。 - 未来计划包括进行活度分析、构建中间表示以及寻找适合的 Web 服务器库以实现与外部世界的交互。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。