@@ -23,11 +23,11 @@ Gibbonは最適化の手法を研究するために作られたコンパイラ
2323こうした木構造のデータは、通常ポインターを使ってメモリー内にバラバラに格納されますが、Gibbonによる最適化を行うと、実際にプログラムがどのような順番で木を処理しているのか解析して、(元のデータ構造を配列に変換した上で)その順番に並べられた配列として処理するコードに変換する、という大胆な変換を行います。
2424図にするとこんなイメージでしょうか?
2525
26- ![ 変換前の木構造。各ノードがそれぞれ(レベル順で)A, B, ... , Gという値を持っている] ( /img/2019/hiw-gibbons /tree-and-array1.svg )
26+ ![ 変換前の木構造。各ノードがそれぞれ(レベル順で)A, B, ... , Gという値を持っている] ( /img/2019/hiw-gibbon /tree-and-array1.svg )
2727
2828👆のような木構造があったとして、
2929
30- ![ 行きがけ順(A, B, D, E, C, F, Gの順)でアクセスする] ( /img/2019/hiw-gibbons /tree-and-array2.svg )
30+ ![ 行きがけ順(A, B, D, E, C, F, Gの順)でアクセスする] ( /img/2019/hiw-gibbon /tree-and-array2.svg )
3131
3232👆における、赤い線の順番<small >(行きがけ順)</small >にアクセスする関数があったとします。
3333適当にHaskellの再帰関数として書くと、👇こういうコードです。
@@ -66,7 +66,7 @@ preOrder access (Node char mLeft mRight) = do
6666
6767Gibbonはこの関数と、それが処理する木構造を解析して、
6868
69- ![ 変換された配列。A, B, D, E, C, F, Gの順に要素が並んだただの配列] ( /img/2019/hiw-gibbons /tree-and-array3.svg )
69+ ![ 変換された配列。A, B, D, E, C, F, Gの順に要素が並んだただの配列] ( /img/2019/hiw-gibbon /tree-and-array3.svg )
7070
7171👆のような、ただの配列(とそれに対する関数)にまとめて変換してしまう、というのです!
7272
0 commit comments