私は Erlang の Cソース コードを詳しく調べて、内部で何が行われているのかを理解しようとしています。コードの設計と構造に関する情報はどこにありますか?
5 に答える
まず最初に、Erlang を高レベルで紹介しているJoe Armstrong の論文をご覧になることをお勧めします。言語の背後にあるアイデアが何であったかを理解することは役に立ちます。次に、Erlang ランタイム システム ( erts ) に焦点を当てることができます。erlang.erlモジュールは良い出発点になる可能性があります。次に、いわゆる最小リリース、カーネル、およびstdlibを構成するアプリケーションに焦点を当てます。stdlib 内で、動作がどのように実装されているかを確認してください。最初にgen_server.erlモジュールを提案してもよろしいですか?
A Guide To The Erlang Source
http://www.trapexit.org/A_Guide_To_The_Erlang_Source
簡単に言えば、良いガイドはありません。また、コードは十分に文書化されていません。
コードをよく知っている近所の人を見つけて、ちょっとしたおしゃべりと引き換えに夕食を買うことをお勧めします。
それができない場合は、ローダーから始めることをお勧めします。
./erts/emulator/beam/beam_load.c
ビーム表現をきれいに印刷することによって、いくつかの有用な情報を見つけることもできます。OTP が提供する方法があるかどうかはわかりませんが、HiPE プロジェクトにはいくつかのチートがあります。
hipe:c(MODULE, [pp_beam]).
始める必要があります。
(そして、ジョーの本もお勧めします。)
ビームのプリティ プリンターは、'erlc -S' で実行できます。これは、Daniel が言及した hipe:c(M, [pp_beam]) と同等です。
erts_debug:df(Module).
また、VM によって実際に解釈された命令である、ロードされたビーム コードを逆アセンブルするためにも使用します。
デバッガを使うこともあります。OTP は、gdb を非常にうまくサポートするツールを提供します。http://www.erlang.org/pipermail/erlang-questions/2008-September/037793.htmlで使用例を参照してください。
ここでのパーティーには少し遅れました。GitHubからソースをダウンロードするだけなら、内部ドキュメントは非常に優れています。を使用してその一部を生成する必要がありますmake
。
ドキュメントをビルドして、関連するソースのほとんどを/erts
(Erlang Run Time System)の下に置きます。
編集:BEAM Wisdomsも非常に優れたガイドですが、それはあなたが求めているものかもしれませんし、そうでないかもしれません.