1. ホーム
  2. compiler-construction

[解決済み] なぜ関数型言語でコンパイラを書くと楽なのか?[クローズド]

2023-03-23 08:55:08

質問

私は非常に長い間この質問について考えてきましたが、本当にGoogleで答えを見つけることができませんでしたし、Stackoverflowで同様の質問もありました。重複があれば、私はそのために申し訳ありません。

多くの人が、OCaml や Haskell などの関数型言語でコンパイラやその他の言語ツールを書くことは、命令型言語で書くよりもはるかに効率的で簡単だと言っているようですが、これは本当でしょうか?

これは本当でしょうか?もしそうなら、なぜCのような命令型言語ではなく、関数型言語で書くことが効率的で簡単なのでしょうか?また、関数型言語の言語ツールは、C言語のような低レベルの言語よりも遅くはないのでしょうか?

どのように解決するのですか?

多くの場合、コンパイラはツリーで多く動作します。ソース コードは構文木にパースされます。そのツリーは、型チェックを実行するために、型注釈を持つ別のツリーに変換されるかもしれません。今度は、そのツリーを、コアとなる言語要素だけを含むツリーに変換するかもしれない(構文糖のような表記を糖化していない形に変換する)。そして、そのツリーに対して、基本的には変換である様々な最適化を行う。その後、おそらく何らかの通常の形式でツリーを作成し、そのツリーに対して反復処理を行い、ターゲット (アセンブリ) コードを作成します。

関数型言語は、パターンマッチングや効率的な再帰の優れたサポートなど、木を扱うのが容易な機能を持っています。そのため、一般にコンパイラを書くのに適した言語と考えられています。