きりかノート 3冊め

おあそびプログラミング

RubyCocoa 今日のコミット

trunkがそもそも10.4でコンパイル通らないのを修正。これは昨日ちょっと触れたreload_protocols()が使っているobjcランタイムAPI objc_copyProtocolList()が10.4以前のObjective-C 1.0にはないためなのだ。

Objective-C 1.0では、ヘッダファイルを見る限りプロトコル(=Protocolクラスのインスタンス)オブジェクトぜんぶを保持しているリストみたいのは(たぶん)なくって、各クラスが個々に適合しているプロトコルを持っているようだ。てことは、すべてのプロトコルを集めるためには、すべてのクラスをスキャンしなくちゃいけない。それは効率が悪すぎるよね。reload_protocols()で追加された機能は、なくてもほとんど問題にならないはずなので、10.4以前ではその機能を無効にすることで、コンパイルエラーを解消するようにしたってのが、今回の変更。

これで10.5 Leopardと10.4 Tigerの両方で動くコードになったので、ちかぢかRubyCocoaの新しいバージョンをリリースする予定。未修整・未報告の問題を知っている人はぜひぜひお知らせください。大規模な変更になるものでなければできるかぎり取り込みます。