Каковы ограничения / ограничения компиляции с "+ native"? - PullRequest
7 голосов
/ 05 февраля 2010

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

Относится к: Erlang OTP release компилируется с HiPE?

1 Ответ

11 голосов
/ 06 февраля 2010

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

Кроме того, при переходе между нативным кодом и эмулированным кодом BEAM возникают небольшие накладные расходы, поэтому следует избегать переключения этого типа в замкнутый контур, когда скорость имеет значение. Желательно компилировать все тесно связанные модули с родными, а также, если возможно, и наиболее важными модулями стандартной библиотеки.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...