コアはGHCの中間言語です。リーディングコアは、プログラムのパフォーマンスをよりよく理解するのに役立ちます。Coreを読むためのドキュメントやチュートリアルを誰かに頼まれましたが、あまり見つかりませんでした。
GHCコアを読むために利用できるドキュメントにはどのようなものがありますか?
これが私がこれまでに見つけたものです:
コアはGHCの中間言語です。リーディングコアは、プログラムのパフォーマンスをよりよく理解するのに役立ちます。Coreを読むためのドキュメントやチュートリアルを誰かに頼まれましたが、あまり見つかりませんでした。
GHCコアを読むために利用できるドキュメントにはどのようなものがありますか?
これが私がこれまでに見つけたものです:
回答:
GHCコアは、すべてのHaskellが翻訳されるSystem FC言語です。コアの(おおよその)文法は、
Coreは、よりシンプルでよく知られたSystem Fと密接に関連しています。コアレベルでGHCが行うすべての変換は、パフォーマンスを向上させるために、このコア表現の型を保持するリファクタリングです。また、あまり知られていませんが、Coreで直接記述してGHCをプログラムできます。
GHCコアはコンパイラーパイプラインに適合します(2002年と同様、sans-LLVMおよびCMM)。
GHCコアについて学ぶための主要なドキュメントは次のとおりです。
理解を助けることができる関連資料:
次に、コアはSTGコードに変換され、次のようになります。
Coreの面白い名前は「Z-encoding」でエンコードされています。
GHCコアのタイプと種類(トルマックの論文より):
最後に、GHCが知っている基本的な指示にHaskellを最適化すると、GHCのプリモップがGHCコア出力に定期的に表示されます。primopセットは、前処理されたファイルでコア関数のセットとして提供されます。
GHCコア言語とは厳密には異なりますが、Donが述べているように、STG言語は非常によく似ています。最近、STG言語+マシンの型安全性を証明する演習を行いましたが、その後、Coreを簡単に理解できることがわかりました。
私がSTGを学ぶために使用したテキストは非常にアクセスしやすいです:ストックハードウェアでの遅延関数型言語の実装: Simon Peyton-JonesによるSpineless Tagless G-machine。このホワイトペーパーの多くは実装の詳細に関係していますが、直感に反する設計決定の動機を与え、などのよく知られた例の翻訳を提供するSTG言語の上位から下位への説明として、特にセクション4をお勧めしますmap
。
「GHCコア言語の外部表現」は、ghc(share/doc/ghc/core.pdf
)のインストールまたはインターネット上にあるドキュメントです。