web-dev-qa-db-ja.com

Erlangは何で書かれていますか?

エリクソンのErlangとErlang/OTPの実装は、どのように書かれてコンパイルされていますか? Assembly、C、またはErlang自体ですか?

更新1:DrJokepuに感謝します。私が正しく理解していれば、ErlangソースからVMへのコンパイラはErlang自体で作成されています。しかし、VMはCで書かれています。

更新2:Hynek-Pichi-Vychodilは多くの詳細を指摘しました。

  • VMとHWが相互作用するドライバー:C.
  • コンパイラー(VMへ)およびライブラリー:Erlang。
  • 拡張機能:ポートまたはErlangノードをその言語で記述することにより、任意の言語で可能です。
110
CDR

Erlang自体はErlangで書かれています。奇妙に聞こえますか?はい、それは部分的にのみ正しいので。それをもっと詳しく見てみましょう:

  1. ErlangプリプロセッサはErlangで書かれています。
  2. ErlangパーサーはErlangで書かれています。
  3. BEAM(バイトコードVM)へのErlangコンパイラはErlangで書かれています。
  4. HilangへのErlangコンパイラ(ネイティブVM拡張))はErlangで書かれています。
  5. Erlang VM BEAMとHiPEは主にCで書かれています。
  6. リンクされたドライバーは主にCで書かれています(これらはVMに接続されており、外部との通信に使用されます)。
  7. OTPはErlangで書かれています。
  8. 別のポートまたはノードは、任意の言語で記述できます。
139

Erlang FAQ から:

10.6最初のErlangコンパイラはどのように書かれたのですか?

(または:Erlangはどのようにブートストラップされましたか?)ジョーの言葉では:

まず、Erlangを実行する抽象マシンを設計しました。これは、JAM machine; JAM = Joe's Abstract Machineと呼ばれていました。

次に、ErlangからJAM=と、エミュレーターが動作するかどうかを確認するためのコンパイラーを作成しました。どちらもプロローグで書かれています。

同時に、Mike WilliamsがJAM用のCエミュレーターを作成しました。

次に、Erlangでerlang-to-jamコンパイラーを書き直し、prologコンパイラーを使用してコンパイルしました。結果のオブジェクトコードは、Cエミュレーターで実行されました。その後、プロローグを捨てました。

90
Tamas Czinege
  • erlangコードの65.9%はErlangで書かれています。
  • erlangの13.4%はXMLで記述されています。
  • erlangの13.6%はCで書かれています。
  • erlangの1.4%はC++で書かれています
  • ...

ohloh サイトでライブ統計と更新統計を確認できます。このレポートはメインのerlang gitリポジトリから生成されます。

14
Saeed Zarinfam