2003年12月 8日

CarbonかCocoaか?

昨日の忘年会の話で。

正直、CarbonなのかCocoaなのか、どうなの?

って話が出た。
これね、たぶん「CarbonかCocoaか」っていうキーワードで認識している人が多いと思うんだけど、実際は結構複雑。

前提条件として検討すべき項目も

1)CFMかMach-Oか
2)言語をどうするか(Objective-C/Java/C/C++)
3)Classicを対象にするかどうか
4)開発環境をどうするか(CodeWarrior/Project Builder)

ってのがある。

言葉で書いたら分かりにくかったので、表にしてみると、

 
CFM
Mach-O
CodeWarrior
サポート
サポート
Project Builder/Xcode
未サポート
サポート

 
CFM
Mach-O
MacOS 9以前
サポート
未サポート
MacOS X上のClassic環境
サポート
未サポート
MacOS X(ネイティブ)
サポート
サポート

 
Carbon API
Cocoa API
MacOS 9以前
サポート
未サポート
MacOS X上のClassic環境
サポート
未サポート
MacOS X(ネイティブ)
サポート
サポート

 
C
C++
Objective-C
CodeWarrior
サポート
サポート
未サポート
Project Builder/Xcode
サポート
サポート
サポート

 
Carbon API
Cocoa API
C
サポート
未サポート
C++
サポート
未サポート
Objective-C
サポート
サポート

確かにわかりづらい。

上記の質問に似た奴で、

・CocoaにしちゃうとCarbon APIが使えなくなるんじゃないの?
・CocoaにしちゃうとSTLが使えないんじゃないの?

Carbon APIは、Cocoa APIと混ぜて使えるし、Mach-Oでも使えるし、Objective-Cでも使えちゃう(ただしJavaからCarbon APIが使えるかどうかは不明)。
Cocoaを使ってても、同時にSTLも使えるので心配不要。C/C++の標準ライブラリも使えちゃう。
もちろん、例えばNSStringの実体をvectorに入れたい、のようにObjective-Cの言語仕様のせいで無理なケースもあるんだけど(Objective-Cはスタックにオブジェクトを作れないので)。

Objective-CとC++を同時に使うのをAppleはObjective-C++と呼んでるけど、単に同時に使えるだけなんで、Objective-CにもなくC++にもないような新しい言語拡張は一切なし。2つのちょっと違う言語を混ぜたにしては、小細工がなくていい感じ。

Model-View-ControllerのモデルだけC++で作って、ビューとコントローラをObjective-C/Cocoaで作る、ってのも可能。
逆(モデルだけObjective-C)は、ビューをゴリゴリC/C++で書くことになっちゃうので、やめた方がよさげ。

ところで、一番悩ましい質問が何かと言えば

・Cしか知らないんだけど、次に覚えるならObjective-CとC++のどっちがいい?

ごめんなさい。答えられません。
てか、Objective-CはMacではいいけどツブシが効かないし、C++覚えてもCocoaは使えないんで、Javaを覚えてください。ってのはダメ?

※ 2004/01/27 読み直したら、とんでもなく読みにくかったので直しました。

投稿者 kabeya : 2003年12月 8日 02:00