« JPEG Comment.app | Main | Interface Builderと文字コードとバックスラッシュ »

Cocoa VS Carbon

macosx-dev-jp-mlで話題に出てたけど、CocoaとCarbonの位置付け、Classic MacOSとの互換APIであるCarbon、NeXT由来のCocoa、位置付けとしては横並びで、好きな方使ってねって感じなんだけど、メニューのハイライトからなにから自分でやらなきゃ行けないCarbonと、巨大なアプリケーションフレームワークであるCocoaじゃあ月とスッポン、アセンブラとBASIC、新規のMacOS X用プロジェクトだったら、フレームワークと言語そのものを勉強してでもCocoa使った方が楽だと思う。Objective-Cは覚えにくい言語じゃないしね。
ただ、件のMLでも出ていたのだけど、Cocoaは良くも悪しくもUNIXの上にのっかっている。飯森さんが力説していたけど、パス名を使ってファイルアクセスするのはMacOS的には邪道中の邪道なんだよね。MacOSでは、ファイルの位置を指定するのにフルパスは極力使うなと言う事が昔から言われていた。実際、ファイルをアプリケーションから開くのに通常パスを意識する必要はない。設定ファイルを置いておくべき場所はOSに問い合わせて取得するし、開いたファイルの履歴をとっておく必要があればAliasレコードを作って保存する。Aliasは内部的にはファイル名、ファイルID、相対パス。親ディレクトリのID、ボリューム番号など、ファイルを指定するための情報をいくつも保存しておく仕組み。これがあれば、ターゲットのファイルが移動してしまっても追跡可能な、優れたシステムだ。まあ、MacOSはもともとPascalのためのAPIで構成されていて、文字列の長さが255bytesしかなく、そのうえファイル名が31bytesまで使えたので、フルパス主体にファイルマネージャを作ったら、すぐに限界を超えてしまうと言う問題もあったと思うけど。
さて、Cocoaではなにかとパス名を使う。NSStringクラスにはパス文字列を操作する便利なメソッドがてんこもりだ。確かにMacOSのノリだと気持ち悪いけど、便利だからつい使っちゃう。世の中Mac以外が90%で、それらがパス主体のファイル操作で困ってると言う話も聞かない。ならいいんじゃないか、と思うのだけど、意外な所に問題が潜んでいるのだった。
MacOS Xでの、パス文字列の長さは、最大1024bytesと決まっている。一方、HFS+ファイルシステムはUnicode文字で255文字までのファイル名を許している。ファイルシステム上ではUCS2かなにかで保存されており、原則的には一文字あたり2byteになっている。MacOS XのPOSIX APIではこのファイル名をUTF-8に変換して使っているようだ。UTF-8は欧米系の文字はほぼ1文字=1byteで表現されている。つまりファイル名は最大255byte程度と考えられる。限界までの長ーい名前を付けたフォルダを4つ入れ子にすれば、もう5階層以下は参照不能となってしまう。プログラムによってはバッファオーバーランでクラッシュするだろう。現実には、長い名前はあまりフォルダにはつけないと思うので、そうそう限界に達する事はないが、UTF-8で日本語などはだいたい文字あたり3byte以上になってしまうため、見た目以上にパス文字列にしたときのバイト長はのびている可能性がある。
飯森さんなどは、MacOS XのアプリケーションはFSRefを中心につかえと言う忠告をしている。確かにCarbon呼び出しをラップしてうまくカテゴリなどでクラスを拡張してやるやり方を取れば、さほど苦労しなくてもいけるかもと思うけど、それはそれでなんか納得行かないものがあるのも確かだ。

そういえばApple的にはCocoaでのファイル特定にパスにかわってNSURLを使わせようとしているきらいがあるな。NSURLでの指定にはパス長は関係しないのだろうか。"file://localhome"を削って下位APIに渡しているだけだったら同じ事になっちゃうけど。

|

« JPEG Comment.app | Main | Interface Builderと文字コードとバックスラッシュ »

「パソコン・インターネット」カテゴリの記事

Comments

It's hard to find your articles in google. I found it on 14 spot, you should build quality backlinks , it will help you to rank to google top 10. I know how to help you, just type in google - k2 seo tips and tricks

Posted by: Margaret | 2014.07.07 at 09:16 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/10254/53291

Listed below are links to weblogs that reference Cocoa VS Carbon:

« JPEG Comment.app | Main | Interface Builderと文字コードとバックスラッシュ »