OSTRACISM CO.

C#とObjective-CとJavaと...

はじめに

 Microsoftが社運を(多分)かけて推進しているにもかかわらず流行っているとはいえない.NET Framework。ほかに適切なものがないという意味で推進せざるを得ないが往年のMac開発者に嫌われているAppleのCocoa。サーバのバックエンド中心の応用が多くそもそも注目度が高くないうえにSWTという強力なライバルの現れたSunのSwing。

 .NET Framework自体は良いものだと思うのだが、やはりネイティブなバイナリを走らせるわけではないという点が抵抗感のある部分か。ライブラリ自体はネイティブに構築されているはずなので、実際のアプリの動作はさほど不利になるわけでもないのだが、それでもアプリ起動時の重さはある。C#は便利な開発言語なので惜しいなという印象だ。なぜネイティブにしなかったのかは不明だ。まぁ、不人気が続けば何らかの手を打ってくるだろう。

 CocoaはMac OS XのGUIアプリ構築時に無視できないフレームワークである。でもそれはObjective-Cを前提とする。Objective-Cは困ったことに全然C++に似ていない。Carbon + Core FundationならばCで書けるのだが、Cocoaに比べ便利さは格段に劣る。
 Cocoaにはリソースフォークが扱えないなどレガシー系との互換を維持するための機能がない。確認はしてないのでその後Carbonがどう強化されたかは把握していないが、CreateWindowFromNibなんてAPIがあるのでCarbonはもはや旧Mac OSからの移行のためだけのライブラリという位置付けではないのかもしれない。
 文字エンコードに関して詳しく処理しようとすると結局CocoaではなくCore FundationやCarbonを使わなくてはならない。また、例えばテキストクリッピングで作成されるファイルにはデータフォークがなくリソースフォークのみであり、Cocoaではこのファイルをファイルとして扱うことができない。
 CocoaはNeXT由来のもの、CarbonはMacintosh由来のものだが、Mac OS Xとしての新機能はまずはCore Fundationとして実装されているようだ。Core FundationはCから使える、すなわち言語依存性が低い。AppleとしてもObjective-Cへの依存性を下げたいということだろうか。
 とはいえCarbon + Core FundationにはMFCのようなもう一枚薄皮が必要だと思う。Cocoaに相当するC++やD向けのクラスライブラリを用意してくれると嬉しいのだが。
 Cocoaは大雑把に少ない手間でそれなりのものを作るのに適しているといえる。細かいことや突っ込んだことやOSべったりなことをするならCore FundationやCarbonを使うということだ。AppleのCocoaの文書にも「Carbon Core には File Manager がありますが、Cocoa はこれを使って各種のファイルシステム表現の変換を行います」なんて表現がある。CocoaもCarbonを使っている。
 Mac OS X 10.4でCore Image(Core GraphicsあるいはQuartz)をラップしたObjective-Cのクラスが用意された。もはやNeXT由来ではないのでプレフィックスはNSでなくCI。Cocoaもちゃんと変化を続けている。

 Javaは、Javaはなぁ、Windowsで開発してUnix系サーバで走らせる仕事の言語。問題は膨大な量かつ微妙に整理されていないクラスライブラリ群。そもそもライブラリも含めて全部ネイティブじゃないので圧倒的に処理速度という面で不利なこと。実際今回作った試作アプリもJava版は実用性に疑問符が付くくらい重い。いわゆるスクリプト言語に比べればかなり速いはずなんだが、クライアントサイドのアプリを組むのに適しているかは微妙だ。Swingは良くできてるとは思うがやはりネイティブなGUIに比べると反応が悪かったりと使いたくなくなる要素が多い。とはいえ、WindowsでもなくMac OSでもないUnix系においてある程度マトモなGUIアプリを少ない手間で構築するには数少ない選択肢である(実は他の選択肢が思いつかない)。

 そんなわけで、試しに.NET Framework、Cocoa、Swingで同じ機能を持つGUIアプリを作ってみた。作ったのはGraphicGripGropという名前の画像検索アプリだ。このアプリを元に.NET、Cocoa、SwingすなわちC#、Objective-C、Javaの似ている面と似ていない面を述べようと思う。

2005.07.03
2006.10.17 誤字
「インデックス」へ戻る

OSTRACISM CO.
OSTRA / Takeshi Yoneki