MacRubyとかって何? [MacOSX]
PCエンジンPCってなんかすごっ。
http://ascii.jp/elem/000/000/448/448783/
というかサターンPCとか普通に欲しいな。筐体はあるので、Mini-itxで自作するか?
CUDAのnvccにせよ、MacのObjective-Cのコンパイラにせよ、ちょっとチェックが足りてないんじゃないのと思うところがありあり。
本題のMacRuby。よく分かってなかったので、ググって上の方から見てみた。
結局、なんなのか?
http://journal.mycom.co.jp/articles/2008/03/17/macruby_for_leopard/index.html
より良いRubyCocoaがコンセプトらしい。どこが違うのか。
require 'osx/cocoa'
が
framework 'cocoa'
になっている。
具体的に何が違うかだが、Cocoa以外のフレームワークも読み込めるらしい。Mac OS Xの機能ならみんな使えるようになるっぽい。
・オブジェクト呼び出しのオーバーヘッドが解消
音を鳴らそうとすると、RubyCocoaでやると
snd = OSX::NSSound.alloc
sound = snd.soundNamed('Blow')
sound.play
が、MacRubyだと
sound = NSSound.soundNamed('Blow')
sound.play
だけで済むのかな? Rubyプロキシオブジェクトなるもののオーバーヘッドがなくなったらしい。RubyCocoaの方はわざとらしい書き方をしているけれども、要するにOSX::とかいう部分がなくなって直でオブジェクトを生成しているって話のようだ。
・メソッド呼び出しがObjctive-Cっぽくなった
デフォルトがobjc_sendの書き方っぽくなった模様。
・すべてのRubyオブジェクトはNSObject
と書いてあるが、他のフレームワークでもそういうクラスの階層構造を取るのだろうか。とにかく、CocoaのNSObjectの方が先にありきで、その次にRubyのオブジェクトになっているみたい。他の言語のフレームワークだと、このような差し込む方法だと、また実装に手間がかかりそうだけれど、その方が現実的なのかもしれない。中身見てないからサッパリ適当発言だけど。
・Toll-free bridgeで変換コストゼロに
Rubyで扱う文字列は、直にNSStringらしい。これでRubyのStringとの変換コストはなくなるが、Rubyのオブジェクトのメソッドは呼び出せるようになってないとあんまりうれしくない事態かもしれない。Rubyで書く意味が半分なくなるし。とにかく、もっさり状態があるとするなら解消されるみたい。別途意識してRubyオブジェクトを使いましょうってこと?
・Objective-C 2.0側のガベージコレクタを使うようにした
RubyCocoaはRuby側のGCを使って、ラップしたオブジェクトを廃棄していたが、MacRubyではObj-C2.0のGCを使うようになった。というか、純粋なRubyオブジェクトのラッパーじゃなくなったから、Ruby側のGCはNSObjectの手前までしか利用できなくなったんでしょうね。
MacRubyではソースがコンパイルされるらしい。
http://www.infoq.com/jp/news/2009/07/macruby-aot-choctop
Mach-Oバイナリなので、実行時にランタイムが必要ないみたい。MacRubyやLLVMに依存しないっぽい。RubyCocoaがappバンドルの中に、そのままソースが入るのとは対照的である。ソースの暗号化という点でも良いみたい。私には関係ないけど。
LLVM使うってこっちでは書いてある。むむ?
http://journal.mycom.co.jp/news/2009/04/03/051/
ま、ネイティブバイナリになろうが、VM用のバイナリになろうが、コアな部分を扱わない人にとっては、速度以外は大して問題ではないが。
MacRuby0.4内容の翻訳
http://www.textdrop.net/soft/macruby-04/
見た感じまだまだこなれてないな的な雰囲気がありますね。
オレンジページから行ったところ。ver0.5のロードマップの翻訳。
http://d.hatena.ne.jp/kouji0625/20090730/p1
うむ、いまいちどうなっているかが分からん。そのうち理解できるようになるでしょう。
□MacRuby総括
・CocoaにRubyが密に組込まれる
・密に組込まれる対象は、Cocoaだけじゃないっぽい
・RubyCocoaでこなれてない部分のブラッシュアップ
な感じでした。Appleが本腰を入れてきたら動こう。それまでRubyCocoaだけでいいや。
http://ascii.jp/elem/000/000/448/448783/
というかサターンPCとか普通に欲しいな。筐体はあるので、Mini-itxで自作するか?
CUDAのnvccにせよ、MacのObjective-Cのコンパイラにせよ、ちょっとチェックが足りてないんじゃないのと思うところがありあり。
本題のMacRuby。よく分かってなかったので、ググって上の方から見てみた。
結局、なんなのか?
http://journal.mycom.co.jp/articles/2008/03/17/macruby_for_leopard/index.html
より良いRubyCocoaがコンセプトらしい。どこが違うのか。
require 'osx/cocoa'
が
framework 'cocoa'
になっている。
具体的に何が違うかだが、Cocoa以外のフレームワークも読み込めるらしい。Mac OS Xの機能ならみんな使えるようになるっぽい。
・オブジェクト呼び出しのオーバーヘッドが解消
音を鳴らそうとすると、RubyCocoaでやると
snd = OSX::NSSound.alloc
sound = snd.soundNamed('Blow')
sound.play
が、MacRubyだと
sound = NSSound.soundNamed('Blow')
sound.play
だけで済むのかな? Rubyプロキシオブジェクトなるもののオーバーヘッドがなくなったらしい。RubyCocoaの方はわざとらしい書き方をしているけれども、要するにOSX::とかいう部分がなくなって直でオブジェクトを生成しているって話のようだ。
・メソッド呼び出しがObjctive-Cっぽくなった
デフォルトがobjc_sendの書き方っぽくなった模様。
・すべてのRubyオブジェクトはNSObject
と書いてあるが、他のフレームワークでもそういうクラスの階層構造を取るのだろうか。とにかく、CocoaのNSObjectの方が先にありきで、その次にRubyのオブジェクトになっているみたい。他の言語のフレームワークだと、このような差し込む方法だと、また実装に手間がかかりそうだけれど、その方が現実的なのかもしれない。中身見てないからサッパリ適当発言だけど。
・Toll-free bridgeで変換コストゼロに
Rubyで扱う文字列は、直にNSStringらしい。これでRubyのStringとの変換コストはなくなるが、Rubyのオブジェクトのメソッドは呼び出せるようになってないとあんまりうれしくない事態かもしれない。Rubyで書く意味が半分なくなるし。とにかく、もっさり状態があるとするなら解消されるみたい。別途意識してRubyオブジェクトを使いましょうってこと?
・Objective-C 2.0側のガベージコレクタを使うようにした
RubyCocoaはRuby側のGCを使って、ラップしたオブジェクトを廃棄していたが、MacRubyではObj-C2.0のGCを使うようになった。というか、純粋なRubyオブジェクトのラッパーじゃなくなったから、Ruby側のGCはNSObjectの手前までしか利用できなくなったんでしょうね。
MacRubyではソースがコンパイルされるらしい。
http://www.infoq.com/jp/news/2009/07/macruby-aot-choctop
Mach-Oバイナリなので、実行時にランタイムが必要ないみたい。MacRubyやLLVMに依存しないっぽい。RubyCocoaがappバンドルの中に、そのままソースが入るのとは対照的である。ソースの暗号化という点でも良いみたい。私には関係ないけど。
LLVM使うってこっちでは書いてある。むむ?
http://journal.mycom.co.jp/news/2009/04/03/051/
ま、ネイティブバイナリになろうが、VM用のバイナリになろうが、コアな部分を扱わない人にとっては、速度以外は大して問題ではないが。
MacRuby0.4内容の翻訳
http://www.textdrop.net/soft/macruby-04/
見た感じまだまだこなれてないな的な雰囲気がありますね。
オレンジページから行ったところ。ver0.5のロードマップの翻訳。
http://d.hatena.ne.jp/kouji0625/20090730/p1
うむ、いまいちどうなっているかが分からん。そのうち理解できるようになるでしょう。
□MacRuby総括
・CocoaにRubyが密に組込まれる
・密に組込まれる対象は、Cocoaだけじゃないっぽい
・RubyCocoaでこなれてない部分のブラッシュアップ
な感じでした。Appleが本腰を入れてきたら動こう。それまでRubyCocoaだけでいいや。
タグ:Ruby
コメント 0