主要观点:
- 倡导用 Ruby 编程,必要时调用原生代码时应尽量用 Ruby 实现大部分工作,通过少量原生代码做类型转换,适合用 FFI。
- 通常避免使用 FFI 是因为其性能不如原生扩展,通过简单示例基准测试对比 FFI 与 C 扩展及直接调用 Ruby 方法的性能,发现 FFI 最慢。
- 提出想法利用 RJIT 实现 JIT 编译来调用外部函数以减少 FFI 开销,为此编写了相关工具如 AArch64 gem、Fisk gem 和 JITBuffer gem。
- 创建了名为“FJIT”的概念验证,生成运行时可调用外部函数的机器码,其性能比 C 扩展稍快,比间接 Ruby 调用快且比 FFI 快 2 倍多。
关键信息:
- 用 Ruby 写代码时若需调用原生代码,尽量用少量原生代码做类型转换,适合 FFI。
- 示例基准测试中直接调用 String#bytesize 最快,C 扩展次之,间接调用 String#bytesize 再次之,FFI 最慢。
- 利用 RJIT 实现 JIT 编译的相关工具及原理。
- “FJIT”概念验证的性能表现及与其他方法的对比。
重要细节:
- 示例基准测试代码及输出,展示不同方法的性能差异。
- 提到 FJIT 目前限于 ARM64 平台,未处理所有参数类型和返回类型,只处理单参数单返回值函数,需用特定 Ruby 版本运行等限制。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。