BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース MacRuby 0.6が GCD、スレッドの改善、高速なデバッガ、AOTをサポート。

MacRuby 0.6が GCD、スレッドの改善、高速なデバッガ、AOTをサポート。

ブックマーク

原文(投稿日:2010/05/04)へのリンク

MacRuby 0.6 が入手可能 (MacRuby 0.6 ダウンロード リンク)。

MacRuby 0.6 リリースノート にあるように、 MacRuby 0.6は、Cocoa 開発環境で安定している、と考えられ、XCode とAhead of Time (AOT)を完全にサポートしており、 Rubyのソースコードをコンパイルして、そのバイナリだけを出荷すればよい、と言うことになる。

以前アナウンスしたように、0.6のリリースには、実験的なデバッグサポートがいっしょである。 MacRubyの デバッグサポートは、ブレークポイントをトリガーするために、コンパイルされたコードに特別な命令を挿入する。一方、多くの他の Rubyのデバッガは、トレースサポートや Ruby のVMフックを使っている。
リリースのブログ投稿からの注釈は:

デバッガの面白いフィーチャとして、デバッガが単純な Objective-C のAPIとして抽象化されていて、MacRuby化されたこのAPIは、単にひとつのクライアントである。将来、他のクライアントが出てくるかもしれない。

同等の Java とRubyライブラリは、Debug-Commons プロジェクトで入手できる。

MacRuby 0.5で、 MacRubyは、GILをやめ、複数のスレッドが並行して走ることができる( Ruby 1.9では、唯一の Rubyスレッドしか一度に走れない)。0.6での新たな改善は、並行スレッドをもっと役立つものにした。例えば(リリースのブログ投稿から):

最後に、Regexpクラスがこのリリースで完全に書き換えられた。今は、正規表現のコンパイルやパターンマッチングに Onigurumaではなく、 ICUフレームワークを使っている。ICUは、スレッドセーフなので、MacRuby 0.6 では、複数のスレッドが、以前のバージョンでは不可能だった、非常に効率的な方法で正規表現を使うことができる。

MacRuby 0.5 で既に、Grand Central Dispatch (GCD)、のサポートを始めていた。GCDは、 Mac OS X Snow Leopard と Phone OS 4.0に載っていて、Appleのシステムで多用されているスレッドプールとタスクシステムである。MacRuby 0.6 で、「ディスパッチ」ライブラリに新しいフィーチャと抽象化が加わった。

Job は、 Threadと同じようなインターフェースを提供し、非同期にコードを実行するのに使うことができる。同期的にあるいは、非同期的に使うことができる。例えば、次のコードは、Job にある仕事をさせて、Job が仕事を終えるのを待つ wait(ドキュメントから):

@result = job.value
puts @result.to_int.to_s.size # => 51

非同期な方法では、Job が終わったら呼ばれるコールバックに渡す; Rubyでは、もちろん、これは、ブロックで済む:

job.value {|v| p v.to_int.to_s.size } # => 51 (結局は)

MacRubyの Dispatchライブラリで導入された他のツールが、Proxyで、オブジェクトへのメソッド呼び出しをシリアルすることができる。

別のフィーチャが、並列イテレーションすなわち、イテレータの並列実装で Enumerable#p_eachEnumerable#p_mapEnumerable#p_find そして、すべてのブロック呼び出しを実行するために、複数スレッドを利用する同様なメソッドである。

GCDが、また加えたのは Event Sourcesで、これにより、関心のあるイベントを登録して、イベントをGCDキュー上にスケジュールされたブロックに、処理させることができる。タイマー、プロセスシグナル、 I/O用のインプット ディスクリプタなどがEvent Sourceになれる。Event Sourceは、キューにあるイベントハンドラーを走らせることによって、OS全体のスレッドプールを使用できる、強力なツールである。キューは、イベントが入ってきた時に、スレッドを掴み、イベントハンドラが処理を終えたら、スレッドをシステムに返す。
MacRubyの dispatchライブラリのソースコードには、 READMEがあり、MacRuby 0.6のこれらすべてのGCDフィーチャに関するもっと詳細な導入が記載されている。

MacRuby 0.6のリリース後に見つかった1つの問題は、バックグラウンドのスレッドから、メインのスレッド上で走るためのブロックをスケージュール際の問題の原因となっているようだ。妙なスレッドに関する問題が起きた場合に、気を付けておくべきことである;バグ報告には、回避策とまもなく MacRubyのtrunkに上げられるはずのソリューションも含まれている。

すべての Rubyの実装で、最大の問題は、もちろん互換性である; MacRuby 0.6の状況は(リリースのブログ投稿から):

MacRuby 0.6は、Rubyのオリジナル実装用に書かれた、Cによる拡張モジュールをサポートしている。我々は、 MacRubyからNokogiri, SQLite3 そして PostgreSQL 拡張モジュールをちゃんと使うことができた。

このリリースで、 RubySpecsの約85%は、パスしたし、 Rails 3の修正版を走らせることができたし、 Ruby 1.9のencodingに対するよりよいサポートを実装した。

最後に、Matt Aimonetti 氏は、 O'Reillyから出版される本を書いており "MacRuby: The Definite Guide" の最初の数章が、すでにでき上がっていて、オンラインで読むことが出来る

この記事に星をつける

おすすめ度
スタイル

BT