Подтвердить что ты не робот

Сборник Erlang - Эрланг как самостоятельный исполняемый

Есть ли способ скомпилировать Erlang как автономный исполняемый файл? это означает, что он запускается как exe без времени выполнения Erlang.

4b9b3361

Ответ 1

Пока можно обернуть все в одном EXE, вам не удастся избежать времени выполнения Erlang. Динамические языки, такие как Erlang, на самом деле не могут быть скомпилированы на собственный код x86, например, из-за их характера. Там где-то должен быть переводчик.

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

Вместо этого я предлагаю использовать тот же метод, который они используют для программ Python py2exe и py2app для создания исполняемых файлов Windows и Mac OS X, соответственно. Эти программы загружают основной модуль программы в интерпретатор Python, определяют, какие другие модули ему нужны, используя встроенные механизмы отражения языка, а затем выписывают все эти скомпилированные модули вместе с копией интерпретатора языка и небольшой программой-оболочкой, которая запускает основной модуль программы с помощью интерпретатора. Каталог, содержащий эти файлы, является автономной средой, имеющей все необходимое для запуска программы. Единственное отличие в случае Erlang заключается в том, что python.exe становится erl.exe, а *.pyc становится *.beam. Основная идея остается прежней.

Это можно упростить, если вам не нужно работать с какой-либо произвольной программой Erlang, но только с вашей. В этом случае вы просто копируете интерпретатор Erlang и все .beam файлы, которые составляют вашу программу в один каталог. Вы можете сделать эту часть своей Makefile программы, например.

Затем вы можете использовать свой любимый метод создания setup.exe или MSI для создания дистрибутивного пакета, который устанавливает эту коллекцию файлов в c:\Program Files\MyProgram в системе конечных пользователей и создает ярлык для "erl mainmodule.beam" в их Start меню. Конечным пользователям все равно, что в рамках программы они также получат копию Erlang. Это деталь реализации.