Функциональные возможности для отслеживания, точек останова и пошагового перехода, которые предоставляет эмулятор BEAM, недоступны в собственном скомпилированном коде. Существует также ограничение, что нативный код не выгружается из памяти при загрузке более новых версий того же модуля. (Это может быть проблемой, если у вас есть долгосрочная система, в которой вы продолжаете обновлять модули или динамически генерировать и компилировать модули.)
Кроме того, при переходе между нативным кодом и эмулированным кодом BEAM возникают небольшие накладные расходы, поэтому следует избегать переключения этого типа в замкнутый контур, когда скорость имеет значение. Желательно компилировать все тесно связанные модули с родными, а также, если возможно, и наиболее важными модулями стандартной библиотеки.
Наконец, хотя собственный компилятор достаточно хорошо протестирован, вероятность ошибки компилятора в HiPE немного выше, чем ошибок в коде C эмулятора BEAM (хотя, вероятно, не выше, чем ошибок в GCC), поэтому Вы можете подвергнуться большему риску системных сбоев. Хотя в наши дни это довольно редко.
Итак, основное место, где собственная компиляция, вероятно, пока не рекомендуется, - это автономные продукты (например, сервер черного ящика, который вы поставляете клиенту), где стабильность, удаленная отладка и низкое использование памяти ваша основная задача, и скорость вычислений обычно не равна.