与通常的"非本机"编译相比,.erl使用该+native选项编译Erlang 源时有哪些限制/约束?
Ric*_*rdC 11
BEAM仿真器提供的跟踪,断点和单步执行功能在本机编译代码中不可用.当您加载同一模块的较新版本时,仍然存在一个限制,即本机代码并未真正从内存中卸载.(如果您有一个长期运行的系统,您可以继续升级模块或动态生成和编译模块,这可能是一个问题.)
此外,在本机代码和模拟BEAM代码之间跳转时会有一个小的开销,所以你应该避免在速度很重要的紧密循环中进行这种模式切换.最好将所有密切相关的模块编译为本机模块,如果可能,还编译最重要的标准库模块.
最后,尽管本机编译器经过了很好的测试,但是HiPE中编译器错误的概率比BEAM仿真器C代码中的错误略高(尽管可能不高于GCC中的错误),所以你可以运行系统段错误的风险更大.尽管如此,这种情况非常罕见.
总之,现在可能不推荐本机编译的主要地方是独立产品(如您交付给客户的黑盒服务器),其中稳定性,远程可调试性和低内存使用率是您的主要内容关注和计算速度通常不是.