「愛されたい!」と思ったときにJavaで書くRubyクラス        大場光一郎 Akasaka.rb, Meadowy.org
今日の目的•JavaでRubyクラスを書く
JRubyとは•JavaVMで動くRuby実装• JIT、事前バイトコンパイル• Java Integration• Java 5.0 higher
JRubyを拡張したい•動かしたいパッケージがC • openssl,RMagick4J,i    mage_voodoo•速くしたい
Mにおすすめ•素直にRubyで書けば5行くらいですむところを50行で書く
生もの注意•公開APIではなくて言語のコアに近い部分•ゴリゴリ変わってます
JRubyを拡張す    る方法•Rubyで書く• Dubyで書く• Javaで書く
Rubyで書く•普通にRubyで書く• Javaクラスも呼べるよ
Dubyで書く•型修飾ができるRubyっぽい言語•コンパイラ型• Hashリテラルっぽい書き方
Dubyの例def foo(str) {str => :string} puts strend
Javaで書く•速い• 面倒• jarパッケージ
Javaで書こう   Rubyクラス•Java SE 5.0• JRubyのソースコード一式
Javaクラスと  Rubyクラス•クラス/メソッドの可視性• オーバーロード• オープンクラス
Javaで書くとき   必要なこと•メモリアロケーション• アノテーション
メモリアロケー      ション•JRubyのrubyランタイムにクラスやモジュールを登録する
コード例   private static final ObjectAllocatorICONV_ALLOCATOR = new ObjectAllocator(){      public IRubyObject allocate(Rubyru...
RubyClass iconvClass =runtime.defineClass("Iconv",runtime.getObject(), ICONV_ALLOCATOR);
アノテーション•Java 5から導入• javadoc/Rdocっぽい• メソッドやクラスに宣言的にメタ情報を記述
JRubyアノテー    ション•クラス• モジュール• メソッド
クラスアノテー  ション@JRubyClass(name = Iconv )class IconvClass {}
メソッドアノテー  ション•引数の数/可変長引数• インスタンスか、特異か• ブロックの有無
コード例@JRubyMethod(name = "open", required = 2,frame = true, meta = true)public static IRubyObject open(ThreadContextcontext...
メソッドアノテー  ションの種類•name,required• optional,rest• alias, meta, module• visibility, etc...
アノテーションを Rubyへ定義•クラスにどんなアノテーションがついているかRubyランタイムに登録する
コード例iconvClass.defineAnnotatedMethods(RubyIconv.class);
ロードしよう
ロードのJRuby   拡張•.rb .so .dll以外に.classと.jarの読み込みがサポート
require hogehogerequire hogehoge.classrequire hogehoge.jar
.classをロードする
.jarをロードする•jarredScript• jarに固めたclassファイルをロードする仕組み•gemに含めるのも可
JarredScript•規約指向• クラス名とjarファイル名を合わせる•LoadService
LoadService• JRubyがjar内から拡張ク  ラスを探すきっかけになる• org.jruby.runtime.load.BasicLoadService•  パッケージは無し
LoadServiceの     例
jarに固める
JRubyを拡張し     よう•メモリアロケーション• アノテーション• jarに固める
Upcoming SlideShare
Loading in...5
×

「愛されたい!」と思ったときにJavaで書くRubyクラス

1,543

Published on

Rails勉強会@東京 32thの資料。
http://wiki.fdiary.net/rails/?RailsMeetingTokyo-0032

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,543
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

「愛されたい!」と思ったときにJavaで書くRubyクラス

  1. 1. 「愛されたい!」と思ったときにJavaで書くRubyクラス 大場光一郎 Akasaka.rb, Meadowy.org
  2. 2. 今日の目的•JavaでRubyクラスを書く
  3. 3. JRubyとは•JavaVMで動くRuby実装• JIT、事前バイトコンパイル• Java Integration• Java 5.0 higher
  4. 4. JRubyを拡張したい•動かしたいパッケージがC • openssl,RMagick4J,i mage_voodoo•速くしたい
  5. 5. Mにおすすめ•素直にRubyで書けば5行くらいですむところを50行で書く
  6. 6. 生もの注意•公開APIではなくて言語のコアに近い部分•ゴリゴリ変わってます
  7. 7. JRubyを拡張す る方法•Rubyで書く• Dubyで書く• Javaで書く
  8. 8. Rubyで書く•普通にRubyで書く• Javaクラスも呼べるよ
  9. 9. Dubyで書く•型修飾ができるRubyっぽい言語•コンパイラ型• Hashリテラルっぽい書き方
  10. 10. Dubyの例def foo(str) {str => :string} puts strend
  11. 11. Javaで書く•速い• 面倒• jarパッケージ
  12. 12. Javaで書こう Rubyクラス•Java SE 5.0• JRubyのソースコード一式
  13. 13. Javaクラスと Rubyクラス•クラス/メソッドの可視性• オーバーロード• オープンクラス
  14. 14. Javaで書くとき 必要なこと•メモリアロケーション• アノテーション
  15. 15. メモリアロケー ション•JRubyのrubyランタイムにクラスやモジュールを登録する
  16. 16. コード例 private static final ObjectAllocatorICONV_ALLOCATOR = new ObjectAllocator(){ public IRubyObject allocate(Rubyruntime, RubyClass klass) { return new RubyIconv(runtime,klass); } };
  17. 17. RubyClass iconvClass =runtime.defineClass("Iconv",runtime.getObject(), ICONV_ALLOCATOR);
  18. 18. アノテーション•Java 5から導入• javadoc/Rdocっぽい• メソッドやクラスに宣言的にメタ情報を記述
  19. 19. JRubyアノテー ション•クラス• モジュール• メソッド
  20. 20. クラスアノテー ション@JRubyClass(name = Iconv )class IconvClass {}
  21. 21. メソッドアノテー ション•引数の数/可変長引数• インスタンスか、特異か• ブロックの有無
  22. 22. コード例@JRubyMethod(name = "open", required = 2,frame = true, meta = true)public static IRubyObject open(ThreadContextcontext, IRubyObject recv, IRubyObject to,IRubyObject from, Block block) {}
  23. 23. メソッドアノテー ションの種類•name,required• optional,rest• alias, meta, module• visibility, etc...
  24. 24. アノテーションを Rubyへ定義•クラスにどんなアノテーションがついているかRubyランタイムに登録する
  25. 25. コード例iconvClass.defineAnnotatedMethods(RubyIconv.class);
  26. 26. ロードしよう
  27. 27. ロードのJRuby 拡張•.rb .so .dll以外に.classと.jarの読み込みがサポート
  28. 28. require hogehogerequire hogehoge.classrequire hogehoge.jar
  29. 29. .classをロードする
  30. 30. .jarをロードする•jarredScript• jarに固めたclassファイルをロードする仕組み•gemに含めるのも可
  31. 31. JarredScript•規約指向• クラス名とjarファイル名を合わせる•LoadService
  32. 32. LoadService• JRubyがjar内から拡張ク ラスを探すきっかけになる• org.jruby.runtime.load.BasicLoadService• パッケージは無し
  33. 33. LoadServiceの 例
  34. 34. jarに固める
  35. 35. JRubyを拡張し よう•メモリアロケーション• アノテーション• jarに固める
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×