1. ホーム
  2. haskell

スーパーコンパイルとは何ですか?

2023-11-25 19:10:26

質問

手短に。私はいくつかのソースで "スーパーコンパイル" について話しているのを見たことがあります。しかし、インターネット上のどこを探しても、次のような文書が 1 つもありません。 これが何であるか . おそらく、説明する価値もないほど誰にでも簡単に思えるからでしょう。

これが実際に何であるか、誰か知っていますか?

どのように解決するのですか?

スーパーコンパイルは、部分評価の一般化としてアプローチすることができます。部分評価の背後にある考え方は、プログラムの多くの部分はコンパイル時に評価することができ、そうあるべきだというものです。スーパーコンパイルはこれを拡張し、コンパイル時に完全に行うことができないものをも評価し、例えば map f (map g xs)map (f . g) xs の定義以外に何もせずに map (少なくとも私は部分的な評価を正しく行ったと思います。私はスーパーコンパイルについてのみ多く読んできました)。

別の見方をすれば、森林破壊、特殊化、インライン化など、他の多くの最適化の組み合わせとして見ることができます。あたかも関数の入力をすでに知っているかのように振る舞い、評価することで、結果をより直接的に計算する方法を得ることができます。中間データ構造がどのように使用されるかを見ることで取り除くことができますし、可能なすべての値を突っ込んで、その結果を case で囲むか、そのふりした値で何か他のことをすることができます。

Max Bolingbrokeはこのテーマについて多くの有用な論文を発表しています - 最初の論文をお勧めします。 評価によるスーパーコンパイル を入門書としてお勧めします。セクション 2 は例によってこのテーマを紹介しており、残りの部分は少し難しいですが、このプロセスについて非常に有益です。Neil Mitchell もまた いくつかの優れたプレゼンテーション で説明しています。

お役に立てれば幸いです。