Каковы ограничения/ограничения компиляции с “+native”?

Каковы ограничения/ограничения при компиляции Erlang .erl источник с +native опция по сравнению с обычным "не собственная" компиляция?

Связанный с: выпуск Erlang OTP компилирует с HiPE?

7
задан Community 23 May 2017 в 12:01
поделиться

1 ответ

Функции трассировки, точек останова и одношаговой трассировки, которые предоставляет эмулятор BEAM, недоступны в родном скомпилированном коде. Также существует ограничение на то, что нативный код не выгружается из памяти при загрузке новых версий того же модуля. (Это может быть проблемой, если у вас длительная система, в которой вы продолжаете обновлять модули или генерировать и компилировать модули динамически)

Более того, есть небольшие накладные расходы при переходе от "родного" кода к эмулированному BEAM-коду, так что вам следует избегать использования такого переключателя режимов в узком цикле, где скорость имеет значение. Предпочтительно компилировать все тесно связанные модули с родным кодом, а по возможности и с наиболее важными модулями стандартных библиотек.

Наконец, хотя нативный компилятор достаточно хорошо протестирован, вероятность ошибки компилятора в HiPE немного выше, чем вероятность ошибки в C-коде эмулятора BEAM (хотя, вероятно, не выше, чем вероятность ошибки в GCC), так что вы можете столкнуться с большим риском сегментации системы. Однако в наши дни это довольно редкое явление.

Подводя итог, можно сказать, что основное место, где нативная компиляция, вероятно, пока не рекомендуется, находится в автономных продуктах (например, в черном ящике, который вы поставляете клиенту), где стабильность, удаленная отладка и низкое использование памяти являются вашей основной заботой, а скорость вычислений, как правило, не является таковой.

11
ответ дан 6 December 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: