LoginSignup
12
2

Elixirのエントリーポイント

Posted at

はじめに

ElixirとErlangは切ってもきれない関係にあります。
Elixirのelixirコマンドの実態はErlangのerlコマンドで、elixirはErlangVMの上で動作します。

elixirコマンドの実体

elixirコマンドの実体を確認するために、環境変数ELIXIR_CLI_DRY_RUNに値を入れて実行してみましょう。
ここにあるように、elixirコマンドを実行する際、この環境変数に値が入っていると、elixirコマンドを実行(exec)するのではなく、表示(echo)します。

$ elixir -v
Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]

Elixir 1.16.0 (compiled with Erlang/OTP 24)
$ ELIXIR_CLI_DRY_RUN=1 elixir -v
erl -noshell -elixir_root /Users/ohara_tsunenori/.asdf/installs/elixir/1.16.0/bin/../lib -pa /Users/ohara_tsunenori/.asdf/installs/elixir/1.16.0/bin/../lib/elixir/ebin -s elixir start_cli -elixir ansi_enabled true -extra -v
$

elixir -vの例を見ると、elixirコマンドの実体はerlコマンドだとわかります。

erlコマンドの実体

それではerlコマンドの実体は何でしょうか?
erlangをコンパイルすると、erlコマンドが生成されます。
このerlコマンドの実体は、このようなシェルスクリプトです。

コマンドの実体としては、以下の様なerlexecプログラムです。

exec "$BINDIR/erlexec" ${1+"$@"}

erlexecプログラムの実体

では、erlexecプログラムの実体は何でしょうか?
それはC言語で実装されたプログラムです。

Erlangをコンパイルすると最終的にこのCソースコードがコンパイルされてerlexecになります。

まとめ

elixirとerlangの実行コマンドのエントリーポイントを紹介しました。
elixirのプログラムが実行されるとき、裏で何がおこっているのかは、これらのエントリーポイントから追っていくと理解できます。

12
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
2