スーパーコンパイルとは何ですか?
質問
手短に。私はいくつかのソースで "スーパーコンパイル" について話しているのを見たことがあります。しかし、インターネット上のどこを探しても、次のような文書が 1 つもありません。 これが何であるか . おそらく、説明する価値もないほど誰にでも簡単に思えるからでしょう。
これが実際に何であるか、誰か知っていますか?
どのように解決するのですか?
スーパーコンパイルは、部分評価の一般化としてアプローチすることができます。部分評価の背後にある考え方は、プログラムの多くの部分はコンパイル時に評価することができ、そうあるべきだというものです。スーパーコンパイルはこれを拡張し、コンパイル時に完全に行うことができないものをも評価し、例えば
map f (map g xs)
を
map (f . g) xs
の定義以外に何もせずに
map
(少なくとも私は部分的な評価を正しく行ったと思います。私はスーパーコンパイルについてのみ多く読んできました)。
別の見方をすれば、森林破壊、特殊化、インライン化など、他の多くの最適化の組み合わせとして見ることができます。あたかも関数の入力をすでに知っているかのように振る舞い、評価することで、結果をより直接的に計算する方法を得ることができます。中間データ構造がどのように使用されるかを見ることで取り除くことができますし、可能なすべての値を突っ込んで、その結果を
case
で囲むか、そのふりした値で何か他のことをすることができます。
Max Bolingbrokeはこのテーマについて多くの有用な論文を発表しています - 最初の論文をお勧めします。 評価によるスーパーコンパイル を入門書としてお勧めします。セクション 2 は例によってこのテーマを紹介しており、残りの部分は少し難しいですが、このプロセスについて非常に有益です。Neil Mitchell もまた いくつかの優れたプレゼンテーション で説明しています。
お役に立てれば幸いです。
関連
-
[解決済み] Hindley-Milnerのどの部分が理解できないのでしょうか?
-
[解決済み] .の違いは何ですか?(ドット)と$(ドルマーク)の違いは何ですか?
-
[解決済み] JIT(ジャストインタイム)コンパイラとは、どのようなものですか?
-
[解決済み] .aファイル、.soファイルとは何ですか?
-
[解決済み] フリーモナドとは何ですか?
-
[解決済み] Haskell における `mod` と `rem` の違い
-
[解決済み] なぜ依存型でないのか?
-
[解決済み] GHCiから言語拡張を有効にするには?
-
[解決済み] アプリケートは合成し、モナドは合成しない
-
[解決済み] Haskellの次に学ぶべき言語とは?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 機能における非網羅的なパターン【重複あり
-
[解決済み] Haskellで "length "関数を使用しない場合のリストの長さ
-
[解決済み] Haskellはガベージコレクタを必要としますか?
-
[解決済み] GHCiから言語拡張を有効にするには?
-
[解決済み] このフィボナッチ関数はどのようにメモされているのですか?
-
[解決済み] HaskellのComonad型クラスとは何ですか?
-
[解決済み] 難読化されたHaskellのコードはどのように動作するのでしょうか?
-
[解決済み] Lazy I/Oの何がそんなに悪いのか?
-
[解決済み] 現在のFunctional Reactive Programmingの実装状況について教えてください。
-
[解決済み] foldrはどのように機能するのですか?