web-dev-qa-db-ja.com

GHCコアの読み取り

コアはGHCの中間言語です。 Coreを読むことで、プログラムのパフォーマンスをよりよく理解できます。誰かがCoreを読むためのドキュメントやチュートリアルを求めてきましたが、あまり見つけることができませんでした。

GHCコアを読むために利用できるドキュメントは何ですか?

ここに私がこれまで見つけたものがあります:

188
tibbe

GHCコアは、すべてのHaskellが翻訳される System FC 言語です。 Coreの(概算)文法は次のとおりです。

enter image description here

コアは、より単純でよく知られている System F と密接に関連しています。すべての GHCがコアレベルで行う変換 は、パフォーマンスを向上させるために、このコア表現の型を保持するリファクタリングです。そして、それほどよく知られていないので、GHCをプログラムするためにCoreで直接書くことができます。

GHCコアはコンパイラパイプラインに適合します(2002年と同様、sans-LLVMおよびCMM):

enter image description here

GHCコアについて学ぶための主要なドキュメントは次のとおりです。

理解を助けることができる関連資料:

  • GHC -fext-core output
  • GHCのソースを読んで、コアを学ぶのに多くの時間を費やしました。一部は、私の 学部論文 2002年の16ページから説明されています。
  • ghc-core ツールを使用して、私が喜ばれる形式でCoreを生成します。

コアは、次のようなSTGコードに変換されます。

enter image description here

Coreの変な名前は、「Zエンコード」でエンコードされます。

enter image description here

GHCコアのタイプと種類(Tolmachの論文より):

enter image description here

最後に、GHCが知っている基本的な指示までHaskellを最適化すると、GHCの primops がGHCコア出力に定期的に表示されます。 primopセットは、コア関数のセットとして 前処理済みファイル で提供されます

263
Don Stewart

ヒント:型の注釈と強制を気にしない場合は、-ddump-simpl-dsuppress-allオプション。 Core出力は、はるかに読みやすいはずです。

24
nominolo

GHCコア言語ではありませんが、ドンがSTG言語は非常に似ていると述べています。私は最近、STG言語+マシンの型安全性を証明する演習を行った後、Coreを簡単に理解できることがわかりました。

STGの学習に使用したテキストは、非常にアクセスしやすいです。 ストックハードウェアでの遅延関数型言語の実装:The Spineless Tagless G-machine by Simon Peyton-Jones。紙の多くは実装の詳細に関係していますが、特にセクション4を、直感に反する設計決定の動機を与え、mapのようなよく知られた例の翻訳を提供するSTG言語の詳細な説明としてお勧めします。

8
acfoltzer

「GHCコア言語の外部表現」は、ghc(share/doc/ghc/core.pdf)または インターネット上

3
Roman Cheplyaka