Successfully reported this slideshow.

Java One 2012 Tokyo JVM Lang. BOF(Groovy)

4

Share

Upcoming SlideShare
Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
Loading in …3
×
1 of 22
1 of 22

Java One 2012 Tokyo JVM Lang. BOF(Groovy)

4

Share

Download to read offline

  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. @WithReadWriteLock import groovy.transform.WithReadLock import groovy.transform.WithWriteLock class Sample {     @WithReadLock     char[] read(){         // 読み出しアクセス     }     @WithWriteLock     void write(char c){         // 書き込みアクセス     } } ※java.util.concurrent.locks.ReadWriteLockをさらに容易 に使うためのラッパー 7
  8. 8. 多数のAST変換 Bindable InheritConstructors ListenerList NotYetImplemented Vetoable PackageScope Category Synchronized Delegate ThreadInterrupt Lazy TimedInterrupt Mixin ToString Newify TupleConstructor Singleton TypeChecked AutoClone WithReadLock AutoExternalize WithWriteLock Canonical Commons CompileStatic Log ConditionalInterrupt Log4j EqualsAndHashCode Slf4j Field Grab Immutable power assert IndexedProperty 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 = -3 a.abs() a.toUpperCase() a = "ABC" a.abs() a.toUpperCase() 12
  13. 13. STC:フローセンシティブタイピング aはint型と def a = -3 a.abs() a.toUpperCase() a = "ABC" a.abs() a.toUpperCase() 12
  14. 14. STC:フローセンシティブタイピング aはint型と def a = -3 a.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 method a.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 method a.toUpperCase() java.lang.Integer#toUpperCa se() a = "ABC" aはString型 a.abs() [Static type checking] - Cannot a.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

Editor's Notes

  • 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
    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. @WithReadWriteLock import groovy.transform.WithReadLock import groovy.transform.WithWriteLock class Sample {     @WithReadLock     char[] read(){         // 読み出しアクセス     }     @WithWriteLock     void write(char c){         // 書き込みアクセス     } } ※java.util.concurrent.locks.ReadWriteLockをさらに容易 に使うためのラッパー 7
    8. 8. 多数のAST変換 Bindable InheritConstructors ListenerList NotYetImplemented Vetoable PackageScope Category Synchronized Delegate ThreadInterrupt Lazy TimedInterrupt Mixin ToString Newify TupleConstructor Singleton TypeChecked AutoClone WithReadLock AutoExternalize WithWriteLock Canonical Commons CompileStatic Log ConditionalInterrupt Log4j EqualsAndHashCode Slf4j Field Grab Immutable power assert IndexedProperty 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 = -3 a.abs() a.toUpperCase() a = "ABC" a.abs() a.toUpperCase() 12
    13. 13. STC:フローセンシティブタイピング aはint型と def a = -3 a.abs() a.toUpperCase() a = "ABC" a.abs() a.toUpperCase() 12
    14. 14. STC:フローセンシティブタイピング aはint型と def a = -3 a.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 method a.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 method a.toUpperCase() java.lang.Integer#toUpperCa se() a = "ABC" aはString型 a.abs() [Static type checking] - Cannot a.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

    Editor's Notes

  • 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
  • More Related Content

    Related Audiobooks

    Free with a 30 day trial from Scribd

    See all

    ×