今学期の授業のために、新しい言語とその言語用のコンパイラを作成する必要があります。これは、締め切りが約 3.5 か月であることを意味します。OCaml はコンパイラを作成するのに適した言語の 1 つだと読んだことがありますが、これまでの経験はありません。したがって、私の質問は次のとおりです: 私が既によく知っている言語 (Java、C、C++) でコンパイラを作成しようとするか、OCaml の学習に時間を費やして代わりに使用する方が良いでしょうか?
1 に答える
それは、各選択肢の関心をどのように評価するかによって異なります。
できるだけ早くコース プロジェクトを終了することが目的の場合は、既によく知っているツールを使用することがおそらく最良の選択です。言語は重要であり、ML 言語はコンパイラーを作成するのに最も適していると私は信じていますが、短期的には、言語、ツール、エラー メッセージ、一般的なイディオムに慣れている方が、おそらく言語関連の生産性の利点よりも優先されます。または、少なくともガベージコレクションされた言語の中で。C で効率的になることができますが、言語をよく知っている必要があります(その場合、おそらく C++ と Java にまとめることはできません)。
コンパイラーやより一般的な言語ツールの構築に興味がある場合、またはコースの終了後にプログラミング言語を学習する場合、静的に型付けされた関数型言語を学習することは確かに価値のある投資であり、コンパイラー コースはそれを行うための優れた言い訳です。
編集:いくつかのポインタ
rgrinberg の有益なコメントは、インスピレーションの源の 1 つとしてMinCamlを紹介することを思い出させてくれます。
私が最初に考えたのは、Andrew Appel による「Compiler Implementation in {C,Java,ML}」という本でしたが、Amazon のコメントにあるように、この本は高度すぎて、コンパイラや ML の入門書として使用することはできません。
Andrej の Bauer Programming Language Zooも優れたリソースですが、コンパイル自体よりも、インタープリターの実装によってさまざまなプログラミング言語を発見することを目的としています (ただし、動物園の動物の中には抽象的な機械にコンパイルされているものもあります)。