Cocoaと速度

私はHyperCard→XCMD→Cocoaという道筋を辿ってきたので、コードの実行速度は出来るだけ上げたい人である。HyperTalkはスクリプト言語であるからその実行速度はどうしても遅く、ゲームを作るにはいろいろなテクニックを駆使する必要があった。そんなわけでCocoaで開発をしている今でも、ちょっとした文字列操作もなるべく避けようとするくらいである。
ところでNSStringってのはCocoaの、Objective-Cのオブジェクトであるからして、文字列操作にはメッセージ送信を用いる。Objective-Cのメッセージ送信は、実行時にSEL型というメソッド名なC文字列へのポインタを使って、実装である関数へのポインタへと解決される必要がある。つまりCで関数を呼び出すより、Objective-Cでメッセージを送信する方が遅い*1。ってわけで、Objective-Cにはメソッドの関数ポインタを取得して、ループの中ではそれを使うなんてテクニックもある。
でもいろんなメソッドに対して全部そんなことやるのってめんどくさいよね。そういえばNSStringってCocoaのオブジェクトであると同時にCFStringっていうCore Foundationのオブジェクトでもあって、そっちはCの関数で操作できるじゃない?ってことはNSStringのメソッドの実装はそれに直結してそうな気がしますよ。ってことは、ってことはですよ、NSStringに対してCFStringの関数を使ってやると、メッセージ送信せず、関数ポインタをゲットすることもせずに速度が向上するのではなかろうか!?
…そんな速度が必要な場面ってあまりなさそうだけどねえThousandには。

*1:バリバリに最適化されているにしろ