Компиляция Erlang - Erlang как одинокий executeable

Обратите внимание, что возведение в степень путем обработки на квадрат не является самым оптимальным методом. Вероятно, лучше, чтобы можно было сделать как общий метод, который работает на все значения экспоненты, но на определенное значение экспоненты могла бы быть лучшая последовательность, которой нужно меньше умножения.

, Например, если Вы хотите вычислить x^15, метод возведения в степень обработкой на квадрат даст Вам:

x^15 = (x^7)*(x^7)*x 
x^7 = (x^3)*(x^3)*x 
x^3 = x*x*x

Это - в общей сложности 6 умножения.

оказывается, что это может быть сделано с помощью "всего" 5 умножения через цепочечное дополнением возведение в степень .

n*n = n^2
n^2*n = n^3
n^3*n^3 = n^6
n^6*n^6 = n^12
n^12*n^3 = n^15

нет никаких эффективных алгоритмов для нахождения этой оптимальной последовательности умножения. От Википедия :

проблема нахождения самой короткой дополнительной цепочки не может быть решена динамическим программированием, потому что это не удовлетворяет предположение об оптимальной подструктуре. Таким образом, не достаточно разложить питание на меньшие полномочия, каждое из которых вычисляется минимально, так как дополнительные цепочки для меньших полномочий могут быть связаны (для совместного использования вычислений). Например, в самой короткой дополнительной цепочке для aВ№вЃµ выше, подпроблема для aвЃ ¶ должна быть вычислена как (aВі) ВІ, так как aВі снова используется (в противоположность, скажем, aвЃ ¶ = aВІ (aВІ) ВІ, который также требует три, умножается).

25
задан ThinkingStiff 14 March 2013 в 16:59
поделиться

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» в их меню «Пуск». Конечного пользователя не волнует, что как часть программы он также получает копию Erlang. Это деталь реализации.

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

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

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

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

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

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

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

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

\ Program Files \ MyProgram в системе конечного пользователя и создает ярлык для «erl mainmodule.beam» в его меню «Пуск». Конечного пользователя не волнует, что как часть программы он также получает копию Erlang. Это деталь реализации.

\ Program Files \ MyProgram в системе конечного пользователя и создает ярлык для «erl mainmodule.beam» в его меню «Пуск». Конечного пользователя не волнует, что как часть программы он также получает копию Erlang. Это деталь реализации.

15
ответ дан 28 November 2019 в 21:56
поделиться
Другие вопросы по тегам:

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