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