2012-09-27 9 views
6

WWDC 2012では、「Modern Objective-C」という名前のトーク405で、AppleはNSNumberリテラルとコレクションリテラルの新しい構文を導入しました。私はStephen G. KochanのObjective-C 2.0に関する本からObjective-Cを学びました。「Modern Objective-C」は実際にObjective-C 2.1という新しいバージョンですか?

"Modern Objective-C"はObjective-C 2.1になりますか、またはAppleの新しい構文をコンパイラによって処理される既存の構文のApple固有の構文(省略形)と見なすべきですか?

私はObjective-C RunTimeの文脈でのみ、 "modern"と "legacy"という用語を見つけましたが、そして、コンパイラディレクティブものです。)

答えて

10

のObjective-CはCのプリプロセッサ命令とコンパイラディレクティブの拡張として定義されてObjective-のない「正式」な定義はありません、彼らはC.

ためのもので、まさにですC言語(標準なし)。 Appleは多かれ少なかれそれを説明する文書を出版している。また、言語の実際の「バージョン番号」もありません。アップルは新しい機能を追加することもあります。ある時点で、Appleは特定の機能セットを「Objective-C 2.0」として宣伝することに決めましたが、これはすべての以前のバージョンが同じ機能セットを持っているわけではなく、後続のすべてのバージョンが同じ機能セットを持つことを意味しません。 Appleが使っている最も最近のモニカは、 "Modern Objective-C"であり、現在定義されているすべての機能をサポートする言語を指しています。

一部の機能はコンパイラレベルで定義され、その他はライブラリレベルで定義され、その他は両方の機能が混在していることに注意してください。コンパイラレベルで完全に実装されている機能(新しいリテラル構文など)を使用すると、そのコンパイラで作成およびコンパイルするすべてのプログラムで機能します。しかし、ライブラリレベルで定義された機能を使用したり、コンパイラとライブラリの両方のサポートが必要な機能を使用すると、最新のライブラリが利用可能なシステムで動作するプログラムに対してのみ機能します(Appleは言語ライブラリを静的にリンクさせません) 。例としては、GC、ARC、weakに添付されたゼロ化セマンティクスなどがあります。

したがって、「現代的なObjective-C」は以前のObjective-Cとは異なっていますが、新しいバージョンと見なす必要がありますが、バージョン番号は付けられていません。言語に特徴を持ち、それを "Modern Objective-C"と呼んでいます。まさにどの機能が言語の一部であるかだけでなく、コンパイラだけでなく、コンパイル対象のターゲットシステムにも依存します。したがって、iOS 4を対象とした「Modern Objective-C」プログラムは、OsX 10.8を対象とした「Modern Objective-C」プログラムとは異なる機能セットを使用できます。

+0

ありがとう、歴史的な見通しが良い。私はK&R CとANSI Cの開発を開始し、Objective-Cの同様の標準を期待していました。明らかに、これは当てはまりません。 –

+3

ランタイムサポートを必要とする新機能は、一般にOS XまたはiOSのメジャーリリースでのみ導入されていることに注意してください。 1つは最初に取得し、次のリリースでは他のキャッチアップになります。コンパイラのみの機能は、わずかに流動的になる可能性があります。開発がLLVMに焦点を当てられたので、あなたは一般的に、次に来るもののために感じるために、LLVMオープンソースプロジェクトに目を向けることができます。 – bbum

+0

AppleがObjective-Cのこれらの変更にバージョン番号を採用していないことは残念です。次のバージョンとは何でしょうか?モ 'モダクティブ-C? – ThomasW

関連する問題