elixir lang bootstrap
TRANSCRIPT
elixir-lang bootstrap
tokyo.ex #1 LT@ohrdev
self
おーはら@ohrdev好きなビヘイビア : GenEventbeam-lang.tokyo/ElixirMeetup/tokyo.ex写経 / 仏像彫り / 寺社仏閣所属 :DrecomErlang/Elixir/Ruby/Rails/Lisp/…
Bootstrap( 事始め )
• elixir-lang のコードリーディング時の所感– elixir-lang( 自身 ) のソース、どこから読めば良いか– elixir-lang( 自身 ) のコンパイルの流れ– リポジトリ / ビルド構成
elixir-lang のインストール$ git clone [email protected]:elixir-lang/[email protected]:elixir-lang/elixir.git$ make clean$ make ★ 今日の話$ make test$ make install
ディレクトリ構成elixir_repo|- Makefile|- bin # 実行ファイル (elixir,elixirc,iex,mix) 、実体は erl のシェルスクリプト|- lib |- elixir ★ | |- ebin # beam ファイルの出力先 | |- src # コンパイラ (rebar で erlang コードをコンパイル ) | |- lib # カーネル / コアモジュール (elixirc で elixir コードをコンパイル ) |- eex |- iex |- logger |- mix
make
• elixir( コンパイラ / カーネル ) のコンパイル– コンパイラ :erlang コード– コア :elixir_compiler.erl # elixir:core– カーネル :elixir コード
• mix のコンパイル (elixir コード )• ex_unit のコンパイル (elixir コード )• logger のコンパイル (elixir コード )• eex のコンパイル (elixir コード )• iex のコンパイル (elixir コード )
compile elixir
1. elixir コンパイラ (erlang) のコンパイル– lib/elixir/src 以下の erl ファイル ,use rebar2. コア / カーネルモジュールのコンパイル– elixir_compiler モジュール /core 関数の実行• lib/elixir/lib 以下のコアルモジュールハンドリング
3. lib/elixir/lib/*.ex のコンパイル (elixirc)4. Unicode モジュールのコンパイル (elixirc)– lib/elixir/unicode # String.Unicode module
compile elixir compiler• lib/elixir/src/*.erl– Rebar でコンパイル– lib/elixir/ebin/elixir_xxx.beam を吐く– Core: elixir_compiler.erl
• Behaviour– Application
• elixir.erl– GenServer
• elixir_config.erl• elixir_counter.erl• elixir_code_server.erl
– Supervisour• elixir_sup.erl
compile elixir core
• コアモジュール– elixir_compiler.erl• core()• target -> core_main()
compile elixir kernel
• lib/elixir/lib/*.ex, */*.ex, */*/*.ex– elixirc でコンパイル– lib/elixir/ebin_/Elixir.XXX.beam を吐く
bin
• elixir/elixirc– 実体はシェルスクリプト– やっている事は erl コマンドの実行• erl –s Mod Func # Mod モジュールの Func 関数を実行
• iex:– elixir モジュール ,start_cli 関数 を実行– 実体は Elixir.Kernel.CLI.main の実行
• mix: Mix.CLI.main を bin/elixir で実行
まとめ• Makefile を読めば大体のフローが把握できる• Elixir コンパイラ– Erlang コード ,rebar でコンパイル– lib/elixir/src => lib/elixir/ebin/elixir_xxxx.beam
• Elixir カーネル / コアモジュール– Elixir コード ,elixirc でコンパイル– lib/elixir/lib => lib/elixir/ebin/Elixir.XXXX.beam