木村わ@The RubyCocoa Teamです。
RubyCocoaの新しいバージョン0.13.0をリリースしました。
http://rubycocoa.sf.net
http://sourceforge.net/project/showfiles.php?group_id=44114
から入手することができます。
* MacOS X 10.5 (Leopard)用のバイナリパッケージ
* MacOS X 10.4 (Tiger)用のバイナリパッケージ
* ソースコードのtarball
が用意されています。
Leopardのシステムに用意されているRubyCocoa.frameworkは/System/Libraryに
ありますが、バイナリパッケージは/Libraryにインストールするので、元から
あるRubyCocoaは上書きされません。
オリジナルの英語のリリースアナウンスについては以下を参照してください。
http://lists.sourceforge.jp/mailman/archives/rubycocoa-devel/2007-November/001230.html
(新しい機能)
- NSArrayやNSDictionaryをRubyのArrayやHashのように扱うことができます。
NSStringも#=~および#matchを除いてRubyのStringと同じように扱うことが
できます。これは以前のmethod_missingを利用したものよりも高速で信頼性
の高いものになっています。
- NSRect, NSPoint, NSSizeおよびNSRangeにユーティリティメソッドが追加
されました。
- NSString, NSNumber, NSArray, NSDictionary, NSCFBooleanおよびNSDateの
inspectメソッドの出力をわかりやすくしました。また、NSString, NSArray,
NSDictionaryはpretty print(ppライブラリ)をサポートします。
- #to_nsメソッドをArray, Hash, String, Numeric, TrueClass, FalseClass,
Timeクラスに追加しました。Cocoaの類似オブジェクトに変換できます。
- ObjcPtr#cast_as(encoding)メソッドを追加しました。void*からのオブジェクト
の取り出しに利用できます。
- Leopard専用のサンプルを追加しました。
(バグ修正など)
- RubyCocoaの初期化およびBridgeSupportのメモリリークを修正しました。
- ruby obj -> ocid および ruby obj -> SEL の変換処理のパフォーマンスが
向上しました。
- Objective-Cオブジェクトのメソッドにポインタを引数として渡したあと、
そのポインタがメソッド中で操作されなかったときに、Rubyオブジェクト
に変換しようとするとクラッシュしてしまう問題を修正しました。
- バイナリインストーラで再インストールすると「もう一度インストールして
ください」となってしまう問題を修正しました。
- 1つより多くのパラメータを受け取るsetメソッドは変換しないようにしました。
- slaveオブジェクトを必要に応じて生成するようにしました。これは、10.5で
CoreDataやbindingsを利用したときに発生していた問題を修正するためです。
- スレッドの復帰時にautorelease poolのコンテキストをリセットするように
しました。
- Rubyスレッド上でメモリ確保されたオブジェクトが、スレッド終了後も
キャッシュに残ってしまうバグを修正しました。この問題はキャッシュの
衝突を引き起こしていました。
- CoreFoundationベースのオブジェクトをキャッシュしないようにしました。
- NSObjectから派生したRubyクラスのオブジェクトのメモリ確保時の循環参照を
修正しました。Objective-CとRuby Proxyの両方でリークが発生していました。
- [copyWithZone:]の呼び出しをフックしてslaveオブジェクトをリセットするように
しました。それにより、Objective-Cオブジェクトは異なるslaveを持つことが
できるようになりました。この変更は複数のObjective-Cオブジェクトで共有されて
いるslaveがreleaseされるとクラッシュしてしまう問題を修正しています。
- #objc_sendは渡されたセレクタのアンダースコア"_"を変換しません。これにより
アンダースコアを含むObjective-Cメソッドを呼び出すことができます。たとえば
[__rbobj__]というようなメソッドを呼び出すことができます。
- OvMixでのretainサイクルを改善しました。RubyからOvMixオブジェクトが生成されると
そのRuby proxyはretainされません。retain/releaseメッセージを監視し、適切に
proxyをretain/releaseします。
- 以前の__slave_nsobj__インスタンス変数のフックを削除しました。すべての
pure RubyオブジェクトはautoreleasされたRBObjectでラップされるように
なりました。
- Objective-Cの引数がObjective-CからRubyのクロージャに渡されたときに
retainするようにしました。テストケースも追加しました。
- (10.5のみ)スレッド間のメッセージディスパッチを改善しました。以前の
実装では、RubyCocoaはメインスレッド上で実行されていることを想定して
いましたが、これは常にそうとは限りません。
- newメソッドの利用できるObjective-Cクラスではクラス.newとしてインスタンスを
生成することができるようになりました。(クラス.alloc.initと同じ)
- 10.5用のスレッド対応のコードを追加しました
- 10.5では'--gen-bridge-support=no'がデフォルトになりました
- 新しいconfigオプション--sdkrootを追加しました。10.5で--macosx-deployment-target=10.4
としたときのエラーが起きないようになりました。
- 10.5でのString#to_nsstringを修正しました
- String#nsenconding, to_nsstring, to_nsmutablestringはdepricatedです。
開発者は#to_nsを利用するようにしてください。
- Rubyの文字列でutf-8として許容されないシーケンスを含むものにto_nsを
呼び出すとbus errorになってしまう問題を修正しました。
- slave proxyの生成時の無限ループを回避するため、
- 10.5でsample/Scripts/darkroom.rbがSEGVする問題を修正しました。
- CoreData.define_wrapper_for_entity()を追加しました。
CoreData.define_wrapper()の機能の一部で、普段呼び出すことはありません。
- (10.5のみ)libSystem.bridgesupportをロードするようにしました
- rb_nibtool
- Rubyスクリプトのみで定義されたアクションがありアウトレットが
ないときにクラッシュする問題を修正しました。
- アクションもアウトレットもないクラスについてnil#eachが呼び出されて
しまうバグを修正しました。
- スーパークラスがないためにInterface Builder上に新規クラスが表示されない
ことが発生する問題を修正しました。
- 存在するクラスが見つけられない問題を修正しました。
- standaloneify
- 環境変数ENV['RUBYCOCOA_STANDALONEIFYING?']をセットするようにしました。
standaloneify中にアプリケーションのコードが実行されてしまうのを防ぎます。
(すみません、ここ意味がよくわからないです:木村わ)
- gen_bridge_doc
- 10.5のドキュメントに対応しました
- </i>タグが _ に変更されないバグを修正しました
- BOOLを返すメソッドのドキュメントを追加するようにしました。たとえば
isRunningというメソッドがあればrunning?というエントリも生成されます。
--
kimura wataru