[解決済み] なぜ関数型言語でコンパイラを書くと楽なのか?[クローズド]
2023-03-23 08:55:08
質問
私は非常に長い間この質問について考えてきましたが、本当にGoogleで答えを見つけることができませんでしたし、Stackoverflowで同様の質問もありました。重複があれば、私はそのために申し訳ありません。
多くの人が、OCaml や Haskell などの関数型言語でコンパイラやその他の言語ツールを書くことは、命令型言語で書くよりもはるかに効率的で簡単だと言っているようですが、これは本当でしょうか?
これは本当でしょうか?もしそうなら、なぜCのような命令型言語ではなく、関数型言語で書くことが効率的で簡単なのでしょうか?また、関数型言語の言語ツールは、C言語のような低レベルの言語よりも遅くはないのでしょうか?
どのように解決するのですか?
多くの場合、コンパイラはツリーで多く動作します。ソース コードは構文木にパースされます。そのツリーは、型チェックを実行するために、型注釈を持つ別のツリーに変換されるかもしれません。今度は、そのツリーを、コアとなる言語要素だけを含むツリーに変換するかもしれない(構文糖のような表記を糖化していない形に変換する)。そして、そのツリーに対して、基本的には変換である様々な最適化を行う。その後、おそらく何らかの通常の形式でツリーを作成し、そのツリーに対して反復処理を行い、ターゲット (アセンブリ) コードを作成します。
関数型言語は、パターンマッチングや効率的な再帰の優れたサポートなど、木を扱うのが容易な機能を持っています。そのため、一般にコンパイラを書くのに適した言語と考えられています。
関連
-
[解決済み] どなたか「-1.#QNAN」の意味を説明してください。
-
[解決済み] コンパイルとトランスパイルの比較
-
[解決済み] clang(およびLLVM)とgcc / g++の違いは何ですか?
-
[解決済み] (関数型)リアクティブプログラミングとは?
-
[解決済み] コンパイラの書き方を学ぶ【終了しました
-
[解決済み] 関数型プログラミングで時間関数が存在するのはなぜですか?
-
[解決済み] アプリケーション・バイナリ・インターフェース(ABI)とは何ですか?
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
-
[解決済み] 最初のコンパイラはどのように書かれたのですか?
-
[解決済み] 解析木と抽象構文木(AST)の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン