Erlang/OTP 27 中的优化 - Erlang/OTP

本文探讨了 Erlang/OTP 27 中的新优化,包括记录更新优化、JIT 优化、减少垃圾生成优化、fun 优化、整数算术优化和众多杂项增强等方面:

  • 近期优化简史:Erlang 优化始于 2018 年 1 月,OTP 22 引入新的 SSA 中间表示,OTP 24 引入 JIT,OTP 25 为 JIT 引入基于类型的优化,OTP 26 改进了基于类型的优化。
  • Erlang/OTP 27 中的 JIT 期望:主要的编译器和 JIT 改进是记录操作的优化,还有许多小的优化使代码更小或更快。
  • 在家尝试:可通过特定命令查看加载模块的本机代码和 BEAM 代码,还介绍了简单记录优化和就地更新记录的示例及相关 BEAM 代码。
  • 简单记录优化:Erlang/OTP 27 编译器将某些记录更新操作重写,减少了指令数量,提高了性能。
  • 就地更新记录:Erlang/OTP 27 引入新的inplace提示,用于在特定条件下直接更新记录,提高了性能,但要考虑堆的安全部分。
  • 通过减少垃圾生成进行优化:就地更新记录通常应是一个明显的优势,但对垃圾收集的影响尚不明确,平均而言,此优化应提高性能,尤其是对于大型记录。
  • fun 优化:Erlang/OTP 27 中 fun 的内部表示发生了变化,使得创建 fun 更简单,测试 fun 的特定arity 更高效,外部 fun 存储方式也得到了优化。
  • 整数算术改进:OTP 26.0.2 补丁通过三种优化使binary_to_integer/1更快,OTP 27 进一步改进了整数算术,提高了pidigits基准测试的运行时间。
  • 众多杂项增强:对许多指令的代码生成进行了增强,还对 Erlang 编译器进行了一些改进,如对=:=运算符的测试进行了优化。
阅读 134
0 条评论