即时计算决赛

这是关于 JIT 计算器传奇的最后一部分。之前介绍了JIT 计算器挑战及自己的解决方案[https://ochagavia.nl/blog/sol...],今天回顾一些读者的提交。

  • 读者的话:感谢参与挑战的人,对他们来说这是很好的学习经历,如有人仅懂汇编基础也完成了解决方案,有人因对 Cranelift 感兴趣而参与等。
  • 解决方案:分为手工编写 JIT 和基于库的 JIT 两类。

    • 手工编写 JIT:精神类似自己的解决方案,手动在内存中生成机器码然后运行,Matt Nappo 的实现很有教育意义,提供了直接生成机器码和生成汇编再由as汇编器生成机器码的两种 JIT,其仓库的 readme 可深入研究。
    • 基于库的 JIT:用所谓“编译器后端”描述所需的低级指令,然后生成机器码。以 Cranelift 库为例,通过创建函数、块、添加指令等操作描述计算器逻辑,最终生成机器码字节数组,具有低级指令不依赖特定 CPU 架构、有内置优化、利用 Rust 类型系统等优点,Tim Harding 的实现很巧妙[https://ochagavia.nl/blog/jit...]。
  • 其他解决方案:部分提交的解决方案未在网上,已列出部分在线的,如[https://gist.github.com/ieeem...]、[https://metanimi.dy.fi/cgit/e...]、[https://github.com/dvogel/jit...]、[https://github.com/BassCodes/...]、[https://github.com/Creative07...]。
    最后,JIT 计算器挑战结束,若反响好可能会有更多类似内容。
阅读 8
0 条评论