elixir lang bootstrap

12
elixir- lang bootstrap tokyo.ex #1 LT @ohrdev

Upload: tsunenori-oohara

Post on 17-Jan-2017

2.064 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Elixir lang bootstrap

elixir-lang bootstrap

tokyo.ex #1 LT@ohrdev

Page 2: Elixir lang bootstrap

self

おーはら@ohrdev好きなビヘイビア : GenEventbeam-lang.tokyo/ElixirMeetup/tokyo.ex写経 / 仏像彫り / 寺社仏閣所属 :DrecomErlang/Elixir/Ruby/Rails/Lisp/…

Page 3: Elixir lang bootstrap

Bootstrap( 事始め )

• elixir-lang のコードリーディング時の所感– elixir-lang( 自身 ) のソース、どこから読めば良いか– elixir-lang( 自身 ) のコンパイルの流れ– リポジトリ / ビルド構成

Page 4: Elixir lang bootstrap

elixir-lang のインストール$ git clone [email protected]:elixir-lang/[email protected]:elixir-lang/elixir.git$ make clean$ make ★ 今日の話$ make test$ make install

Page 5: Elixir lang bootstrap

ディレクトリ構成elixir_repo|- Makefile|- bin # 実行ファイル (elixir,elixirc,iex,mix) 、実体は erl のシェルスクリプト|- lib |- elixir ★ | |- ebin # beam ファイルの出力先 | |- src # コンパイラ (rebar で erlang コードをコンパイル ) | |- lib # カーネル / コアモジュール (elixirc で elixir コードをコンパイル ) |- eex |- iex |- logger |- mix

Page 6: Elixir lang bootstrap

make

• elixir( コンパイラ / カーネル ) のコンパイル– コンパイラ :erlang コード– コア :elixir_compiler.erl # elixir:core– カーネル :elixir コード

• mix のコンパイル (elixir コード )• ex_unit のコンパイル (elixir コード )• logger のコンパイル (elixir コード )• eex のコンパイル (elixir コード )• iex のコンパイル (elixir コード )

Page 7: Elixir lang bootstrap

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

Page 8: Elixir lang bootstrap

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

Page 9: Elixir lang bootstrap

compile elixir core

• コアモジュール– elixir_compiler.erl• core()• target -> core_main()

Page 10: Elixir lang bootstrap

compile elixir kernel

• lib/elixir/lib/*.ex, */*.ex, */*/*.ex– elixirc でコンパイル– lib/elixir/ebin_/Elixir.XXX.beam を吐く

Page 11: Elixir lang bootstrap

bin

• elixir/elixirc– 実体はシェルスクリプト– やっている事は erl コマンドの実行• erl –s Mod Func # Mod モジュールの Func 関数を実行

• iex:– elixir モジュール ,start_cli 関数 を実行– 実体は Elixir.Kernel.CLI.main の実行

• mix: Mix.CLI.main を bin/elixir で実行

Page 12: Elixir lang bootstrap

まとめ• 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