2012-09-27 4 views
6

W WWDC 2012 Apple wprowadził nową składnię literałów NSNumber i literałów Collection w rozmowie 405 o nazwie "Modern Objective-C". Nauczyłem się Celu C z książki o Celu C 2.0 Stephena G. Kochana.Czy "Modern Objective-C" to naprawdę nowa wersja, tj. Objective-C 2.1?

Czy "Współczesnym celem-C" będzie Cel-C 2.1, czy też nowa składnia Apple będzie uważana za alternatywną, specyficzną dla Apple składnię (skrót) dla istniejących konstrukcji, które są przetwarzane przez kompilator?

(Zrobiłem kilka badań w Internecie, ale znalazłem terminy "nowoczesne" i "dziedzictwo" tylko w kontekście RunTime Objective-C. Chciałbym zrozumieć, co dokładnie jest w języku, jakie są instrukcje preprocesora, i jakie są dyrektywy kompilatora).

Odpowiedz

10

Objective-C jest zdefiniowane jako rozszerzenie instrukcji preprocesora C i dyrektywami kompilatora są dokładnie takie, jakie są dla C

nie ma „formalna” definicja Objective- Język C (bez standardu). Apple publikuje dokument, który w mniejszym lub większym stopniu wyjaśnia to. Nie ma również prawdziwego "numeru wersji" tego języka. Apple czasami dodaje nową funkcję i to wszystko. W pewnym momencie Apple zdecydowało się wypromować pewien zestaw funkcji jako "Objective-C 2.0", ale nie oznacza to, że wszystkie poprzednie wersje miały ten sam zestaw funkcji, a to oznacza, że ​​wszystkie kolejne wersje będą miały ten sam zestaw funkcji. Najnowszym znakiem, którego używa Apple, jest "nowoczesne Objective-C" i odnosi się do języka, który obsługuje wszystkie aktualnie zdefiniowane funkcje.

Należy zauważyć, że niektóre funkcje są zdefiniowane na poziomie kompilatora, inne są zdefiniowane na poziomie biblioteki, a inne są kombinacją obu. Jeśli używasz funkcji, która jest całkowicie zaimplementowana na poziomie kompilatora (jak nowa składnia literałów), będzie działać dla dowolnego programu, który napiszesz i skompilujesz z tym kompilatorem. Ale jeśli używasz funkcji zdefiniowanej na poziomie biblioteki lub wymagającej zarówno obsługi kompilatora, jak i biblioteki, działa ona tylko dla programów działających w systemach, w których dostępna jest najnowsza biblioteka (Apple nie pozwala na statyczne łączenie bibliotek językowych) . Przykładami są takie rzeczy jak GC, ARC i semantyka zerowania dołączona do weak.

Dlatego: tak, "nowoczesne Objective-C" jest wystarczająco różne od wcześniejszego Objective-C, że powinieneś uznać to za nową wersję, jednak nie, nie ma tam numeru wersji i jest całkiem możliwe, że Apple doda nowe funkcje do języka i nadal nazywają to "nowoczesnym Objective-C". Poza tym, jakie funkcje są częścią języka, zależy nie tylko od kompilatora, ale także od systemu docelowego, dla którego kompilujesz. Dlatego też program "nowoczesny Objective-C" skierowany na system iOS 4 będzie mógł korzystać z innego zestawu funkcji niż program "nowoczesny Objective-C" skierowany do OsX 10.8.

+0

Dzięki, dobrze, że masz jakąś historyczną perspektywę. Zacząłem rozwijać się w czasach K & R C i ANSI C i oczekiwałem podobnego standardu dla Objective-C. Oczywiście tak nie jest. –

+3

Należy zauważyć, że nowe funkcje wymagające obsługi środowiska wykonawczego są zwykle wprowadzane tylko w przypadku głównych wydań systemu OS X lub iOS; jeden dostanie go pierwszy, a inne zacznie w następnym wydaniu. Kompilator tylko funkcje mogą być nieco bardziej płynne. Teraz, gdy rozwój koncentruje się na LLVM, możesz na ogół obserwować projekt Open Source LLVM, aby poczuć, co będzie dalej. – bbum

+0

To niefortunne, że Apple nie przyjął numerów wersji dla tych zmian w Objective-C. Jaka będzie następna wersja? Mo 'modern Objective-C? – ThomasW

Powiązane problemy