Submit Search
Dsl&Builder
Download as PPT, PDF
2 likes
1,275 views
U
Uehara Junji
Grails Code Reading 2008/05/22
Technology
Read more
1 of 26
Download now
Downloaded 21 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
More Related Content
KEY
Cocos2d Shaders
Yuichi Higuchi
PDF
Hacking Ruby with Python
Taisuke Yamada
PDF
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Shintarou Okada
PPTX
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
PDF
並行プログラミングと継続モナド
Kousuke Ruichi
PDF
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
PPTX
エラーハンドリング
道化師 堂華
PPTX
C++0x総復習
道化師 堂華
Cocos2d Shaders
Yuichi Higuchi
Hacking Ruby with Python
Taisuke Yamada
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Shintarou Okada
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
並行プログラミングと継続モナド
Kousuke Ruichi
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
エラーハンドリング
道化師 堂華
C++0x総復習
道化師 堂華
What's hot
(19)
PDF
TypeScript & 関数型講座 第2回 TypeScript という言語
gypsygypsy
PDF
Haml 学習コース 初級編
介翔 鈴木
PPTX
競技プログラミングのためのC++入門
natrium11321
PDF
オブジェクト指向できていますか?
Moriharu Ohzu
PDF
C++入門?
tsudaa
PDF
C++でCプリプロセッサを作ったり速くしたりしたお話
Kinuko Yasuda
PDF
Pfi Seminar 2010 1 7
Preferred Networks
PPT
次世代DaoフレームワークDoma
Toshihiro Nakamura
PDF
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
PDF
闇魔術を触ってみた
Satoshi Sato
PDF
Boost.Flyweight
gintenlabo
PDF
Rake
Tomoya Kawanishi
PDF
組み込みでこそC++を使う10の理由
kikairoya
PDF
クロージャデザインパターン
Moriharu Ohzu
PPTX
Map
kikairoya
PDF
Emcpp item31
mitsutaka_takeda
PDF
Hello Dark-Side C# (Part. 1)
Yuto Takei
PDF
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
Lintaro Ina
PDF
新しい並列for構文のご提案
yohhoy
TypeScript & 関数型講座 第2回 TypeScript という言語
gypsygypsy
Haml 学習コース 初級編
介翔 鈴木
競技プログラミングのためのC++入門
natrium11321
オブジェクト指向できていますか?
Moriharu Ohzu
C++入門?
tsudaa
C++でCプリプロセッサを作ったり速くしたりしたお話
Kinuko Yasuda
Pfi Seminar 2010 1 7
Preferred Networks
次世代DaoフレームワークDoma
Toshihiro Nakamura
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
闇魔術を触ってみた
Satoshi Sato
Boost.Flyweight
gintenlabo
Rake
Tomoya Kawanishi
組み込みでこそC++を使う10の理由
kikairoya
クロージャデザインパターン
Moriharu Ohzu
Map
kikairoya
Emcpp item31
mitsutaka_takeda
Hello Dark-Side C# (Part. 1)
Yuto Takei
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
Lintaro Ina
新しい並列for構文のご提案
yohhoy
Ad
Viewers also liked
(7)
PDF
Java x Groovy: improve your java development life
Uehara Junji
PDF
Seasar Conference2008 Grails(Final)
Uehara Junji
PDF
New features of Groovy 2.0 and 2.1
Uehara Junji
KEY
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Uehara Junji
PPT
Jo si se i tu també sessio torrent
Adrian Benet
PDF
Easy Going Groovy 2nd season on DevLOVE
Uehara Junji
PDF
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Uehara Junji
Java x Groovy: improve your java development life
Uehara Junji
Seasar Conference2008 Grails(Final)
Uehara Junji
New features of Groovy 2.0 and 2.1
Uehara Junji
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Uehara Junji
Jo si se i tu també sessio torrent
Adrian Benet
Easy Going Groovy 2nd season on DevLOVE
Uehara Junji
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Uehara Junji
Ad
Similar to Dsl&Builder
(20)
PDF
G * magazine 0
Tsuyoshi Yamamoto
PDF
Grailsのススメ(仮)
Tsuyoshi Yamamoto
PDF
Groovy base gradle_20130309
Nobuhiro Sue
PDF
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
Tsuyoshi Yamamoto
PDF
Grails 2.0.0.M1の話
Tsuyoshi Yamamoto
PDF
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Tsuyoshi Yamamoto
PDF
20110820 metaprogramming
Masanori Kado
PDF
groovy 2.1.0 20130118
Uehara Junji
PDF
明日から使えるgradle
kimukou_26 Kimukou
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
PDF
Gws 20130315 gradle_handson
Nobuhiro Sue
PDF
Layout analyzerでのgroovyの利用について
kimukou_26 Kimukou
PPTX
Letsgo sendai nobusue_20110528
Nobuhiro Sue
PDF
G * magazine 1
Tsuyoshi Yamamoto
KEY
Aizu lt tokyo_luxion
Tomoaki Tamura
PDF
Gradleどうでしょう
Takuma Watabiki
ODP
こんにちはGroovy
irof N
PDF
現実世界のJRuby(ショートバージョン)
Hiroshi Nakamura
PDF
実践プログラミング DSL
Nemoto Yusuke
PDF
Xtext And Grails20091218
Akira Tanaka
G * magazine 0
Tsuyoshi Yamamoto
Grailsのススメ(仮)
Tsuyoshi Yamamoto
Groovy base gradle_20130309
Nobuhiro Sue
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
Tsuyoshi Yamamoto
Grails 2.0.0.M1の話
Tsuyoshi Yamamoto
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Tsuyoshi Yamamoto
20110820 metaprogramming
Masanori Kado
groovy 2.1.0 20130118
Uehara Junji
明日から使えるgradle
kimukou_26 Kimukou
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
Gws 20130315 gradle_handson
Nobuhiro Sue
Layout analyzerでのgroovyの利用について
kimukou_26 Kimukou
Letsgo sendai nobusue_20110528
Nobuhiro Sue
G * magazine 1
Tsuyoshi Yamamoto
Aizu lt tokyo_luxion
Tomoaki Tamura
Gradleどうでしょう
Takuma Watabiki
こんにちはGroovy
irof N
現実世界のJRuby(ショートバージョン)
Hiroshi Nakamura
実践プログラミング DSL
Nemoto Yusuke
Xtext And Grails20091218
Akira Tanaka
More from Uehara Junji
(20)
PDF
Use JWT access-token on Grails REST API
Uehara Junji
PDF
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
PDF
Groovy Shell Scripting 2015
Uehara Junji
PDF
Shibuya JVM Groovy 20150418
Uehara Junji
PDF
Markup Template Engine introduced Groovy 2.3
Uehara Junji
PDF
Introduce Groovy 2.3 trait
Uehara Junji
PDF
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Uehara Junji
PDF
enterprise grails challenge, 2013 Summer
Uehara Junji
PDF
Groovy kisobenkyoukai20130309
Uehara Junji
PDF
Read Groovy Compile process(Groovy Benkyoukai 2013)
Uehara Junji
PDF
New feature of Groovy2.0 G*Workshop
Uehara Junji
KEY
G* Workshop in fukuoka 20120901
Uehara Junji
KEY
JJUG CCC 2012 Real World Groovy/Grails
Uehara Junji
KEY
Groovy 1.8の新機能について
Uehara Junji
KEY
Jggug ws 15th LT 20110224
Uehara Junji
PDF
Easy Going Groovy(Groovyを気軽に使いこなそう)
Uehara Junji
PDF
GroovyServ concept, how to use and outline.
Uehara Junji
PDF
Clojure
Uehara Junji
PDF
Groovy, Transforming Language
Uehara Junji
KEY
Jggug Nagoya 20090925 Groovy
Uehara Junji
Use JWT access-token on Grails REST API
Uehara Junji
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
Groovy Shell Scripting 2015
Uehara Junji
Shibuya JVM Groovy 20150418
Uehara Junji
Markup Template Engine introduced Groovy 2.3
Uehara Junji
Introduce Groovy 2.3 trait
Uehara Junji
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Uehara Junji
enterprise grails challenge, 2013 Summer
Uehara Junji
Groovy kisobenkyoukai20130309
Uehara Junji
Read Groovy Compile process(Groovy Benkyoukai 2013)
Uehara Junji
New feature of Groovy2.0 G*Workshop
Uehara Junji
G* Workshop in fukuoka 20120901
Uehara Junji
JJUG CCC 2012 Real World Groovy/Grails
Uehara Junji
Groovy 1.8の新機能について
Uehara Junji
Jggug ws 15th LT 20110224
Uehara Junji
Easy Going Groovy(Groovyを気軽に使いこなそう)
Uehara Junji
GroovyServ concept, how to use and outline.
Uehara Junji
Clojure
Uehara Junji
Groovy, Transforming Language
Uehara Junji
Jggug Nagoya 20090925 Groovy
Uehara Junji
Dsl&Builder
1.
DSL&Builder Grails Code
Reading 2008/05/23 上原潤二
2.
DSL 対象領域特化型言語 楽譜♪
, MML, HTML, VHDL, *.ini, *.property, XAML, XUL, Windows のリソース定義言語 ,GIMP の Script-fu, elisp, AutoLISP, Postscript, アセンブラ ( 機械語記述専用言語 ),.. ⇔ 汎用言語
3.
API と DSL
業務特化 構文 汎用言語 -> DSL 語彙 標準API -> ドメインモデル
4.
DSL の利点 文脈の限定
( 前提の決め・制限 ), 詳細や不要機能の隠蔽による 簡潔性・簡易化 高密度 : 変更・レビューが容易 高抽象 : インピーダンスギャップ低減 Grails では .. Groovy 記述部分 (Domain, Contoller, ..) が DSL -> Grails の主たるアドバンテージの源泉の一つ
5.
内部 DSL 言語自身の自己カスタマイズ機能など
を駆使して言語上に作り上げるカスタム言語 ⇔外部DSL(パーサをちゃんと作る) 作るのが面倒 Groovyは内部DSLが得意
6.
DSL の問題点 新しい言語を覚える必要がある
言語仕様のドキュメント化が必要 最終的にはソースを読む
7.
DSL にべんりな Groovy
オペレータオーバーロード ルーズステートメント AST 変換 クロージャ (+MOP) Builder ← 今日のメインテーマ MOP ダイナミックファインダー 明示的なコンパイルが不要 fluent inteface 日本語メソッド名・クラス名
8.
Builder とは何か AKA
GroovyMarkup ツリー型データ構造をクロージャ ( と MOP) を駆使して簡潔に書き下す
9.
例えばこんな感じ (1)
10.
ビルダー記述の一般構造 < ビルダーオブジェクト>
= new なんとかビルダー () < ビルダーオブジェクト >.< トップレベルメソッド > { メソッド名 ( 属性名 : 属性値 , 属性名 : 属性値 ,...) { : } メソッド名 ( 属性名 : 属性値 , 属性名 : 属性値 ,...) { : }.. }
11.
ビルダー分類学 (1) ビルダー作成支援クラスから継承して作る
groovy.util.BuilderSupport groovy.util.FactoryBuilderSupport 自前方式 ( 支援クラスを使用しない ) 自前方式のものを「ビルダー」と呼べるかはやや?だがここでは「広義のビルダー」としておく。
12.
ビルダー分類学 (2) メソッド名を動的に作る
MOPで実装 メソッド名は静的に定まっている 静的にメソッドを定義しておく or MOPで実装
13.
ビルダー実例 ConfigSlurper CliBuilder
自前方式 Grails のビルダーたち constraints, UrlMapping, BeanBuilder,WebBeanBuilder, FlowBuilder, HibernateMappingBuilder, HibernateCriteriaBuilder, JSonBuilder FactoryBuilderSupport を継承 -> SwingBuilder, ObjectGraphBuilder, JmxBuilder BuilderSupport を継承 -> MarkupBuilder, DOMBuilder, AntBuilder, SAXBuilder, NodeBuilder 支援クラスを使用 メソッド名静的 メソッド名動的
14.
ビルダーを作ろう! Let's Build
a Builder!
15.
ビルダー DSL の基本構造
パターン 1( ビルダーを明示使用 ) < ビルダーオブジェクト >.< トップレベルメソッド > { メソッド名 ( 属性名 : 属性値 , 属性名 : 属性値 ,...) { }.. } パターン 2( ごくさりげない DSL) static hogehoge = { メソッド名 ( 属性名 : 属性値 , 属性名 : 属性値 ,...) { }.. } パターン 3( スクリプトファイルとして独立 ) < トップレベルメソッド > { メソッド名 ( 属性名 : 属性値 , 属性名 : 属性値 ,...) { }.. }
16.
実例紹介 MarkupBuilder(Groovy) UrlMapping
Builder(Grails) ロボビルダー
17.
MarkupBuilder 木は作らない ステートマシンで逐次出力
groovy-1.6-beta-1/src/main/groovy/xml/MarkupBuilder.java
18.
BuilderSupport class BuilderSupport
... { : protected abstract void setParent(Object parent, Object child); protected abstract Object createNode(Object name); protected abstract Object createNode(Object name, Object value); protected abstract Object createNode(Object name, Map attributes); protected abstract Object createNode(Object name, Map attributes, Object value); } groovy-1.6-beta-1/src/main/groovy/util/BuilderSupport.java
19.
UrlMappingBuilder(1) こういうやつ class
UrlMappings { static mappings = { "/$controller/$action?/$id?"{ constraints { // apply constraints here } } "500"(view:'/error') } } grails-1.0-RC1/src/grails/grails-app/conf/UrlMappings.groovy
20.
UrlMappingBuilder(1) こういうやつ class
UrlMappings { static mappings = { "/ $ controller/ $ action?/$id?"{ constraints { // apply constraints here } } "500" (view:'/error') } } なんだこれ?文字列? GString? grails-1.0-RC1/src/grails/grails-app/conf/UrlMappings.groovy
21.
UrlMappingBuilder(2) public List
evaluateMappings(Closure closure) { UrlMappingBuilder builder = new UrlMappingBuilder(); closure.setDelegate(builder); // デレゲートをセットしてクロージャを呼ぶ closure.call(); : public Object invokeMethod(String methodName, Object arg) { private Object _invoke(String methodName, Object arg, Object delegate) { if( methodName.startsWith(SLASH) || isResponseCode) { // スラッシュで始まってる場合分岐 : public Object getProperty(String name) { if(urlDefiningMode) { previousConstraints.add(new ConstrainedProperty(UrlMapping.class, name, String.class)); return CAPTURING_WILD_CARD; // "(*)" 変数をワイルドカードに置き換え } else { return super.getProperty(name); } } grails-1.0-RC1/src/web/org/codehaus/groovy/grails/web/mapping/DefaultUrlMappingEvaluator.java
22.
種明かし Groovy は文字列定数がメソッド名になる
"println"("hello"); ←OK a="rintln"; “p$a"("hello"); ←OK invokeMethod でキャプチャ可能 GString 参照は getProperty でキャプチャ可能
23.
ビルダーを作ってみよう ロボットを定義するDSL sample/
robot { body(texture:"gcrlogo.png") { head(texture:"earth.jpg") arm(x:-0.25){} leg(dummy:0) } } TransformGroup createArm(x, y, armLength, armWidth, dx=0, dy=0, dz=0, tx=null) { def trans = transformGroupBase() def shoulder = new Sphere(0.15f, Primitive.GENERATE_TEXTURE_COORDS | Primitive.GENERATE_NORMALS | Primitive.ENABLE_GEOMETRY_PICKING, createAppearance(tx)) def idou = new Transform3D(); idou.setTranslation(new Vector3d(x , y, 0)) def kaitenX = new Transform3D(); kaitenX.rotX(Math.PI*dx) def kaitenY = new Transform3D(); kaitenY.rotY(Math.PI*dy) def kaitenZ = new Transform3D(); kaitenZ.rotZ(Math.PI*dz) idou.mul(kaitenX); idou.mul(kaitenY); idou.mul(kaitenZ) trans.setTransform(idou); trans.addChild(shoulder) def trans2 = transformGroupBase(false) def arm = new Cylinder(0.1f, armLength as float, Primitive.GENERATE_TEXTURE_COORDS | Primitive.GENERATE_NORMALS | Primitive.ENABLE_GEOMETRY_PICKING, createAppearance(tx)) def idou2 = new Transform3D() idou2.setTranslation(new Vector3d(0, -armLength/2, 0)) trans2.setTransform(idou2) trans2.addChild(arm); trans.addChild(trans2) ; return trans } 以下のコードが1行に対応
24.
TIPS メソッド xxx
呼び出しの括弧を省略したい getXxx() というメソッドを定義 ← 手軽 getProperty() でちゃんと定義
25.
まとめ Groovyの簡潔記述能力 =
Groovy言語機能 + DSL による拡張能力 従って、 DSL を活用する -> Groovyの 真 のパワーを発揮 めんどうな3D処理を DSLでwrap (゚Д゚) ウマー Webアプリ3階層システムを Grailsが提供するDSLでwrap (゚Д゚) ウマー
26.
参考リンク Groovy DSL
roundup http://www.warneronstine.com/blog/articles/2008/04/24/groovy-dsl-roundup A Groovy DSL from scratch in 2 hours http://groovy.dzone.com/news/groovy-dsl-scratch-2-hours
Download