• 検索結果がありません。

#16 Groovyなう&ふゅーちゃーそれからのGroovy 上原さん GCRアーカイブ main

N/A
N/A
Protected

Academic year: 2018

シェア "#16 Groovyなう&ふゅーちゃーそれからのGroovy 上原さん GCRアーカイブ main"

Copied!
43
0
0

読み込み中.... (全文を見る)

全文

(1)

にroovy う&ふゅーち ー

それから にroovy

GCR 16th

NTT ソフ ア上原潤二

2009/1/15

(2)

にroovyイン・ア ョン(にinA)

デ 国内初 にィんんvオ解説書が翻訳き

デ “ 本“

デ 対応にィんんvオ ー ョン

–原書 にィんんvオ さ.ごベー

– ン にィんんvオ さ.す.じ 動作 う 緻密 修正

–にィんんvオ さ.ご 後 実装 機能 基本的 追記

本発表 説明

(3)

にroovy年表

2003 2004 2005

2006 2007 2008

12

1.5.0

2

1.5.4 2

1.0

4

1.1b2 12

1.0b8

8 3

1.0b4

JSR

2

1.0b10

JSR EA

7

1.0 JSR-6

12

1.5.7 1.6-rc1

本日 対象

Grails 0.5.6 Grails 1.0 1.1b2

1.1b1

GinA本対象

(4)

にroovy さ.さ さ.5 関係

デ さ.さbさ, さ.さb2, ・・・, さ.さ-Rでさ,

–のava “すナ 機能取 込

さ.5

機能 ⼤幅

–さ.さ正式版 存在

–本資料 さ.さ さ.す 新機能

表⽰

さ.ず機能

From 1 .1 1 .5

From 1 .6

(5)

にroovy さ.さ=さ.5 主 機能

デ のava す対応

ー ョン利⽤

– らをumが ン ー らをum ×

– 可変個数引数 – イtatろょ ろmpんィt – にらをらィろょイ

– 共変 戻 値

デ ⾔語仕様

– エ ビ 演算⼦ – りんィがたたき形式 ー

– 名前付 引数 関数呼 出 括弧省略

デ ョ ン

デ どxpaをよん Mらta で」aイイ がどMでき

デ 性能向上,buるりろx,改良,らtょ,らtょ, From 1 .1 1 .5

(6)

にroovy さ.6 主 機能

デ ⾔語仕様

チ代⼊ 多重代⼊

– 分岐 ィらtuィを省略可 – ASへ変換

– にィんんvオ ー ョン定義

デ 動的 振 舞い 関

– のava ン タン Mらtaで」aイイ – どMで とSば

– 実⾏時Mろxろを

: Swろをる てuろ」よらィ 改善

デ ー : にィapら デ 性能向上

デ buるりろx,改良,らtょ,らtょ From 1 .6

(7)

ベン

(8)

ベン ー !

デ へれら でんmputらィ ばaをるuaるら

てらをょれmaィ「イ にamら

–A「a “イれんんtんutナ

ベンチ ー

デ 抜粋 実施

(9)

そ 前

デ 速度 わ ?

ン 速く

–にィんんvオ あ 遅い

のava 書 直

く簡単

デ 処理系速度 体感速度 対 ⽀配的

限 い

Iび 性能 ⽀配的 場合

–にィんんvオ同⼠ ⾯⽩

(10)

にroovy さ.さbetaしをさ た速度⽐

(11)

にroovy さ.5.6をさ た速度⽐

(12)

感想 感覚的

デ にィんんvオ さ.ず ソ ー 爆

速 が理由 後述き

デ のRubオ 同等が 上き

デ のVM上 ⾔語 共通 特徴

–起動 遅い

⽐較的⾷う

(13)

From 1 .1 1 .5

(14)

From 1 .1 1 .5

エルビ 演算⼦(Elvis Operator)

デ 三項演算⼦

A ? て : で

ろり がAき { て } ら」イら { で } 次 等価

デ エ ビ 演算⼦

A ?: て

次 等価

ろり がAき { A } ら」イら { て }

GCC 独自拡張 由来

(15)

エルビ 演算⼦(Elvis Operator)

(16)

ョイン コンパイラ

デ にィんんvオ のava ー 相互依存 い

ン 可能

ょ」aイイ A { } て bた

ょ」aイイ て らxtらをよイ A {}

デ 内部 にィんんvオ タ が

ソ 本体 削除 き ⽣成

のava ン 起動

デ るィんんvオょ -j ョン 実⾏

From 1 .1 1 .5

(17)

ExpandoMetaでlass (EMで)

デ ー 代⼊

ソ 様 扱え

Stィろをる.mらtaょ」aイイ.れら」」ん ち { pィろをt」を “れら」」んナ+よら」らるatら }

“wんィ」よナ.れら」」んがき ここ れら」」んwんィ」よ 出⼒

デ 簡便 動的 ソ 定義

デ pィんtんtオpら 同様 にィんんvオ

ベー びびP ⼆本⽴

どMで 後付け

From 1 .1 1 .5

(18)

From 1 .6

(19)

でall Siteキャッ ュ,でall Site最適化

デ 性能向上 主因

遅い ←にィんんvオ 遅

⼤半 説明

デ 動的 ソ 呼 出 先⽴ ソ

探索 キ ュ

–動的⾔語 効果 ⼤ –のRubオ 先達

⾃体 古く

デ のVM上 極 有効が後述き From 1 .6

(20)

動的メソッ 呼び出 概念フロー

x = new X() x.foo()

呼び出 側ク

ソッ 探索

Class X {

def foo() { }

Groovy X

Pogo呼び出

Pogo …Plain Old Groovy Object

(21)

動的メソッ 呼び出 概念フロー

x = new X() x.foo()

呼び出 側ク

ソッ 探索

Class X {

}

Groovy X

タク ソッ 呼び出

‘foo’ = { }

X タク

(22)

問題 メソッ 探索 コ

デ 探索時 以下 判定 ⾏う必要 あ

–PんjんこPんるん – タ 定義 ソ

デ ン タン

参照 っ

– ン タ呼 出

– ンタセ 可能 っ –Statろょ う っ

明ら

重い

(23)

でall Site でache (さ回⽬)

x = new X() x.foo()

呼び出 側ク

ソッ 探索

Class X {

}

Groovy X

CallSite

‘foo’ = { }

X タク

PogoMetaClassSite インスタンス 保存

CallSite SoftReference 保持さ ら解放さ

(24)

でall Site でache (ざ回⽬)

x = new X() x.foo()

呼び出 側ク

Class X {

}

Groovy X

CallSite

‘foo’ = { }

X タク

保存さ

PogoMetaClassSite インスタンス call()

※実際 呼び出 複数あ 配列CallSiteArray 保持

※意味 動的 変わっ CallSite インスタンス 替え

自分 自分 換え やや面白い

(25)

でall Site最適化ま

デ がさき ソ 探索 2回⽬以降削減

デ が2きのIへ ン展開 道 開く

ン語 ベ 展開

確認 がびpらを のとは 確認可き

⾮常 効果 ⾼いが連鎖的展開 導くき

– ン ン展開 関 HんtSpんt 極 強⼒

状況変わ

とらんptろmろカatろんをが最適化戻 き

デ がしき特定 タ ソ ⾃分専⽤

速いでa」」 Sろtら ⽣成

とらりau」tにィんんvオMらtれんよ#aよよろtろんをa」イ参照

(26)

にrape:依存 ラ ⾃動 ウンロー

デ MavらをこRubオにらmイ い

ベー ュー 管理

–Apaょれら Ivオベー

–にィんんvオ ベ 標準基本機能 実現

–必要 このaィ 実⾏時

–依存関係 あ 連鎖的 のaィ 取 –にィaろ」イ P」uるろを 実⾏時 ュー

機構 含

デ 効⽤: にィんんvオ 配布 容易

From 1 .6

(27)

From 1 .6

にrape使い⽅

デ ー ョン

デ ソ 呼 出

にィapら.るィabがるィんup:かんィる.jろよらイんりtか, mんよu」ら:かjろよら- んイイか, vらィイろんを:かみ2.2.ご,きかき

デ グるィapらグ ン

import org.junit.*

@Grab(group = 'junit', module='junit', version='*') public class GrapeTestSub {

String testMethod() { Assert.class.name }

}

(28)

のavaイン Metaでlass

デ 例:イ ち “xxxナた

イ.mらtaで」aイイ.a ち { pィろをt」を "れんるら"} イ.aがき

ここ れんるら 出⼒

– にィんんvオ 可能

– のava Mらtaで」aイイ 元々あ

デ 参考: Mらtaで」aイイ

Stィろをる.mらtaで」aイイ.xち{pィろをt」を “れんるらナ }

“abょナ.xがき

ここ れんるら 出⼒ From 1 .6

(29)

AST変換

デ ASへ …抽象構⽂⽊

– ン 内 作

中間 ータ構造

デ ASへ変換

– 指定 ー ョン 与え 規則 従

時 ASへ 変換 ⾔語機能

加⼯・追加

ン ターン指向

– ン ソー 修正 ⾔語機能追加

– 定義 結構難 そうがVろイろtんィ き – 利⽤ 簡単

From 1 .6

(30)

AST変換 例

更新伝播がjava.bらaをイ. PィんpらィtオでれaをるらSuppんィt使⽤き

つてろをよab」らこつVらtんab」ら

をらw Iをtらるらィがすき 書け ン タン ⽣成 が未実装っき

つひらwろりオ

paょ「aるら 指定 動い い

つPaょ「aるらSょんpら

時 mろxろを

@でategory / @Mixin

怠惰がばaカろ」オき 初期化

@Lazy

委譲がよら」らるatろんをき ターン 透過的 実現

@とelegate

ン タン ⽣成後 変更 禁⽌

@Immutable

ン 変換

@Singleton

説明 アノテー ョン

(31)

AST変換: @Singleton

つSろをる」らtんを ょ」aイイ なんん {

よらり れら」」んがき { pィろをt」を "れら」」ん" }

}なんん.ろをイtaをょら.れら」」んがき ここ ン ン参照

a ち をらw なんんがき ここ をらw ン タン ⽣成不可 どRRびR

java.」aをる.Ruをtろmらどxょらptろんを: でaをかt ろをイtaをtろatら イろをる」らtんを なんん. べイら

なんん.ろをイtaをょら

(32)

AST変換: @Immutable

つImmutab」ら final ょ」aイイ なんん { Stィろをる x, オ

}a ち をらw なんんが"a","b"き

a.x ち “れんるらナ 値 変更

どRRびR

るィんんvオ.」aをる.Rらaよびを」オPィんpらィtオどxょらp tろんを: でaををんt イらt ィらaよんを」オ pィんpらィtオ: x

(33)

AST変換: @とelegate

ろmpんィt java.utろ」.ょんをょuィィらをt.」んょ「イ.* ょ」aイイ ばんょ「ab」らMap {

つとら」らるatら pィろvatら Map map ち み:め つとら」らるatら pィろvatら ばんょ「 」んょ「 ち をらw

Rららをtィaをtばんょ「 がき

}ィらイ ち をらw ばんょ「ab」らMapがき

ィらイ.」んょ「 がき ばんょ「 振舞う

tィオ {

ィらイ.a ち ご Map 振舞う } りろをa」」オ {

ィらイ.uを」んょ「 がき

} Map Lock implements

(34)

AST変換: @Lazy

ょ」aイイ ばaカオへらイt {

つばaカオ ばろイt イさ ち{pィろをt」を "イさ ろをろtろa」ろカろをる"た みさ,2,しめ }がきた ばろイt イ2 ち {pィろをt」を "イ2 ろをろtろa」ろカろをる"た みじ,す,ずめ }がきた

}x ち をらw ばaカオへらイtがき

ここ イ2 ろをろtろa」ろカろをる イさ 初期化 遅延

pィろをt」を x.イさ イさ 参照 初期化実⾏ ここ イさ ろをろtろa」ろカろをる

ここ みさ, 2, しめ 出⼒ pィろをt」を x.イ2

ここ みじ, す, ずめ 出⼒

(35)

AST変換: @でategory/@Mixin

ろをtらィりaょら Mろxらよ { }

つでatらるんィオがMろxらよき ょ」aイイ でatで」aイイ { よらり れら」」んがき { pィろをt」を "れら」」ん" }

}

つMろxろをがでatで」aイイき

ょ」aイイ Mオで」aイイ ろmp」らmらをtイ Mろxらよ { }

x ち をらw Mオで」aイイがき x.れら」」んがき

interface Mixed 意義 不明 処理上

(36)

動的 Mixinメソッ 呼び出

Stィろをる.mろxろを とatら

aイイらィt "a".るらtへろmらがき ちち さ2しさせず。すじすじすさ

From 1 .6

(37)

整理: ま ま 機能注⼊ ⽅法

タン/ ン 実⾏時

どMで とSば

ー ー

時 ⾏わ

理内容 実⾏時 決定可 呼 出

対応 処理 MびPがろをvん「らMらtれんよ,mら

tれんよMろイイろをるき

ン タン 実⾏時

呼 出 前後 処理 ンターセ タ

ン タン 実⾏時

どxpaをよん

実⾏時

実⾏時

にィんんvオ処理系

実⾏時がuイら⽂実⾏時き

注⼊ イ ン

継承

群っ とら」らるatら ー ョン

書く

Mろxろを ー ョン

イtatろょ ソ でatらるんィオこuイら

Mろxろを ソ 呼 出

がのavaき イtatろょ ソ

とらりau」tにィんんvオMらtれんよイ .javaがとにMき

タン/ ン

どxpaをよんMらtaで」aイイがどM でき

対象 注⼊単位

名称

1.1 1.5 1.6

(38)

ル 代⼊ 多重代⼊

よらり がa, bき ち みさ,2め

よらり がろをt ろ, Stィろをる jき ち みさ, かにィんんvオかめ よらり a, b

がa, bき ち りuをょがき

デ 要素 余 捨 ⾜

をu」」 補填

From 1 .6

(39)

分岐 return省略可

よらり らvらをがxき {

ろり がx % 2 ちち ごき { tィuら } ら」イら { りa」イら } }aイイらィt らvらをが2き ちち tィuら

aイイらィt らvらをがさき ちち りa」イら

wれろ」ら⽂ 最終評価式 値

い う

From 1 .6

(40)

EMで とSL

デ 逐次 代⼊ く

⼀気 定義

Stィろをる.mらtaで」aイイ.よらりろをら {

りんん { イ-> pィろをt」を イ + よら」らるatら } baィ { pィろをt」を “れら」」んナ }

}“wんィ」よナ.りんんが“れaろナき ここ れaろwんィ」よ 出⼒

“abょナ.baィがき ここ れら」」ん 出⼒

From 1 .6

※効用: 逐次代入 途中 未完成状態 ら?

(41)

(42)

: にroovy ⽬指す

デ のava せ く 今 にィんんvオ

⾔語機能拡張 ン

–のava せ が案き ⼿ く複雑

そう 正直

デ “のava ろイ でびてびばナっそう あ い

“のava ろイ Cナ

住 分け

デ にィんんvオ のVM上 ー

ン 別記法

デ のava+にィんんvオ 2 ⼀ 技術

(43)

参考文献

http://glaforge.free.fr/weblog/index.php?itemid=241

http://www.nabble.com/DGM-and-GDoc- to14985262.html#a14985262

http://blog.headius.com/2008/05/power-of-jvm.html

http://glaforge.free.fr/weblog/index.php?itemid=99

http://glaforge.free.fr/weblog/index.php?itemid=256

http://www.infoq.com/jp/articles/groovy-1.5-new‘

http://shootout.alioth.debian.org/

http://d.hatena.ne.jp/masanobuimai/20081224/1230123639

http://docs.codehaus.org/display/GROOVY/Grape

http://docs.codehaus.org/pages/viewrecentblogposts.action?k ey=GROOVY

http://shemnon.com/speling/2008/04/bindable-observable- properties.html

参照

関連したドキュメント

Yamasaki : Formation of Step-Free Surfaces on Diamond (111) Mesas by Homoepitaxial Lateral Growth, Jpn. Inokuma : Anisotropic Lateral Growth of Homoepitaxial Diamond (111) Films

青塚古墳の事例を 2015 年 12 月の TAG に参加 した時にも、研究発表の中で紹介している TAG (Theoretical Archaeology Group) 2015

We hope that foreign students in middle and high school will find this glossary useful and become fond of math.. Moreover, in order to improve the usefulness of this glossary, we

問題はとても簡単ですが、分からない 4人います。なお、呼び方は「~先生」.. 出席について =

電所の事故により当該原子力発電所から放出された放射性物質をいう。以下同じ。

こうしゅう、 しんせん、 ふぉーしゃん、 とんがん、 けいしゅう、 ちゅうざん、

ドリル教材 教材数:6 問題数:90 ひきざんのけいさん・けいさんれんしゅう ひきざんをつかうもんだいなどの問題を収録..

けいさん たす ひく かける わる せいすう しょうすう ぶんすう ながさ めんせき たいせき