Каковы ограничения/ограничения при компиляции Erlang .erl
источник с +native
опция по сравнению с обычным "не собственная" компиляция?
Связанный с: выпуск Erlang OTP компилирует с HiPE?
Функции трассировки, точек останова и одношаговой трассировки, которые предоставляет эмулятор BEAM, недоступны в родном скомпилированном коде. Также существует ограничение на то, что нативный код не выгружается из памяти при загрузке новых версий того же модуля. (Это может быть проблемой, если у вас длительная система, в которой вы продолжаете обновлять модули или генерировать и компилировать модули динамически)
Более того, есть небольшие накладные расходы при переходе от "родного" кода к эмулированному BEAM-коду, так что вам следует избегать использования такого переключателя режимов в узком цикле, где скорость имеет значение. Предпочтительно компилировать все тесно связанные модули с родным кодом, а по возможности и с наиболее важными модулями стандартных библиотек.
Наконец, хотя нативный компилятор достаточно хорошо протестирован, вероятность ошибки компилятора в HiPE немного выше, чем вероятность ошибки в C-коде эмулятора BEAM (хотя, вероятно, не выше, чем вероятность ошибки в GCC), так что вы можете столкнуться с большим риском сегментации системы. Однако в наши дни это довольно редкое явление.
Подводя итог, можно сказать, что основное место, где нативная компиляция, вероятно, пока не рекомендуется, находится в автономных продуктах (например, в черном ящике, который вы поставляете клиенту), где стабильность, удаленная отладка и низкое использование памяти являются вашей основной заботой, а скорость вычислений, как правило, не является таковой.