「Carbon (API)」の版間の差分
Superveryhothot (会話 | 投稿記録) m編集の要約なし |
m Bot作業依頼: Apple関連記事の改名に伴うリンク修正依頼 (Apple|Apple) - log |
||
26行目: | 26行目: | ||
== 現状と将来 == |
== 現状と将来 == |
||
当初の[[ |
当初の[[Apple]]の説明では、Carbonに対応したアプリケーションは、CarbonLibをインストールしたMac OS 9とMac OS Xで(それぞれのOSに特有の機能を除けば)同じように動作可能というものであった。しかし実際には、CarbonLibには問題も多く、デベロッパはMac OS 9とMac OS X用にコードを書き分けねばならない場面も多かった。そのため、Mac OS Xへの移行も完了した今日では、Mac OS 9とMac OS Xの両方で動作可能な実行環境としてのCarbonは役目を終えたとも言える。 |
||
[[Mac OS X v10.2]]から[[Mac OS X v10.4]]にかけて、CarbonはCocoaを模したHIObject(カスタムコントロールを作成するための機能セット)の導入や、Mac OS X全体の共有基盤といえる[[Core Foundation]]との互換性強化など、Cocoa同等の開発基盤として、徐々に構造の近代化が計られた。 |
[[Mac OS X v10.2]]から[[Mac OS X v10.4]]にかけて、CarbonはCocoaを模したHIObject(カスタムコントロールを作成するための機能セット)の導入や、Mac OS X全体の共有基盤といえる[[Core Foundation]]との互換性強化など、Cocoa同等の開発基盤として、徐々に構造の近代化が計られた。 |
2021年5月20日 (木) 11:00時点における版
Carbon(カーボン)は、Classic Mac OSのToolbox API (Application Programming Interface) をMac OS X用に整理・移植したAPIであり、Classic Mac OS用アプリケーションをMac OS X向けに移植しやすくするために開発された。
概要
QuickTimeチームがAPIをMac OS Xに移植するために互換レイヤーを作成したものが元型となっている。それがスティーブ・ジョブズの目に留まり、汎用の互換フレームワークのアイディアとして採用された。Toolbox APIの中で明らかにレガシーなもの、あまり使われていないものを廃し、また内部構造が32ビットを前提として再設計されている(Toolboxは16ビットコードで、PowerPCの性能の足枷となっていた)。
Carbon APIを利用したアプリケーションのことをCarbonアプリケーションと呼ぶ。Cocoaは同じ Mac OS Xに搭載されているほぼ等価な機能をもつ API であるが、Cocoa APIを使うためにはObjective-Cのコードを書かなければならないのに対して、Carbon API は旧来のインターフェイスを持っておりC/C++からも使うことができる。基本的にToolboxとソースコード互換を目指しており、単に移植を行なうだけであれば、それほど大きな設計変更は必要ない。
Carbonアプリケーションには、
- 一つのバイナリでMac OS XでもClassic Mac OSでも実行できる『PEF Carbon』
- Mac OS X専用の『Mach-O Carbon』
の2種類が存在する。 PEFとはPreferred Executable Formatのこと。CFM(Code Fragment Manager) Carbonともいう。PEFは従来から使用されてきたフォーマットであるため、新旧両方のMac OSで動かせる。
Mach-O CarbonはMac OS X用に最適化されているのでCFM Carbonより幾分高速に動作する 。また、QuartzをはじめとするMac OS X特有のAPIを利用するためには、Mach-O形式が最も適する。このフォーマットはdyldとも呼ばれる。 Mac OS Xが普及してしばらくはCFM Carbonが大半だったが、開発環境が最適化されていくにつれてMach-O Carbonがほとんどとなってきた。(Xcodeの利用による)Mach-O化はUniversal Binary化には必須である。
※CFMやMach-OはABI (Application Binary Interface) のことで、API (Application Programming Interface) とは無関係。
Carbonにより、旧来のMac OSのアプリケーションのMac OS Xへの移植が容易になり、新旧両方のオペレーティングシステムでアプリケーションの実行が出来るため、最も普及している。CarbonアプリケーションはMac OS Xにもネイティブになり、その多大なる恩恵を受けることが出来る。 ただし、CFM Carbonのアプリケーションでも、実行にはCarbonLibと呼ばれる機能拡張書類が必要であり、これがなければ旧来のMac OSでは動作しない。逆に言えば、CarbonLibがあればMac OS 8.6から最新のMac OS X上で実行できるようになる。
CFM Carbonでは一つのプログラムで新旧両方のOSで実行できるが、CarbonLibが欠かせない。Mach-O Carbonは、一つのプログラムだけの場合、Mac OS X以外では実行できない。これらの欠点を補うため、Mac OS 9から導入されたアプリケーションパッケージを利用して一つのフォルダの中に CarbonアプリケーションとClassicアプリケーション(Mac OS 9まででしか動作しないアプリケーション)の両方を入れ、一つのアプリケーションのように見せかけ、新旧両方のOSで確実に実行できるようにすることがある。
なお、NeXTSTEP由来のCocoaは旧Mac OSのToolbox API由来のCarbonと必ずしも対立するものではない。Mac OS Xでは、CarbonベースのライブラリをラップしてCocoaアプリケーションとして実装したもの、Cocoaベースのコンポーネントが組み込まれたCarbonアプリケーションなど、様々な実装形態のソフトウェアが存在し、両APIは密接な相互依存関係にある。
現状と将来
当初のAppleの説明では、Carbonに対応したアプリケーションは、CarbonLibをインストールしたMac OS 9とMac OS Xで(それぞれのOSに特有の機能を除けば)同じように動作可能というものであった。しかし実際には、CarbonLibには問題も多く、デベロッパはMac OS 9とMac OS X用にコードを書き分けねばならない場面も多かった。そのため、Mac OS Xへの移行も完了した今日では、Mac OS 9とMac OS Xの両方で動作可能な実行環境としてのCarbonは役目を終えたとも言える。
Mac OS X v10.2からMac OS X v10.4にかけて、CarbonはCocoaを模したHIObject(カスタムコントロールを作成するための機能セット)の導入や、Mac OS X全体の共有基盤といえるCore Foundationとの互換性強化など、Cocoa同等の開発基盤として、徐々に構造の近代化が計られた。
しかしながらMac OS X v10.5での64ビット対応はUI部分が見送られ[1]、64ビット完全対応にはCocoaへの移行が必須となるなど、アップルはGUIフロントエンドとしてのCarbonを徐々にフェードアウトさせ、Cocoaをメインとする姿勢を強めている。Mac OS X v10.6では従来CarbonベースだったQuickTimeとFinderがCocoaで作り直されている。将来的にはMac OS XにおけるCarbon APIはクロスプラットフォームの共有基盤を担う低レベルレイヤーとして位置づけられていくことになるとみられる。
なおMac OS XはPowerPC CPUのみならず、インテルCPU上へも移植された。Intel Mac版Mac OS XではCFM Carbonのアプリケーションはネイティブには動作せず、OS X Lionで廃止されたRosettaと呼ばれる環境の上で動作していた。Intel Mac版Mac OS Xが登場した頃は、CocoaアプリケーションとMach-O Carbonアプリケーションは再コンパイルすることでネイティブに動作するとされていた。macOS Catalinaでは、32bitアプリケーションは動作しない為、CarbonアプリケーションはCocoaでの作り直しが必要であり、Cocoaアプリケーションも64bit化が必須である。