AsakusaSCR(第一回)

AsakusaSCRの第一回で、今回はAshigelコンパイラの内容
自分用のメモなのでかなり端折る。

基本的なレビュートレースは
Asakusa SCR #1 - draft  Gist
https://gist.github.com/988810
を参考にすること。
基本的にトレースが難しいので、上記の情報は今後も参考になる

まず、Ashigelは多段構成のコンパイラだけど
DMDLができたことでコンパイラの構成は三層で見る方が良い。

なお、コンパイラの流れは、基本として
Source→AST(Syntax)→ASG(Semantics)→CodeGeneration
の順になる。

AST=DOMに近い(Parser)
ソースと同じ構造のTreeへ展開を行う
このTree構造→エラートラックの基盤(行ナンバーとか)になる

ASG
参照構造を付与する。Ahigelの特徴としてこの段階でターゲットコードに寄せておく

以上の構成で見ておくこと。これはまぁコンパイラの基本とも言えますね。

1.DMDL
データモデルの定義を行う小さなCompilerで
素直な構造をしている。
トポロジカルソートで参照構造の解決をおこなう。

2.OperatorDSL
中程度のCompiler
注釈プロセッサーとして実装

3.FlowDSL
一番大きいCompilerになる。


自分的に注目しておくべき点は

ServiceLoaderを結構利用している。
これはSPIを利用するAPI

OpertorProcesserはそれぞれOpertator毎に作る。
ので独立している。この辺がOperatorの基本的な部分。
独自Operatorは、基本的にフロー部品的に作る方が正解だけど、
別のプラットフォームや最適なMRに展開できる独自アルゴリズム
あるような場合で、プリミティブなOperatorを開発するような場合は
このあたりを参考にしておかないとまずい。

StagePlannerが個人的は最大の肝に見える。
最適化を行うところで
意味解析やグラフの書き換えを行う。
他に様々な処理(平坦化等)を行うので、
このクラスの内容は押さえること。
特に動的な最適を行う場合はこの分に手を入れる必要がある。
各ステージ構成を一度に全部最適化+
順次実行時にそれぞれ順に最適化していくことで
動的に最適化を行うことができる。

とりあえず、こんなところ。