Asakusa DSL

Similar documents
Asakusa Test Driver

Asakusa Frameworkとは? Hadoop 上 で 大 規 模 な 基 幹 バッチ 処 理 を 行 うため のフレームワーク 独 自 ドメイン 特 化 言 語 (Domain Specific Language, DSL)を 使 って 処 理 を 記 述 する DSLはJavaを 元 に

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

Exam : 1z0-882 日本語 (JPN) Title : Oracle Certified Professional, MySQL 5.6 Developer Vendor : Oracle Version : DEMO 1 / 4 Get Latest & Valid 1z0-882-JP

JEB Plugin 開発チュートリアル 第4回

Microsoft Word - Javacc.docx

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Microsoft Word - CombB-Ex

11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デ

デザインパターン第一章「生成《

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

PowerPoint プレゼンテーション

2 概要 市場で不具合が発生にした時 修正箇所は正常に動作するようにしたけど将来のことを考えるとメンテナンス性を向上させたいと考えた リファクタリングを実施して改善しようと考えた レガシーコードなのでどこから手をつけて良いものかわからない メトリクスを使ってリファクタリング対象を自動抽出する仕組みを

Actual4Test Actual4test - actual test exam dumps-pass for IT exams

Exam : 日本語 (JPN) Title : LPI Level 1 Exam 101, Junior Level Linux Certification, Part 1 of 2 Vendor : Lpi Version : DEMO 1 / 4 Get Latest & Va

PowerPoint Presentation

JavaプログラミングⅠ

XAML Do-It-Yourself 第 3 回ベントとトリガー XML Do-It-Yourself 第 3 回目は ベント処理とトリガーについて学習します Windows フォームゕプリケーションでは たとえば ボタンが押された というベントに対応する処理 ( ベントハンドラー ) を記述する

Rmenuフレームワーク

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt

微分方程式 モデリングとシミュレーション

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

V8.1新規機能紹介記事

はじめに HTML5 の登場 Web 上で可能な表現や操作の増加 開発まわりも大きく変化 2

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

スライド 1

国立国会図書館ダブリンコアメタデータ記述

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - chap10_OOP.ppt

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

PowerPoint プレゼンテーション

Android Layout SDK プログラミング マニュアル

コードテンプレートフレームワーク 機能ガイド 基礎編

Java言語 第1回

文字列操作と正規表現

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

Microsoft PowerPoint - 08LR-conflicts.ppt [互換モード]

Microsoft Word - Android_SQLite講座_画面800×1280

PowerPoint プレゼンテーション

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

プログラミング入門1

基本情報STEP UP演習Java対策

開発・運用時のガイド JDK8への移行に伴う留意点 [UNIX]

PowerPoint Presentation

アスペクトの相互作用を解消するアスペクトの提案

医療者のための情報技術入門第 9 回プログラムがはたらくしくみを学ぶ (2) 日紫喜光良 概要 1. はじめに- 具体例から ここから Javascript のプログラミング入門 次はどうする--

Sort-of-List-Map(A)

プログラミング実習I

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

Prog2_9th

C#の基本

for (int x = 0; x < X_MAX; x++) { /* これらの 3 つの行は外部ループの自己データと * 合計データの両方にカウントされます */ bar[x * 2] = x * ; bar[(x * 2) - 1] = (x - 1.0) *

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

intra-mart Accel Platform — IM-BloomMaker プログラミングガイド   初版  

人工知能入門

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

JAVA入門

データベースアクセス

プレポスト【解説】

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

ucR/XML: XML によるucR graph のシリアライズ

メタデータスキーマレジストリ MetaBridge の概要

Visual Studio Do-It-Yourself 第 9 回ユーザーコントロール 第 6 回のリソースから第 8 回のテンプレートで さまざまな方法でコントロールをカスタマズできるこ とを学びました 今回のテーマであるユーザーコントロールは 既存の一つのコントロールをカスタマ ズするのではな

5 継承とは クラス図 98 7 参照の自動型変換 参照の自動型変換 クラス図の見方 クラス図の書き方 継承 継承してクラスを作る インスタンスの初期化 継承の効果を確認する

情報実習Ⅱ

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

Microsoft PowerPoint - Borland C++ Compilerの使用方法(v1.1).ppt [互換モード]

Oracle Business Rules

Microsoft Word - tutorial3-dbreverse.docx

Microsoft PowerPoint ppt

Microsoft PowerPoint - 09.pptx

デジタル表現論・第4回

Microsoft PowerPoint - handout07.ppt [互換モード]

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

DumpsQuestion Professional Dump Collection & Excellent Exam Questions & Latest Questions

Jude を DSL エディタとして使う -Jude API 活用法 年 11 月 14 日稚内北星学園大学東京サテライト校浅海智晴 本日のテーマ Why Jude API What Jude API How Jude API 1

プログラミング入門1

JavaプログラミングⅠ

intra-mart Accel Platform

IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators

JavaプログラミングⅠ

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

データベース 【1:データベースシステムとは】

フローチャート自動生成ツール yflowgen の使い方 目次 1 はじめに 本ツールの機能 yflowgen.exe の使い方 yflowgen.exe の実行方法 制限事項 生成したファイル (gml ファイル形式 ) の開

PowerPoint プレゼンテーション

MISAO with WPF

プレポスト【問題】

クエリの作成が楽になるUDF

UMLプロファイル 機能ガイド

k_seminar_hands_on_for_linux_beginner.pptx

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

UML は次のように表記を拡張して 利用しやすくすることができる ステレオタイプ クラス図などで モデル要素の意味を拡張するもの ギルメット << >> によるラベル表記と アイコン表記がある <<actor>> <<interface>> ステレオタイプ一覧 UML 表記の拡張 ATM 利用者 ス

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

PowerPoint プレゼンテーション

WEBシステムのセキュリティ技術

Transcription:

Asakusa ソースコードリーデゖング #1 - Ashigel Compiler 2011/05/25 あらかわ (@ashigeru)

趣旨 コンパラの中身を説明 どこに何があるか どんな流れか Asakusa DSL については省略 http://www.slideshare.net/ashigeru/insideof-asakusa-dsl Asakusa ソースコードリーデゖング #1 2

進め方 Data Model Definition Language データモデルの定義 (0.2.0~) ウォーミングゕップ Operator DSL 演算子の定義 中くらいのサズ Flow DSL データフローの定義 大きすぎるので拾い読み Asakusa ソースコードリーデゖング #1 3

リソース Gist にメモ https://gist.github.com/988810 口頭の説明より詳しく GitHub のフォークに SCR-01 タグ https://github.com/ashigeru/asakusafw/tree /SCR-01/ Asakusa ソースコードリーデゖング #1 4

一応 コンパイラの基礎 Asakusa ソースコードリーデゖング #1 5

よくある構造 Source Code Abstract Syntax Tree (AST) Abstract Semantic Graph (ASG) Target Code Syntax Analysis Semantic Analysis Code Generation Asakusa ソースコードリーデゖング #1 6

中間表現 Abstract Syntax Tree ソースコードとほとんど同じ構造 (DOM like) ソースコードをプログラムで取り扱いやすく エラートラッキングの基盤 Abstract Semantic Graph ソースコードにまたがる参照情報など付与 粒度をターゲットコードに寄せておく 最適化の基盤 Asakusa ソースコードリーデゖング #1 7

エンジン Syntax Analyzer ソースコードを AST に (= Parser, Front-end) 単純作業 Semantic Analyzer AST を ASG に シンボルを実体にバンデゖング グラフを組み替えて最適化 一番がんばるところ Code Generator ASG をターゲットコードに (= Back-end) 命令レベル最適化がなければほぼ単純作業 Asakusa ソースコードリーデゖング #1 8

Asakusa Framework での構造 Data Model Definition Language (DMDL) 素直な構造 Operator DSL 注釈プロセッサ (JSR-269) として実装 フロントエンドが Java コンパラ Flow DSL Java ホストの DSL フロントエンドは DSL そのもの ( 実行可能 ) いずれも Java のソースコードを生成 厳密には トランスレータ Asakusa ソースコードリーデゖング #1 9

素直な構造でウォーミングゕップ Data Model Definition Language (DMDL) Asakusa ソースコードリーデゖング #1 10

DMDL とは データモデル定義 DSL (0.2.0~) レコード構造をテキストで記述 @namespace(value = com.example) hoge = { number : INT; value : TEXT; }; @namespace(value = com.example) foo = hoge + { extra : DATE; 他のデータモデルを }; 参照 Asakusa ソースコードリーデゖング #1 11

DMDL コンパラ [1.3] *.dmdl AstScript ModelDeclaration *.java Syntax Analysis [1.7] Semantic Analysis [1.8] Code Generation [1.10] Asakusa ソースコードリーデゖング #1 12

中間表現 AstScript DMDL スクリプト一つ分を表す AST ノード 記載された構造をほぼそのまま保持 ModelDeclaration DMDL のモデル定義一つ分を表す ASG ノード 参照データモデルのプロパテゖは展開済 Asakusa ソースコードリーデゖング #1 13

エントリポント [1.4] com.asakusafw.dmdl.java.main#main オプション引数の解析 コンパラタスクの起動 Asakusa ソースコードリーデゖング #1 14

構文解析 [1.7] DmdlParser Java CC で記述したパーサを呼び出す AstScript という AST オブジェクトを生成 Asakusa ソースコードリーデゖング #1 15

意味解析 [1.8] DmdlAnalyzer addmodel メソッドで AST のモデルを追加 内部で依存関係のグラフを構築 全部追加したら resolve メソッドで ASG を構築 全部追加し終わるまで参照解析を始められない Asakusa ソースコードリーデゖング #1 16

Topological Sort DAG 上の要素を依存関係順に並べる 番号の若い順にノードを分析 準備ができていない ことがなくなる 4 3 6 2 5 1 Asakusa ソースコードリーデゖング #1 17

ServiceLoader [1.6, 1.9] Java 標準の Service Provider Interface (SPI) を利用する API "META-INF/services/<interface>" を作り 実装クラスの一覧を記載 ServiceLoader.load(<interface>.class) で実装クラスの一覧をとれる コンパラの拡張ポントとして利用 DMDL では 属性 (@...) に対する Semantic Analyzer のフックとして使う Asakusa ソースコードリーデゖング #1 18

コード生成 [1.10] ConcreteModelEmitter ASG から Java のクラスを生成 Java DOM のラブラリを利用 [1.11] テンプレートエンジンで書くと死ぬ SPI を使って生成するクラスを拡張 [1.12] hashcode, equals, tostring の実装 Writable の実装 などなど Asakusa ソースコードリーデゖング #1 19

DMDL の設計方針 データモデル系の中心 MySQL のリバース結果も DMDL を経由 Excel もここから生成する Data Model Manipulation Language? 拡張は SPI 経由 追加属性でデータモデルの表現を拡張 Java のドラバで生成コードを拡張 MySQL のリバース結果でも利用 Asakusa ソースコードリーデゖング #1 20

やっと Asakusa DSL フゔミリ Operator DSL Asakusa ソースコードリーデゖング #1 21

演算子記述 DSL Operator DSL とは Javaメソッド + 注釈 演算子フゔクトリを生成 Flow DSL 向け 演算子実装クラスを生成 Operator DSL では抽象クラスとして記述 @Update public void op(hoge hoge) { hoge.setvalue(100); } Asakusa ソースコードリーデゖング #1 22

Operator DSL コンパラ [2.2] *.java javax.lang.model... OperatorClass *.java Syntax Analysis [2.6] Semantic Analysis [2.7] Code Generation [2.8] Asakusa ソースコードリーデゖング #1 23

中間表現 javax.lang.model.element.typeelement Java ソースコードの型宣言モデル 注釈プロセッサを使うと簡単に取れる Java 上の参照は解決済み OperatorClass 演算子メソッドの定義だけを持つ 演算子ごとに情報が独立しているため ASG というほど複雑な構造はしていない Asakusa ソースコードリーデゖング #1 24

注釈プロセッサ [2.3] 標準の javac に組み込んで注釈処理に介入できる (Java 6~) javac の中で動く javax.annotation.processing.processor のサブタプをサービスとして登録すると利用可能 Asakusa ソースコードリーデゖング #1 25

エントリポント [2.4] OperatorCompiler 演算子プロセッサの初期化 演算子の種類ごとに個別のプロセッサ SPI 経由で自由に追加可能 演算子メソッドの分析 ターゲットコードの生成 注釈プロセッサとして javac から呼ばれる Asakusa ソースコードリーデゖング #1 26

構文解析 [2.6] 注釈プロセッサで代用 特定の注釈がついたメソッド一覧 などをすでに取り出せる状態 まじめに Java コンパラを書く気はない Asakusa ソースコードリーデゖング #1 27

意味解析 [2.7] OperatorClassCollector 演算子プロセッサを add メソッドで追加 対応する演算子メソッドを裏側で収集 メソッドごとの DSL エラーをここで解析 全部追加したら collect メソッドで ASG を構築 全部追加し終わるまで参照解析を始められない クラスごとの DSL エラーをここで解析 Asakusa ソースコードリーデゖング #1 28

コード生成 [2.8] OperatorClassEmitter 演算子フゔクトリクラス (*Factory) を生成 演算子実装クラス (*Impl) を生成 OperatorFactoryClassGenerator [2.8.1] 演算子ごとに演算子プロセッサを実行 実行結果を元に演算子フゔクトリを生成 Flow DSL で 自分自身のデータフローのノードを構築するプログラム を生成する Asakusa ソースコードリーデゖング #1 29

Operator DSL の設計方針 Flow DSL 用のプログラムを生成 データフローのノード を表すクラス Flow DSL で記述したデータフローを解析するためのコードを生成物に含めてある 拡張は SPI 経由 演算子プロセッサを追加すると新しい演算子を定義できる 実際には Flow DSL 用の演算子プロセッサも別途必要 Asakusa ソースコードリーデゖング #1 30

でかい Flow DSL Asakusa ソースコードリーデゖング #1 31

Flow DSL とは データフロー記述 DSL Operator DSLの演算子をグラフ状にくみ上げ ここからMap Reduceジョブネットを構築 Asakusa ソースコードリーデゖング #1 32

バッチの構造 複数のデータフローを並べたもの 基本的にはバッチ単位でコンパル データフローごとに階層的にコンパル Job #2 Job #1 Job #4 Job #3 1. 1.1. 1.2. 2. 2.1. 2.2. 2.a. 3. 4. Batch Dataflow Operator Asakusa ソースコードリーデゖング #1 33

Flow DSL コンパラ [2.2] BatchDescription FlowDescription Work* FlowGraph StageGraph Workflow JobflowModel *.java *.java Asakusa ソースコードリーデゖング #1 34

コンパルのレヤ stage jobflow batch 分割統治 それぞれのレヤで独立してコンパル スラドの右上に現在のレヤを表示 stage stage stage stage Map Reduce ジョブの単位 jobflow jobflow トランザクション処理の単位 Batch バッチ処理の単位 Asakusa ソースコードリーデゖング #1 35

中間表現 jobflow stage batch BatchDescription ユーザーが記述した Batch DSL 複数のデータフローをまとめて取り扱う Work* ユーザーが記述した Batch DSL を実行した結果 データフロー 1 つ分の Flow DSL を持つ 依存先の Work に関する情報を持つ Workflow コンパル済みのバッチ ジョブネット構造とジョブのコマンド情報

中間表現 stage jobflow Batch FlowDescription ユーザーが記述した Flow DSL 単体のデータフローを取り扱う FlowGraph ユーザーが記述した Flow DSL を実行した結果 StageGraph 実行計画によりジョブ単位に区切ったデータフロー Map Reduce ジョブごとに StageModel JobflowModel コンパル済みのデータフロー ジョブネット構造とステージごとのコマンド情報 外部入出力の情報なども

エントリポント [3.3] jobflow stage batch BatchCompilerDriver コマンドラン引数の解析 DirectBatchCompiler に処理を委譲 DirectBatchCompiler バッチ DSL の解析 テストドラバからも利用する

バッチのコンパル stage jobflow batch バッチの解析 データフローのコンパル ワークフロー情報の出力 Asakusa ソースコードリーデゖング #1 39

記述解析 [3.4] stage jobflow batch BatchDriver ユーザーの記述した DSL を実行 BatchDescription DSL 自体が DSL で表記した内容を解析 ホスト言語を利用する強みのひとつ WorkDescription の依存グラフができる

意味解析 [3.5] jobflow stage batch BatchCompiler WorkDescription を一つ一つ処理 データフローを処理するコンパラに委譲 ワークフローの詳細な計画を立てる ワークフロー内のノード ( データフロー ) に対する処理は次の層で行う

エントリポント [3.6] stage jobflow batch JobFlowWorkDescriptionProcessor データフローひとつ分を処理

データフローのコンパル stage jobflow batch データフローの分析 実行計画 -> ステージグラフ Map Reduceジョブごとに : シャッフル構造の分析 Map, Reduceプログラムの生成 Shuffle 情報の生成 ジョブクラゕントプログラムの生成 入出力情報の生成

記述解析 [3.7] stage jobflow batch JobFlowDriver ユーザーの記述した DSL を実行 FlowDescription バッチ DSL の解析とほぼ同じ FlowGraph ができる この時点ではフローグラフは多層化したまま 後のステージで平坦化する Asakusa ソースコードリーデゖング #1 44

意味解析 [3.8] stage jobflow batch StagePlanner 結線構造の検査 グラフの書き換え フローグラフの標準化 多層化したフローグラフの平坦化 ステージ区切りの抽出 Map, Reduce ブロックの抽出 ステージブロックの抽出 ステージグラフの構築 プラグンで書き換えの種類を増やせる Asakusa ソースコードリーデゖング #1 45

コンパル [3.9] stage jobflow batch StageCompiler シャッフル構造の分析 ステージ構造の分析 シャッフル情報の生成 演算子グラフの生成 Mapper, Reducer の生成 プラグンで演算子の種類を増やせる ジョブクラゕントの生成は後回し この時点では入出力のパスが未確定 Asakusa ソースコードリーデゖング #1 46

コード生成 [3.10] stage jobflow batch JobflowCompiler 入出力の分析 入出力情報の出力 ジョブクラゕントの出力 プラグンで入出力の種類を増やせる 対応している入出力 Hadoop FileInputFormat/FileOutputFormat ThunderGate Asakusa ソースコードリーデゖング #1 47

コード生成 [3.11] stage jobflow batch BatchCompiler ワークフロー情報の出力 プラグンでワークフロー情報の形式を増やせる 対応している形式 Monkey Magic v0.9.7 Experimental Shell Script Asakusa ソースコードリーデゖング #1 48