Compiling Scheme to WebAssembly
4 months ago
- #Compiler
- #Scheme
- #WebAssembly
- Bob——一套用Python实现的Scheme语言工具集,刚刚庆祝了它的15岁生日。
- 最初Bob包含解释器、编译器和虚拟机,旨在探索类似CPython的字节码虚拟机技术。
- 后来添加了C++虚拟机,用于在没有Python运行时支持的情况下研究底层虚拟机实现,其特色是采用了自定义的标记-清除垃圾回收器。
- 近期新增的编译器支持将Scheme代码直接编译为WebAssembly(WASM)。
- 该项目目标包括:探索高级语言降级编译到WASM的可行性,以及通过实践掌握WASM的GC扩展功能。
- 关键Scheme对象(如PAIR、BOOL和SYMBOL)通过WASM的GC特性实现,例如使用i31类型处理未装箱的整数。
- 符号数据通过偏移量和长度存储在线性内存中,实现了字符串驻留机制。
- 内置函数'write'直接用WASM文本格式实现,仅需导入少量宿主函数来处理字符和整数输出。
- 该项目为WASM代码生成实践和Scheme语言实现难点提供了宝贵的一手经验。