Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
を10分で紹介するJavaOne Tokyo 2012 JVM言語BOF   日本Grails/Groovyユーザ会    NTTソフトウェア株式会社          上原 潤二          2012.4.4
自己紹介上原潤二(@uehaj) NTTソフトウェア株式会社 Grails推進室 JGGUG運営委員 本書いた!   プログラミングGROOVY(技術評論社)   Grails徹底入門(翔泳社) ブログ「Grな日々」 GroovyServ, L...
アジェンダGroovyの概要Groovyの機能紹介 AST変換 静的Groovyの歩み 3
Groovyとは何か  Java VM上で動作する今どきのスクリプト言語    Javaと互換性がある・連携しやすい    ➡正しいJavaコードは 正しいGroovyコード                      ほぼ  ツール、フレームワ...
他の言語と比べると・・・貪欲 良いところはイタダク!  大クラス主義,コレクション操作,etc.  マルチメソッド  GPars(並列処理モデルの総合デパート)   Actor/STM/Agent/Dataflow/callAsync/   Pa...
特徴的な機能:AST変換C/C++の「プリプロセッサマクロ」のようにコードをコンパイル時に変換するアノテーションで起動する例: @WithReadWriteLock Read Write Lock   書き中の書きはブロック   書き中の読みは...
@WithReadWriteLockimport groovy.transform.WithReadLockimport groovy.transform.WithWriteLockclass Sample {    @WithReadLock...
多数のAST変換Bindable               InheritConstructorsListenerList           NotYetImplementedVetoable               PackageSc...
Groovyの新機能(2.0∼)   Java 7対応    二進リテラル    リテラル中の下線    マルチキャッチ    InvokeDynamic対応    try-with-resourceなどはいまのところ未   Groovy自体の...
静的Groovyの歩み                      静的型チェッ                      ク(STC) G++                      静的コンパイル2009∼2011             ...
STC/静的コンパイル(AST変換) @TypeChecked  ➡静的型チェック(型を確定することでわかるエ    ラーをコンパイル時にチェック) @CompileStatic  ➡静的コンパイル(性能向上)       11
STC:フローセンシティブタイピングdef a = -3a.abs()a.toUpperCase()a = "ABC"a.abs()a.toUpperCase()    12
STC:フローセンシティブタイピング                  aはint型とdef a = -3a.abs()a.toUpperCase()a = "ABC"a.abs()a.toUpperCase()    12
STC:フローセンシティブタイピング                  aはint型とdef a = -3a.abs()a.toUpperCase()a = "ABC"          aはString型a.abs()a.toUpperCas...
STC:フローセンシティブタイピング                  aはint型とdef a = -3                      [Static type checking] -a.abs()              Ca...
STC:フローセンシティブタイピング                  aはint型とdef a = -3                        [Static type checking] -a.abs()              ...
静的コンパイル String foo(String s) {     s.toUpperCase() } @CompileStatic String bar(String s) {     s.toUpperCase() }
静的コンパイル String foo(String s) {     s.toUpperCase() }             public String   foo(String s)                {           ...
静的コンパイル String foo(String s) {     s.toUpperCase() }             public String   foo(String s)                {           ...
なぜSTC/静的コンパイルなのか?  Groovyの利点: 動的・簡潔・高機  能・コンパイル不要…   「動的」が不要な人→STC  indyを待てない/indy以上の速度→静  的コンパイル    14
まとめ続きはコーディング大会で…!  15
参考リンクhttp://www.jroller.com/melix/entry/static_type_checking_talk_from     16
Upcoming SlideShare
Loading in …5
×

Java One 2012 Tokyo JVM Lang. BOF(Groovy)

3,756 views

Published on

  • Be the first to comment

Java One 2012 Tokyo JVM Lang. BOF(Groovy)

  1. 1. を10分で紹介するJavaOne Tokyo 2012 JVM言語BOF 日本Grails/Groovyユーザ会 NTTソフトウェア株式会社 上原 潤二 2012.4.4
  2. 2. 自己紹介上原潤二(@uehaj) NTTソフトウェア株式会社 Grails推進室 JGGUG運営委員 本書いた! プログラミングGROOVY(技術評論社) Grails徹底入門(翔泳社) ブログ「Grな日々」 GroovyServ, LispBuilder, GVM開発者
  3. 3. アジェンダGroovyの概要Groovyの機能紹介 AST変換 静的Groovyの歩み 3
  4. 4. Groovyとは何か Java VM上で動作する今どきのスクリプト言語 Javaと互換性がある・連携しやすい ➡正しいJavaコードは 正しいGroovyコード ほぼ ツール、フレームワーク、ライブラリ群から成る エコシステム Groovyエコシステム ツール フレームワー ライブラリGradle, Gant, ク GroovyFX, Spock, Grails, GPars,... 4
  5. 5. 他の言語と比べると・・・貪欲 良いところはイタダク! 大クラス主義,コレクション操作,etc. マルチメソッド GPars(並列処理モデルの総合デパート) Actor/STM/Agent/Dataflow/callAsync/ ParallelArray/MapReduce/ForkJoin/CSP/.... 5
  6. 6. 特徴的な機能:AST変換C/C++の「プリプロセッサマクロ」のようにコードをコンパイル時に変換するアノテーションで起動する例: @WithReadWriteLock Read Write Lock 書き中の書きはブロック 書き中の読みはブロック 読み中の書きはブロック 読み中の読みはブロックしない
  7. 7. @WithReadWriteLockimport groovy.transform.WithReadLockimport groovy.transform.WithWriteLockclass Sample {    @WithReadLock    char[] read(){        // 読み出しアクセス    }    @WithWriteLock    void write(char c){        // 書き込みアクセス    }} ※java.util.concurrent.locks.ReadWriteLockをさらに容易 に使うためのラッパー 7
  8. 8. 多数のAST変換Bindable InheritConstructorsListenerList NotYetImplementedVetoable PackageScopeCategory SynchronizedDelegate ThreadInterruptLazy TimedInterruptMixin ToStringNewify TupleConstructorSingleton TypeCheckedAutoClone WithReadLockAutoExternalize WithWriteLockCanonical CommonsCompileStatic LogConditionalInterrupt Log4jEqualsAndHashCode Slf4jField GrabImmutable power assertIndexedProperty 8
  9. 9. Groovyの新機能(2.0∼) Java 7対応 二進リテラル リテラル中の下線 マルチキャッチ InvokeDynamic対応 try-with-resourceなどはいまのところ未 Groovy自体のモジュール化 静的型チェック 静的コンパイル 9
  10. 10. 静的Groovyの歩み 静的型チェッ ク(STC) G++ 静的コンパイル2009∼2011 (experimentalブランチ) Groovy 2.0.0-beta-x コードベースの 2011∼ 継続性はない 10
  11. 11. STC/静的コンパイル(AST変換) @TypeChecked ➡静的型チェック(型を確定することでわかるエ ラーをコンパイル時にチェック) @CompileStatic ➡静的コンパイル(性能向上) 11
  12. 12. STC:フローセンシティブタイピングdef a = -3a.abs()a.toUpperCase()a = "ABC"a.abs()a.toUpperCase() 12
  13. 13. STC:フローセンシティブタイピング aはint型とdef a = -3a.abs()a.toUpperCase()a = "ABC"a.abs()a.toUpperCase() 12
  14. 14. STC:フローセンシティブタイピング aはint型とdef a = -3a.abs()a.toUpperCase()a = "ABC" aはString型a.abs()a.toUpperCase() 12
  15. 15. STC:フローセンシティブタイピング aはint型とdef a = -3 [Static type checking] -a.abs() Cannot find matching methoda.toUpperCase() java.lang.Integer#toUpperCa se()a = "ABC" aはString型a.abs()a.toUpperCase() 12
  16. 16. STC:フローセンシティブタイピング aはint型とdef a = -3 [Static type checking] -a.abs() Cannot find matching methoda.toUpperCase() java.lang.Integer#toUpperCa se()a = "ABC" aはString型a.abs() [Static type checking] - Cannota.toUpperCase() find matching method 12 java.lang.String#abs()
  17. 17. 静的コンパイル String foo(String s) {     s.toUpperCase() } @CompileStatic String bar(String s) {     s.toUpperCase() }
  18. 18. 静的コンパイル String foo(String s) {     s.toUpperCase() } public String foo(String s) { CallSite acallsite[] = $getCallSiteArray(); return (String)ScriptBytecodeAdapter.castToType(acallsite[ 0].call(s), java/lang/String); } @CompileStatic String bar(String s) {     s.toUpperCase() }
  19. 19. 静的コンパイル String foo(String s) {     s.toUpperCase() } public String foo(String s) { CallSite acallsite[] = $getCallSiteArray(); return (String)ScriptBytecodeAdapter.castToType(acallsite[ 0].call(s), java/lang/String); } @CompileStatic String bar(String s) {     s.toUpperCase() } public String bar(String s) { return s.toUpperCase(); }
  20. 20. なぜSTC/静的コンパイルなのか? Groovyの利点: 動的・簡潔・高機 能・コンパイル不要… 「動的」が不要な人→STC indyを待てない/indy以上の速度→静 的コンパイル 14
  21. 21. まとめ続きはコーディング大会で…! 15
  22. 22. 参考リンクhttp://www.jroller.com/melix/entry/static_type_checking_talk_from 16

×