SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
Groovyとindy

      2012/2/22 @JJUG Night Seminar
JJUG幹事/ JGGUGサポートスタッフ 須江 信洋

                http://twitter.com/nobusue
             http://d.hatena.ne.jp/nobusue

         ※資料の内容は個人としての意見・見解を述べたものであり、
         所属する企業・組織が内容を保証するものではありません。
自己紹介
       須江 信洋(すえ のぶひろ)
           Twitter: @nobusue
           http://www.facebook.com/profile.php?id=732337788
       かれこれ10年ほどJavaEE関連の仕事をしてます
       G*(Groovy関連技術)との関わり
           Groovyコミュニティ(JGGUG)サポートスタッフ
           「プログラミングGROOVY」執筆チーム
           「Groovy イン・アクション」翻訳チーム


       言語実装経験ありません・・・
    2
本日のお題
 Groovyのメソッド呼出しの仕組み(概要)
 GroovyのInvokeDynamic対応(indy branch)
 Groovyの静的型対応




3
Groovyとは
       Javaと親和性の高いJVM言語
           Javaと(ほぼ)上位互換の文法
           +リスト/マップリテラル、クロージャ、etc
               Javaで冗長になりがちな処理を簡潔に書ける
           Javaのクラス⇔Groovyのクラス
       スクリプト言語
           コンパイル不要、ソースのまま実行可能
               内部的にクラスファイルを自動生成(インタープリターではない)
               groovycコマンドで明示的なクラスファイル生成も可能
       動的言語
           MOP(Meta Object Protocol)、ExpandoMetaClass
           BuilderやDynamic Finderなどの実装が容易

    4
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
Groovyのメソッド呼出し概略(1.8.x)
                Java        オブジェクト         Groovy
                             のタイプ

Yes   動的メソッ        No                         Yes   メソッドが    No
       ド?                                            存在?


                                     Yes   インターセプ    No        invoke
クロージャ       Groovy拡張                                          Method()
                                            ト可能?
 実行           メソッド?

                       No        invoke       Yes             No
                                                    動的メソッ
      Yes                       Method()             ド?

      GDKメソッド      Javaメソッド                 クロージャ
        実行            実行                                    メソッド実行
                                             実行

  6
メソッド呼出し効率の改善
 Call   Siteキャッシュ
     動的メソッド呼出しに伴うメソッド探索結果を
      キャッシュして再利用
     Groovy 1.6から導入
     かなりの高速化を達成




7
MOP2: 新世代MOP
 GroovyのMOPを再設計する取り組み
   MOPの実装が複雑になりすぎたことへの反省
   Java7のInvokeDynamicに対応
     できれば最適化はJVMに任せたい

 Groovy2.0(現在beta)に一部取り込まれる予
  定
 InvokeDynamic対応はindyブランチで開発中
       https://github.com/groovy/groovy-core/tree/indy



8
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
参考: Blackdrag's View
   indy対応のメインコントリビューターの覚書
       http://blackdragsview.blogspot.com/2012/01
        /invokedynamic-api.html
   APIリファレンスだけでは分かりづらい箇所や
    使い方のコツなど、Groovyへの実装によって
    得られた知見がまとめられている




11
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
GEP8: Static type checking
@TypeChecked
void 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
GEP10: Static compilation
@groovy.transform.CompileStatic
int 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
まとめ                                        Groovy 2.0

                            Groovy
                        as Dynamic Java
                                             indy


Groovy
                  1.6          1.8
 1.5
                                            grumpy
     Call Siteキャッシュ                        experimental-
     (Dynamic&Static)                         static-
                              Groovy         compiler
                          as Better Java

15
ご静聴ありがとうございました




16

Weitere ähnliche Inhalte

Was ist angesagt?

Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3Uehara Junji
 
GroovyServ concept, how to use and outline.
GroovyServ concept, how to use and outline.GroovyServ concept, how to use and outline.
GroovyServ concept, how to use and outline.Uehara Junji
 
groovy 2.1.0 20130118
groovy 2.1.0 20130118groovy 2.1.0 20130118
groovy 2.1.0 20130118Uehara Junji
 
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ckIndy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ckUehara Junji
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Uehara Junji
 
開発現場で使えるかもしれないGroovy
開発現場で使えるかもしれないGroovy開発現場で使えるかもしれないGroovy
開発現場で使えるかもしれないGroovyzgmf_mbfp03
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGUehara Junji
 
JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話disc99_
 
G* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionG* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionKazuchika Sekiya
 
「プログラミングGroovy」入門(公開用)
「プログラミングGroovy」入門(公開用)「プログラミングGroovy」入門(公開用)
「プログラミングGroovy」入門(公開用)orange clover
 
はじめてのGit #gitkyoto
はじめてのGit #gitkyotoはじめてのGit #gitkyoto
はじめてのGit #gitkyotoHisateru Tanaka
 
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャGoji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャShiroyagi Corporation
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basicTakuma Watabiki
 
20120915 Pythonは本当にBlenderの役に立っているか?
20120915 Pythonは本当にBlenderの役に立っているか?20120915 Pythonは本当にBlenderの役に立っているか?
20120915 Pythonは本当にBlenderの役に立っているか?Tetsuo Mitsuda
 
開発を彩る技術たち
開発を彩る技術たち開発を彩る技術たち
開発を彩る技術たちOda Shinsuke
 
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)bYuta Hayakawa
 
マルチスレッド問題の特定と再現に頑張った話
マルチスレッド問題の特定と再現に頑張った話マルチスレッド問題の特定と再現に頑張った話
マルチスレッド問題の特定と再現に頑張った話LINE Corporation
 
PHPerのためのpostgresqlチューニングmini
PHPerのためのpostgresqlチューニングminiPHPerのためのpostgresqlチューニングmini
PHPerのためのpostgresqlチューニングminiTakhisa Hirokawa
 

Was ist angesagt? (20)

Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3
 
GroovyServ concept, how to use and outline.
GroovyServ concept, how to use and outline.GroovyServ concept, how to use and outline.
GroovyServ concept, how to use and outline.
 
Groovy joint
Groovy jointGroovy joint
Groovy joint
 
groovy 2.1.0 20130118
groovy 2.1.0 20130118groovy 2.1.0 20130118
groovy 2.1.0 20130118
 
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ckIndy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
 
開発現場で使えるかもしれないGroovy
開発現場で使えるかもしれないGroovy開発現場で使えるかもしれないGroovy
開発現場で使えるかもしれないGroovy
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話
 
G* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionG* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - Introduction
 
簡単!Groovy入門
簡単!Groovy入門簡単!Groovy入門
簡単!Groovy入門
 
「プログラミングGroovy」入門(公開用)
「プログラミングGroovy」入門(公開用)「プログラミングGroovy」入門(公開用)
「プログラミングGroovy」入門(公開用)
 
はじめてのGit #gitkyoto
はじめてのGit #gitkyotoはじめてのGit #gitkyoto
はじめてのGit #gitkyoto
 
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャGoji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
 
20120915 Pythonは本当にBlenderの役に立っているか?
20120915 Pythonは本当にBlenderの役に立っているか?20120915 Pythonは本当にBlenderの役に立っているか?
20120915 Pythonは本当にBlenderの役に立っているか?
 
開発を彩る技術たち
開発を彩る技術たち開発を彩る技術たち
開発を彩る技術たち
 
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b
 
マルチスレッド問題の特定と再現に頑張った話
マルチスレッド問題の特定と再現に頑張った話マルチスレッド問題の特定と再現に頑張った話
マルチスレッド問題の特定と再現に頑張った話
 
PHPerのためのpostgresqlチューニングmini
PHPerのためのpostgresqlチューニングminiPHPerのためのpostgresqlチューニングmini
PHPerのためのpostgresqlチューニングmini
 

Andere mochten auch

Html5勉強会 20120423
Html5勉強会 20120423Html5勉強会 20120423
Html5勉強会 20120423Nobuhiro Sue
 
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockJJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockNobuhiro Sue
 
Gws 20140418 camel_groovy
Gws 20140418 camel_groovyGws 20140418 camel_groovy
Gws 20140418 camel_groovyNobuhiro Sue
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxNobuhiro Sue
 
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427Nobuhiro Sue
 
20111031 MobileWeb at TDC
20111031 MobileWeb at TDC20111031 MobileWeb at TDC
20111031 MobileWeb at TDCNobuhiro Sue
 
20140329_kyon_kao_wedding_LT_Groovy
20140329_kyon_kao_wedding_LT_Groovy20140329_kyon_kao_wedding_LT_Groovy
20140329_kyon_kao_wedding_LT_GroovyNobuhiro Sue
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_introNobuhiro Sue
 
Jjug 20140430 gradle_intro
Jjug 20140430 gradle_introJjug 20140430 gradle_intro
Jjug 20140430 gradle_introNobuhiro Sue
 
Light and shadow of microservices
Light and shadow of microservicesLight and shadow of microservices
Light and shadow of microservicesNobuhiro Sue
 
JSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpJSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpNobuhiro Sue
 

Andere mochten auch (11)

Html5勉強会 20120423
Html5勉強会 20120423Html5勉強会 20120423
Html5勉強会 20120423
 
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockJJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
 
Gws 20140418 camel_groovy
Gws 20140418 camel_groovyGws 20140418 camel_groovy
Gws 20140418 camel_groovy
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+Betamax
 
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427
 
20111031 MobileWeb at TDC
20111031 MobileWeb at TDC20111031 MobileWeb at TDC
20111031 MobileWeb at TDC
 
20140329_kyon_kao_wedding_LT_Groovy
20140329_kyon_kao_wedding_LT_Groovy20140329_kyon_kao_wedding_LT_Groovy
20140329_kyon_kao_wedding_LT_Groovy
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_intro
 
Jjug 20140430 gradle_intro
Jjug 20140430 gradle_introJjug 20140430 gradle_intro
Jjug 20140430 gradle_intro
 
Light and shadow of microservices
Light and shadow of microservicesLight and shadow of microservices
Light and shadow of microservices
 
JSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpJSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocp
 

Ähnlich wie Groovy indy 20120222

Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Uehara Junji
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_GebNobuhiro Sue
 
JavaとScalaとGroovyと
JavaとScalaとGroovyとJavaとScalaとGroovyと
JavaとScalaとGroovyとirof N
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradlekimukou_26 Kimukou
 
ゆるふわアーキを支える技術
ゆるふわアーキを支える技術ゆるふわアーキを支える技術
ゆるふわアーキを支える技術Shinichi Kozake
 
Go一緒にいかが?
Go一緒にいかが?Go一緒にいかが?
Go一緒にいかが?Ryuji Iwata
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルにHiroko Tamagawa
 
G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901Uehara Junji
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovyirof N
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradleNobuhiro Sue
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験AdvancedTechNight
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Koichi Sakata
 

Ähnlich wie Groovy indy 20120222 (20)

Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
 
いまさら触るAwt
いまさら触るAwtいまさら触るAwt
いまさら触るAwt
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
 
JavaとScalaとGroovyと
JavaとScalaとGroovyとJavaとScalaとGroovyと
JavaとScalaとGroovyと
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
ゆるふわアーキを支える技術
ゆるふわアーキを支える技術ゆるふわアーキを支える技術
ゆるふわアーキを支える技術
 
Go一緒にいかが?
Go一緒にいかが?Go一緒にいかが?
Go一緒にいかが?
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
 
Hudson using Groovy #jggug
Hudson using Groovy  #jggugHudson using Groovy  #jggug
Hudson using Groovy #jggug
 
G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901
 
Gws in fukuoka
Gws in fukuokaGws in fukuoka
Gws in fukuoka
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovy
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 
Vue.js with Go
Vue.js with GoVue.js with Go
Vue.js with Go
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)
 
Bp study39 nodejs
Bp study39 nodejsBp study39 nodejs
Bp study39 nodejs
 
Go+revel
Go+revelGo+revel
Go+revel
 
What makes Geb groovy?
What makes Geb groovy?What makes Geb groovy?
What makes Geb groovy?
 

Mehr von Nobuhiro Sue

Fuse Online Hands-on Guide
Fuse Online Hands-on GuideFuse Online Hands-on Guide
Fuse Online Hands-on GuideNobuhiro Sue
 
Fuse Online Hands-on Guide
Fuse Online Hands-on GuideFuse Online Hands-on Guide
Fuse Online Hands-on GuideNobuhiro Sue
 
Knative CloudEvents
Knative CloudEventsKnative CloudEvents
Knative CloudEventsNobuhiro Sue
 
JTF2018_B30_k8s_operator_nobusue
JTF2018_B30_k8s_operator_nobusueJTF2018_B30_k8s_operator_nobusue
JTF2018_B30_k8s_operator_nobusueNobuhiro Sue
 
DevLove k8s nobusue 20180711
DevLove k8s nobusue 20180711DevLove k8s nobusue 20180711
DevLove k8s nobusue 20180711Nobuhiro Sue
 
Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)Nobuhiro Sue
 
クラウド研究会 20120712 BaaS
クラウド研究会 20120712 BaaSクラウド研究会 20120712 BaaS
クラウド研究会 20120712 BaaSNobuhiro Sue
 
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryLetsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryNobuhiro Sue
 
Letsgo sendai nobusue_20110528
Letsgo sendai nobusue_20110528Letsgo sendai nobusue_20110528
Letsgo sendai nobusue_20110528Nobuhiro Sue
 
DevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: GroovyDevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: GroovyNobuhiro Sue
 
G*workshop 20101209 OSGi and Grails2.0
G*workshop 20101209 OSGi and Grails2.0G*workshop 20101209 OSGi and Grails2.0
G*workshop 20101209 OSGi and Grails2.0Nobuhiro Sue
 
DevLOVE 20100823 EnterpriseOSGi
DevLOVE 20100823 EnterpriseOSGiDevLOVE 20100823 EnterpriseOSGi
DevLOVE 20100823 EnterpriseOSGiNobuhiro Sue
 
Gws sokai 20100724_nsue
Gws sokai 20100724_nsueGws sokai 20100724_nsue
Gws sokai 20100724_nsueNobuhiro Sue
 
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)Nobuhiro Sue
 

Mehr von Nobuhiro Sue (15)

Fuse Online Hands-on Guide
Fuse Online Hands-on GuideFuse Online Hands-on Guide
Fuse Online Hands-on Guide
 
Fuse Online Hands-on Guide
Fuse Online Hands-on GuideFuse Online Hands-on Guide
Fuse Online Hands-on Guide
 
Knative CloudEvents
Knative CloudEventsKnative CloudEvents
Knative CloudEvents
 
JTF2018_B30_k8s_operator_nobusue
JTF2018_B30_k8s_operator_nobusueJTF2018_B30_k8s_operator_nobusue
JTF2018_B30_k8s_operator_nobusue
 
DevLove k8s nobusue 20180711
DevLove k8s nobusue 20180711DevLove k8s nobusue 20180711
DevLove k8s nobusue 20180711
 
Gws 20140117 lt
Gws 20140117 ltGws 20140117 lt
Gws 20140117 lt
 
Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)
 
クラウド研究会 20120712 BaaS
クラウド研究会 20120712 BaaSクラウド研究会 20120712 BaaS
クラウド研究会 20120712 BaaS
 
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryLetsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous Delivery
 
Letsgo sendai nobusue_20110528
Letsgo sendai nobusue_20110528Letsgo sendai nobusue_20110528
Letsgo sendai nobusue_20110528
 
DevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: GroovyDevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: Groovy
 
G*workshop 20101209 OSGi and Grails2.0
G*workshop 20101209 OSGi and Grails2.0G*workshop 20101209 OSGi and Grails2.0
G*workshop 20101209 OSGi and Grails2.0
 
DevLOVE 20100823 EnterpriseOSGi
DevLOVE 20100823 EnterpriseOSGiDevLOVE 20100823 EnterpriseOSGi
DevLOVE 20100823 EnterpriseOSGi
 
Gws sokai 20100724_nsue
Gws sokai 20100724_nsueGws sokai 20100724_nsue
Gws sokai 20100724_nsue
 
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)
 

Kürzlich hochgeladen

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Kürzlich hochgeladen (9)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

Groovy indy 20120222

  • 1. Groovyとindy 2012/2/22 @JJUG Night Seminar JJUG幹事/ 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
  • 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/indy 8
  • 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
  • 11. 参考: Blackdrag's 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 @TypeChecked void 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.CompileStatic int 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 indy Groovy 1.6 1.8 1.5 grumpy Call Siteキャッシュ experimental- (Dynamic&Static) static- Groovy compiler as Better Java 15