質問

Haskellコンパイラが実際にどのように機能するかを説明する紙/doc/何でもどこで入手できますか?私はGHCのドキュメントのかなりの数を読みましたが、頭痛がした後に停止しました。したがって、博士号を理解するために博士号を必要としないものは、あなたがサポートされていることに慣れているものではないものではありません。それが本当に長く、それを理解するのに少し時間がかかる場合、それは問題ではありません。

PS:最も興味深いのはGHCについての何かですが、何でも大丈夫です。

役に立ちましたか?

解決

馬の口から答えを得ることができます!サイモン・ペイトン・ジョーンズ(GHCウィザード)は、機能的なプログラミング言語を実装する方法を説明する本を書きました。現在は印刷物が不足しているため、オンラインで無料で利用できます。 http://research.microsoft.com/en-us/um/people/simonpj/papers/pj-lester-book/

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

他のヒント

特に怠zyな評価の編集に関する詳細をお探しですか? Max Bolingbrokeが言及したSimon Peyton-Jonesの本があります。また、Cleanの実装を詳述している本はオンラインです。

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

あなたが大学の所属を持っていて、何か小さなものが欲しいなら、あなたはこれらの本を手に入れようとすることができます(ヘンダーソン&ディラーは確かに印刷物ではありません):

Antoni Diller「コンパイル機能言語」ISBN 0 471 92027 4

ピーターヘンダーソン「機能プログラミングアプリケーションと実装」ISBN 0-13-331579-7

AJT Davie "Haskellを使用した機能プログラミングシステムの紹介" ISBN 0 521 27724 8

Dillerには、コンビネーター削減を介して怠zyな言語(Pascalで実装)の完全なコンパイラがあります。これは、SASLのためにDavid Turnerによって発明された実装手法でした。ヘンダーソンには、Lispkitのコンパイラの多くの部分があり、Lispのミニチュアで怠zyなバリアントがあります。デイビーは、怠zyな言語を編集するための機械のかなりの部分を詳述しています。たとえば、Simon Peyton-Jonesの本よりもはるかに短いSTGの説明があります(STGはHaskellに使用される抽象的なマシンSPJです)。

クリーンな開発者は、出版物リストを調べる場合、SAPL(シンプルなアプリケーション言語)の実装に関する情報をかなり持っています。

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

最後に、Utrecht HaskellコンパイラUHC(およびEHC)の側面を文書化する論文がかなりあります。情報のほとんどは、コンパイラの編成方法(属性グラマーと「シャッフル」を使用)と、バックエンドの「コンパイル」の方法ではなく、タイプシステム(EHCにはさまざまなレベルのタイプシステムがある)であると思います。作品。

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

まず、おそらく良い基盤を取得する必要があります。

Haskellの内部について何でも説明するものは、Cがそうするよりも、上記のトピックを実質的によりよく理解する必要があると思うでしょう。

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

コンパイラは巨大なテーマであり、ここで完全に説明することは不可能です。しかし、一般的なコンパイラの概要を次に示します。うまくいけば、これにより、GHCについて特に読むことを少し理解しやすくすることができます。

コンパイラは通常、フロントエンドとバックエンドの2つの部分の一連の変換によって動作します。

最初の変換は、単純なテキストを、少し簡単に移動するものに変えることです。これ自体は通常、2つの部分に分割されます。

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

構文分析または解析 - これらの小さなチャンクを木の構造に変えます。 (通常、 AST、抽象的な構文ツリー)

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

次の変換は、ASTをanに変換します IR、中間表現. 。これは一般的に、今日です SSAフォーム、単一の静的割り当て.

これは、一定の伝播、死んだコード分析、ベクトル化などにより最適化されます。

最後の変換はコード生成です。 IRをマシンコードに変換します。これは非常に複雑です。また、低下と呼ばれることもあります。

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

ウィキペディアには、GHCの内部の内部の概要があります( @dan_waterworthの説明に似ていますが、HaskellとGHCに固有):

http://en.wikipedia.org/wiki/glasgow_haskell_compiler#architecture

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top