Your SlideShare is downloading. ×
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
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

Java One 2012 Tokyo JVM Lang. BOF(Groovy)

2,784
views

Published on


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

No Downloads
Views
Total Views
2,784
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
12
Comments
0
Likes
4
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
  • 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
  • Transcript

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