を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,629 views

Published on

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,629
On SlideShare
0
From Embeds
0
Number of Embeds
988
Actions
Shares
0
Downloads
14
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide
  • 17:00スタート。17:40まで。\n\nScala, Jrubyは競合しない。それぞれの良さがある。\n\n
  • Grな日々、2007年から執筆しています。\n日本初のオリジナル書籍プログラミングGroovyを執筆しました。\n
  • こんな感じでぱぱっと紹介します。\nごくごくかいつまんで\n
  • \n
  • http://www.cspjapan.org/index.htm\nCommunicating Sequential Processes\n\nDartsはGroovyをぱくってる!\n
  • \n
  • \n
  • \n
  • java.util.concurrent.locks.ReadWriteLockを使ったコードに変換してくれます。\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • 「高機能なJava」「簡潔なJava」「コンパイル不要Java」としてGroovyを使う人も少なからずいる\n\n
  • \n
  • \n
  • 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

    ×