# AsakusaReading Asakusaソースコードリーディング(第一回)

Asakusaソースコードリーディング(第一回)のハッシュタグまとめ。今回はコンパイラ編。
5
@nsiena

「Flow DSL で "自分自身のデータフローのノードを構築するプログラム" を生成する。Flow DSL を実行すると、グラフを得られる。 #AsakusaReading

2011-05-25 19:29:42
@nsiena

「Operator DSL の設計方針: Flow DSL 用のプログラム = データフローノードを表すクラスを生成。拡張は SPI により、演算子プロセッサの追加により新しい演算子を定義。但し、Flow DSL 用の演算子プロセッサも必要になる。 #AsakusaReading

2011-05-25 19:31:34
Hidenori nhide Nakamura @nhide

ソースコードが全て揃っていない状態でも一部のソースをコンパイルして不足するコードを生成して再度コンパイルしているため、コンパイルエラーが表示されてしまう。 #AsakusaReading

2011-05-25 19:32:35
Hidenori nhide Nakamura @nhide

Asakusaではフロー部品を演算子として取り扱い、フローDSLの部品にすることができる。知らなかった。 #AsakusaReading

2011-05-25 19:33:41
Hidenori nhide Nakamura @nhide

ソースコードの生成は注釈プロセッサがやっている。注釈プロセッサが動くとソースコードらしきものが生成されたと認識してコンパイラが走る。 #AsakusaReading

2011-05-25 19:34:58
@nsiena

「ラウンドを経る途中で、注釈プロセッサでソースコードを生成して、再コンパイルが発生することが原因で、警告が出ることがある。javac がトポロジカルソートされた状態でコンパイルしてくれれば大丈夫(?)。警告を省略する方法を知りたい。 #AsakusaReading

2011-05-25 19:34:59
AOE Takashi @aoetk

とりあえず注釈プロセッサ使って遊んでみたくなったです。 #AsakusaReading

2011-05-25 19:42:56
@nsiena

DMDL を良く把握してないことに気付いた。いわゆる DDL 相当品ということでいいのかしら。 #AsakusaReading

2011-05-25 19:43:17
御徒町@MultiVersionConcurrentClimber(MVCC) @okachimachiorz1

合ってます。RT @nsiena: DMDL を良く把握してないことに気付いた。いわゆる DDL 相当品ということでいいのかしら。 #AsakusaReading

2011-05-25 19:44:51
@nsiena

Ruby だと、C API <http://doc.okkez.net/static/191/function/ > で、ソースコード文字列をコンパイルしたり、構文木を得たり、操作したりできる。これをラップしたライブラリとかも。 #AsakusaReading

2011-05-25 19:46:28
@nsiena

「JavaCC でコードを書く時に、どんな IDE やエディタを使ったらいいか。会場からは、vi と emacs という声が……」.o(あたしも、ふつーのテキストエディタだったなぁ #AsakusaReading

2011-05-25 19:50:52
Chipmunks @TerRisu

Asakusa の勉強中。以前の勉強会で聞いた、演算子を自分で作れるのが面白いって話の根幹に切り込んでる感じ。 #AsakusaReading (@ (株)EC-ONE 8F 会議室) http://4sq.com/kRUamd

2011-05-25 19:50:53
御徒町@MultiVersionConcurrentClimber(MVCC) @okachimachiorz1

きました。気合いのFlowDSL・・・MRのプログラムを自動生成  #AsakusaReading

2011-05-25 19:52:58
@nsiena

「Flow DSL: 演算子をグラフ状に組み立てるもので、ここから MR ジョブネットを構築。BatchDescription → Work* → Workflow → *.java。Work* = …… #AsakusaReading

2011-05-25 19:55:32
marble @marblejenka

#AsakusaReading Flow Graphは演算子を並べただけのやつ。で、こいつをコンパイルしてStage Graphにする。Stage GraphはMRの境界を意識したもの。

2011-05-25 19:55:55
@nsiena

「Work* = FlowDescription → FlowGraph → StageGraph → JobflowModel → *.java。バッチの中にトランザクションが複数あれば、Work* の処理を複数回行なうことになる。 #AsakusaReading

2011-05-25 19:56:25
NAO @nemoton

コンパイル 分割統治  #AsakusaReading (live at http://ustre.am/z663)

2011-05-25 19:57:43
@nsiena

「今は静的に StageGraphも生成してしまっている。しかし、MR の前段の出力の特性を実行時に見て、それに合わせて次段の MR を最適化するなどの余地がある。その場合は、StageGraph 生成を、クラスタ側で実行時に行なう必要が出てくる。 #AsakusaReading

2011-05-25 20:04:19
@nsiena

.o(バッチは繰り返し実行されるから。データ特性は、基本的に変化が小さいという仮定の下で。前回の実行時のデータ特性 (各種統計量) を保存しておいて、次の実行時に最適化をやり直すというアプローチもある。RDBMS みたいに。 #AsakusaReading

2011-05-25 20:07:33
Hidenori nhide Nakamura @nhide

DirectBatchCompiler http://bit.ly/k3ca9E testパッケージに入っているのは歴史的な経緯。 #AsakusaReading

2011-05-25 20:10:40
@nsiena

「記述解析: BatchDriver: Batch DSL 記述を実行。DSL 自体が DSL で表記した内容を解析するブートストラップ方式。ホスト言語を利用する強みの一つ。 #AsakusaReading

2011-05-25 20:10:42