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.
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. –
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
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