主要观点:介绍如何将 OCaml 程序编译为可在 TI-84+ CE 计算器上运行,利用 Js_of_ocaml 生成 C 代码,通过特定方式实现垃圾回收、构建运行时及构建系统等。
关键信息:
- OCaml 是一种小众函数式语言,作者一直热衷,计算器工具链现支持多种语言但缺 OCaml。
- 有多种 OCaml 编译器,目标是将整个 OCaml 程序编译为可在计算器工具链编译的 ANSI C 文件。
- 新的 C 后端参考 Js_of_ocaml 后端编写,用
goto语句替代复杂逻辑映射。 - 通过将局部变量替换为全局栈的显式读写实现垃圾回收,采用标记清除法。
- 用
extern关键字在 OCaml 中调用 C 函数构建运行时,包括标准库和 TI-84+ CE 库。 - Js_of_ocaml 在 OCaml 构建系统中受支持,C_of_ocaml 也如此,可方便编写计算器程序。
重要细节: - 原生 OCaml 编译器后端需包含垃圾回收和原生函数,因缺乏死代码消除导致代码较大。
- 新 C 后端利用大部分 Javascript 到 C 的映射,仅需添加少量原生函数和垃圾回收。
- 垃圾回收时通过扫描全局栈标记存活对象,超过内存限制或上次收集后两倍时进行收集。
- 构建系统中 LSP 支持和
dune build命令可方便编写计算器程序。 - 目前许多 OCaml 功能不支持,如浮点数、异常等,旋转立方体演示用定点数。未来可能用 wee 使 OCaml 运行在更多地方。所有源代码可在这里找到。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。