Hasty Briefsbeta

双语

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语言实现难点提供了宝贵的一手经验。