Your SlideShare is downloading. ×
0
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Groovy indy 20120222
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Groovy indy 20120222

1,435

Published on

2012/2/22開催 JJUG Night Seminar資料

2012/2/22開催 JJUG Night Seminar資料

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,435
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Groovyとindy 2012/2/22 @JJUG Night SeminarJJUG幹事/ JGGUGサポートスタッフ 須江 信洋 http://twitter.com/nobusue http://d.hatena.ne.jp/nobusue ※資料の内容は個人としての意見・見解を述べたものであり、 所属する企業・組織が内容を保証するものではありません。
  • 2. 自己紹介 須江 信洋(すえ のぶひろ)  Twitter: @nobusue  http://www.facebook.com/profile.php?id=732337788 かれこれ10年ほどJavaEE関連の仕事をしてます G*(Groovy関連技術)との関わり  Groovyコミュニティ(JGGUG)サポートスタッフ  「プログラミングGROOVY」執筆チーム  「Groovy イン・アクション」翻訳チーム 言語実装経験ありません・・・ 2
  • 3. 本日のお題 Groovyのメソッド呼出しの仕組み(概要) GroovyのInvokeDynamic対応(indy branch) Groovyの静的型対応3
  • 4. Groovyとは Javaと親和性の高いJVM言語  Javaと(ほぼ)上位互換の文法  +リスト/マップリテラル、クロージャ、etc  Javaで冗長になりがちな処理を簡潔に書ける  Javaのクラス⇔Groovyのクラス スクリプト言語  コンパイル不要、ソースのまま実行可能  内部的にクラスファイルを自動生成(インタープリターではない)  groovycコマンドで明示的なクラスファイル生成も可能 動的言語  MOP(Meta Object Protocol)、ExpandoMetaClass  BuilderやDynamic Finderなどの実装が容易 4
  • 5. MetaClassによる動的メソッド[For Groovy class]class Hoge { }Hoge.metaClass.hello = { name -> return "Hello ${name}!" } assert new Hoge().hello(indy) == Hello indy![For Java class]java.lang.String.metaClass.hello = { name -> return "Hello ${name}!" }assert "abc".hello(indy) == Hello indy!5
  • 6. Groovyのメソッド呼出し概略(1.8.x) Java オブジェクト Groovy のタイプYes 動的メソッ No Yes メソッドが No ド? 存在? Yes インターセプ No invokeクロージャ Groovy拡張 Method() ト可能? 実行 メソッド? No invoke Yes No 動的メソッ Yes Method() ド? GDKメソッド Javaメソッド クロージャ 実行 実行 メソッド実行 実行 6
  • 7. メソッド呼出し効率の改善 Call Siteキャッシュ  動的メソッド呼出しに伴うメソッド探索結果を キャッシュして再利用  Groovy 1.6から導入  かなりの高速化を達成7
  • 8. MOP2: 新世代MOP GroovyのMOPを再設計する取り組み  MOPの実装が複雑になりすぎたことへの反省  Java7のInvokeDynamicに対応  できれば最適化はJVMに任せたい Groovy2.0(現在beta)に一部取り込まれる予 定 InvokeDynamic対応はindyブランチで開発中  https://github.com/groovy/groovy-core/tree/indy8
  • 9. indyブランチの現状(2012/2/22) InvokeDynamicに対応したバイトコードを生成 するための処理の実装中  org.codehaus.groovy.vmplugin.v7.IndyInterface  org.codehaus.groovy.classgen.asm.indy.InvokeDynamicWriter  org.codehaus.groovy.classgen.asm.WriterController これらを有効化するには、 CompilerConfigurationでオプション"indy" を指定する必要あり チューニングなどの最適化や、メインブランチ へのマージはこれからの課題9
  • 10. まだ道半ばですね・・・10
  • 11. 参考: Blackdrags View indy対応のメインコントリビューターの覚書  http://blackdragsview.blogspot.com/2012/01 /invokedynamic-api.html APIリファレンスだけでは分かりづらい箇所や 使い方のコツなど、Groovyへの実装によって 得られた知見がまとめられている11
  • 12. Groovyの静的型対応 GEP8:Static Type Checking  http://docs.codehaus.org/display/GroovyJSR /GEP+8+-+Static+type+checking  Groovyに型安全をもたらすための取り組み GEP10: Static compilation  http://docs.codehaus.org/display/GroovyJSR /GEP+10+-+Static+compilation  Groovyのパフォーマンス向上のための取り組み12
  • 13. GEP8: Static type checking@TypeCheckedvoid method(String message) { if (rareCondition) { println "Did you spot the error in this ${message.toUppercase()}?" }} クラスやメソッドを @TypeChecked で修飾 目的は問題の早期発見(IDE向け?) grumpyブランチで開発中  https://github.com/groovy/groovy-core/tree/grumpy 詳細は @uehaj さんのblogで  http://d.hatena.ne.jp/uehaj/20111114/1321236715 13
  • 14. GEP10: Static compilation@groovy.transform.CompileStaticint fib(int i) { i < 2 ? 1 : fib(i - 2) + fib(i - 1)} 現時点では提案&実験的実装  メソッドを @CompileStatic で修飾  新しい文法 obj->method() でstatic dispatch 目的はパフォーマンス向上(Javaと同等を目指す) experimental-static-compilerブランチで開発中  https://github.com/groovy/groovy- core/tree/experimental-static-compiler 詳細は @uehaj さんのblogで・・・  http://d.hatena.ne.jp/uehaj/20111124/1322117039 14
  • 15. まとめ Groovy 2.0 Groovy as Dynamic Java indyGroovy 1.6 1.8 1.5 grumpy Call Siteキャッシュ experimental- (Dynamic&Static) static- Groovy compiler as Better Java15
  • 16. ご静聴ありがとうございました16

×