openlang

Можно ли объединить несколько beam-файлов в один?

Я использую .beam как скрипт, чтобы скрыть свой код и запускать его где угодно.

Обычно вместе работают несколько файлов, например:


entry.erl
helper.erl
....

Можно ли собрать несколько beam-файлов в один beam?

Единственное, что приходит в голову, это встроить beam в erl-файл и затем скомпилировать его, например


["[",
lists:map(fun(Artifact) ->
  {ok, Payload} = prim_file:read_file(Artifact),
  ["{", filename:basename(Artifact, ".beam"), ",", io_lib:format("~w", [Payload]), "},"]
end, Artifacts)
"ok]"]

получив


[{module, <<"....">>}]

а затем загрузить через code:load_file

Переведено с английскогоПоказать оригинал

Разговор продолжается 2

Следуя доводам
  1. Ссылка на ответ

    чтобы скрыть свой код и запускать его где угодно

    Файлы .beam не полностью переносимы. Erlang VM не примет файлы, собранные более новой версией OTP или слишком старой версией.

    Я использую .beam как скрипт

    Обычно здесь подходит escript (https://www.erlang.org/doc/apps/stdlib/escript.html), формат архива, который может содержать несколько beam-файлов вместе со средой выполнения Erlang. Среда выполнения Erlang поставляется с программой escript, умеющей распаковывать и выполнять такие архивы. rebar3 поддерживает сборку escript.

    Переведено с английскогоПоказать оригинал

Другие стороны того же вопроса

  1. Уменьшение шума в консоли docker-compose

    Когда docker-compose up запускает все сервисы в моей среде разработки, несколько контейнеров выдают сотни и сотни строк. Можн…

    Ответы 3Последняя активность bash
  2. Можно ли создавать модули расширения Python на языке D вместо C?

    Похоже, D умеет компоноваться с C. Я хочу написать модуль расширения Python на D. Не упускаю ли я какую-то причину, по которо…

    Ответы 2Последняя активность d
  3. Объявлять плагины Micro через Nix?🤔

    В python можно написать так: Python.withPackages (q: with q; [ fastapi ]) Есть ли аналогичный механизм для редактора Micro? М…

    Ответы 3Последняя активность nix