主要观点:正则表达式在某些情况下比 C 代码甚至手写 SIMD 代码更快。通过比较将 Ruby 字符串转换为 JSON 字符串的三种方式(C 扩展代码、C 扩展代码 + AVX2 SIMD、纯 Ruby 版本),发现纯 Ruby 版本在 TruffleRuby 中比 C 扩展 + SIMD 快 5.4 倍,比基线 C 扩展快 20 倍,且实现更简单。同时,TruffleRuby 在正则表达式匹配(如 Regexp#match?)、Time.new(String)和 StringScanner#scan_integer 等方面比 CRuby 快很多,纯 Ruby 代码更具表达力和正确性。
关键信息:
- 比较了三种将 Ruby 字符串转换为 JSON 字符串的方式的性能。
- 介绍了 TruffleRuby 中正则表达式引擎 TRegex 的优势,如编译为有限状态自动机、自动使用 SIMD、JIT 编译等。
- 给出了 Time.new(String)和 StringScanner#scan_integer 在 TruffleRuby 和 CRuby 中的性能对比。
重要细节:
- C 扩展代码 + SIMD 在 CRuby 中比纯 Ruby 版本快,但在 TruffleRuby 中纯 Ruby 版本更快。
- TruffleRuby 在 Regexp 匹配方面比 CRuby 快 227 倍,原因包括使用 TRegex 引擎、编译为有限状态自动机、避免 ReDoS、JIT 编译、拆分调用站点等。
- Time.new(String)在 TruffleRuby 中比 CRuby 快 2.5 倍,主要是因为创建和初始化 Time 对象的时间差异。
- StringScanner#scan_integer 在 TruffleRuby 中比 CRuby 快约 3 倍,TruffleRuby 实现更简单且更正确,发现了 CRuby 中 StringScanner 扩展的 6 个问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。