一个基线脚本编译器

主要观点:介绍了 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 服务器库以实现与外部世界的交互。
阅读 12
0 条评论