2014年6月8日日曜日

新言語Swiftに至るまでのObjective-Cの変遷

こちらのブログにまとめました.こちらのブログにも転載します.

***

OS X 10.5 (Leopard) [2007] 以降の Objective-C 言語は文法に何度か大幅な拡張を受けている.

アップルは OS X 10.4 (Tiger) [2005] まではアプリケーションフレームワークであるCocoaの完成に力を注いでいたように見える.簡単に言うと,OS X 10.3 (Panther) [2003]で Cocoa Binding が導入され,OS X 10.4 で Core Data が導入された.後に改変は受けるものの,基本的には OS X 10.4 でCocoaフレームワークは完成したと言っていい.(正確に言うとアップルは OS X 10.2 (Jaguar) [2002] まではOSのコア部分に注力していたように見える.)

その後,アップルは OS X のバージョンを上げるたびに Objective-C 言語の文法を拡張する.

OS X 10.5 で Objective-C 2.0 が導入される.これは従来の Objective-C にガベージコレクション,プロパティ,Fast Enumeration を追加したものだ.

OS X 10.6 (Snow Leopard) [2009] / iOS 4 [2010] での Grand Central Dispatch の導入にあわせて,林檎風C言語,Objective-C言語ともブロック構文(ラムダ式)が導入された.この変更は Cocoa (Touch) フレームワークにも影響を与え,コールバックが従来のdelegate方式ではなくクロージャを渡す方式へと変化していった.

なお iOS 4 では Objective-C 2.0 が使えるもののガベコレは使えず,従来の手動リファレンスカウントが必要だった.(ARC Lite という弱参照抜きのARCが OS X 10.6 / iOS 4 でも後に可能になった.)

統合開発環境も OS X 10.6 の時代に大幅にアップデートされた.Xcode 4 が導入され,Interface Builder は廃止された.

TechCrunchの記事によると,この時期にSwiftは静かに生まれたようだ.

OS X 10.7 (Lion) [2011] / iOS 5 [2011] ではさらに Modern Objective-C が導入された.ARCが使えるようになり,代わりにガベコレは非推奨になった(iOSでは元々使えない).新しいリテラル記法が導入され,NSArray, NSDictionary, NSNumber 型のリテラルを記述できるようになった.

(時系列に書くならばここで iOS 6 [2012] に触れるべきであるが,そっとしておこう.)

OS X 10.8 (Mountain Lion) [2012] / iOS 7 [2013]では言語仕様に変化は無かったものの開発環境が Xcode 5 にアップデートされた.ガベコレは正式に葬られた.

OS X 10.9 (Mavericks) [2013] では Objective-C にも Xcode にも大きな変化は無いが,前出のTechCrunchによるとちょうどこの頃アップルはSwift言語の開発を本格化させたものらしい.
こうしてみると,アップルはアプリケーションフレームワークをまず固め,Objective-C言語を拡張し,最後に言語そのものを入れ替えたように見える.

アプリケーションフレームワークである Cocoa (Touch) は関数の動的ディスパッチを多用しているが,Swift言語は静的型付けなので,純粋なSwift言語だけで Cocoa (Touch) フレームワークを書き直すことは難しいし,アップルもそうしないだろう.Swiftコードは Objective-C コードとリンクできるので,OS X 10.10 (Yosemite) のCocoaフレームワークは Objective-C 版だけを使うことになるだろうし,当分この状況は変わらないだろう.

Swift言語をサポートする Xcode 6 のベータ版はアップルのデベロッパ登録(有料)をすれば手に入る.

0 件のコメント:

コメントを投稿