21

Haskell コンパイラが実際にどのように動作するかを説明している論文/ドキュメント/その他のものはどこで入手できますか? GHC のドキュメントをかなり読みましたが、頭が痛くなってやめました。ですから、それを理解するのに博士号を必要とせず、「あなたはすでに知っているはずだ」というスタイルで書かれていないものが望ましいでしょう。非常に長く、理解するのに時間がかかる場合でも問題ありません。

PS: 最も興味深いのは GHC に関するものですが、何でも構いません。

4

6 に答える 6

31

馬の口から答えを得ることができます! Simon Peyton Jones (GHC ウィザード) は、関数型プログラミング言語の実装方法を説明する本を書きました。現在絶版のため、オンラインで無料で入手できます: http://research.microsoft.com/en-us/um/people/simonpj/papers/pj-lester-book/

もちろん、この本が書かれてから GHC は進化しましたが、それでも非常に関連性があります。

于 2010-12-08T08:30:00.747 に答える
17

特に遅延評価のコンパイルに関する詳細をお探しですか? Max Bolingbroke によって言及された Simon Peyton-Jones の本があり、Clean の実装を詳述した本もオンラインです。

http://wiki.clean.cs.ru.nl/Functional_Programming_and_Parallel_Graph_Rewriting

大学に所属していて、もっと小さい本が欲しい場合は、これらの本を手に入れることができます (Henderson & Diller は確かに絶版です)。

アントニ・ディラー「関数言語のコンパイル」 ISBN 0 471 92027 4

ピーター・ヘンダーソン「関数型プログラミングの応用と実装」ISBN 0-13-331579-7

AJT Davie 「Haskell を使用した関数型プログラミング システムの紹介」 ISBN 0 521 27724 8

Diller には、コンビネータ リダクションによる遅延言語 (Pascal で実装) 用の完全なコンパイラがあります。これは、David Turner が SASL のために発明した実装手法です。Henderson は、LISPkit のコンパイラの多くの部分を持っています。これは、Lisp のミニチュアで怠惰な変種です。Davie は、遅延言語をコンパイルするためのかなりの機構について詳しく説明しています。たとえば、Simon Peyton-Jones の本よりもはるかに短い STG の説明があります (STG は、Haskell で使用される抽象マシン SPJ です)。

Clean の開発者は、SAPL (Simple Applicative Language) の実装に関するかなりの情報を持っています:

https://clean.cs.ru.nl/Publications

最後に、Utrecht Haskell Compiler UHC (および EHC) の側面を文書化したかなりの数の論文があります。ほとんどの情報は、コンパイラがどのように構成されているか (属性文法と「シャッフル」を使用)、および型システム (EHC にはさまざまなレベルの型システムがあります) がどのように実装されているかであり、バックエンドの「コンパイル」がどのように行われるかではありません。動作します。

于 2010-12-08T09:40:44.850 に答える
5

コンパイラは巨大なテーマであり、ここですべてを説明することは不可能です。ただし、ここでは一般的なコンパイラの概要を示します。願わくば、これが GHC について具体的に読むことを少し理解しやすくするような理解をあなたに与えてくれることを願っています。

コンパイラは通常、フロントエンドとバックエンドの 2 つの部分で一連の変換を行います。

最初の変換は、プレーン テキストをトラバースしやすいものに変換することです。これ自体は通常 2 つの部分に分割されます。

字句解析またはトークン化- プレーン テキストを小さなチャンク (通常は演算子、識別子、リテラルなど) に変換する行為。

構文解析または構文解析- これらの小さなチャンクをツリー構造に変換します。(通常はAST、Abstract Syntax Tree )

次の段階はセマンティック分析です。この段階で、コンパイラは通常、情報 (型情報など) を AST に追加し、シンボル テーブルを作成します。これでフロントエンドは終了です。

次の変換は、AST を中間表現である IR に変換します。これは一般に、最近では SSA フォームである Single Static Assignmentです。

これは、定数伝播、デッドコード分析、ベクトル化などによって最適化されます。

最後の変換はコード生成です。IR をマシンコードに変換します。これは非常に複雑になる可能性があります。下げると言われることもあります。

詳細については、このウィキペディアのページをお勧めします。

于 2010-12-08T08:05:45.753 に答える
4

残念ながら、あなたが探しているものは存在しないのではないかと思います。コンパイラ理論と形式言語理論はコンピュータサイエンスのかなり複雑なトピックであり、Haskellは決して出発点ではありません。

まず、次の点で適切な基礎を築く必要があります。

Haskellの内部について何かを説明するものは、Cが言うよりも、上記のトピックをかなりよく理解する必要があるのではないかと思います。

私はこれまでこのテーマについて1つのコースを受講したので、推奨する正式な文献はありませんが、多くの優れた情報源が存在すると確信しています。

于 2010-12-08T07:41:18.560 に答える
2

ウィキペディアには、GHC の内部構造の優れた読みやすい概要があります (@dan_waterworth の説明に似ていますが、Haskell と GHC に固有のものです)。

http://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler#Architecture

于 2011-05-18T17:51:50.283 に答える
0

私が読んだこの主題に関する最高の論文の1つは次のとおりです。

  • Simon Marlow と Simon Peyton-Jones によるGlasgow Haskell Compiler 。オープン ソース アプリケーションのアーキテクチャ。
于 2019-06-13T10:38:52.140 に答える