Erlang シェルから、 を使用してオンザフライでモジュールをコンパイルできますc("path/to/module.erl")
。compile
モジュール、特に関数を介してこの機能にアクセスすることもできますcompile:file/{1,2}
。
たとえば、次のファイルがあるとしますmymod.erl
。
-module(mymod).
-export([myfun/0]).
myfun() -> io:format("Hello Joe~n").
次に、Erlang シェル (または他のモジュール!) から:
1> compile:file("mymod.erl").
{ok,mymod}
2> mymod:myfun().
Hello Joe
詳細については、コンパイルモジュールの Erldocs を参照してください。
実行時に Erlang コンパイラを使用すると、多くのことができます。たとえば、モジュールのコードを動的に生成し ( erl_syntax
! を使用)、 を使用してファイルに書き込むことなくコンパイルできますcompile:forms/{1,2}
。
(大いなる力と大いなる責任についての標準的なスピーチを挿入してください。)
コードをホットスワップできますか?
はい。
コードを処理するのは通常のユースケースですか?
いいえ。通常、Erlang コードは事前に BEAM バイトコードにコンパイルされます。Erlang が組み込みモードまたはインタラクティブモードのどちらで起動されたかに応じて、モジュールは起動時に読み込まれるか、参照時に動的に読み込まれます。リリースをビルドする場合は、基本的に事前にコンパイルする必要があります。
コンパイラは最終的にどのような利点をもたらしますか?
一つには、コンパイラのような不要なコンポーネントなしでコンパクトなリリースを構築できます。もちろん、事前コンパイルの伝統的な利点もすべて得られます。特に、常にコンパイルに時間を浪費する必要がないという利点があります。
要約すると、その影響を完全に理解し、事前にコードをコンパイルしない十分な理由がない限り、標準的な方法に従ってください。