Objective-C эквивалент спецификации языка Java или стандарта С++?
Что такое Objective-C эквивалент Спецификация Java Language или Стандарт С++?
Это так:
http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html?
(Я просто ищу (официальный) авторитетный документ, который объяснит маленькие nitty-gritties языка. Я пропущу почему сейчас:)
Ответы
Ответ 1
Приложение A документа, к которому вы привязаны, является описанием всех языковых функций, наиболее близким к спецификации (Приложение B использовалось как спецификация грамматики, но они явно удалили это из более позднего версии документа).
Никогда не было стандартизации Objective-C, и он всегда находился под контролем одного поставщика - сначала StepStone, затем NeXT Computer лицензировал его (и в конечном итоге купил IP), и, наконец, Apple потребляла NeXT Software. Я ожидаю небольшой мотивации, чтобы пройти трудовой процесс стандартизации на Apple часть, тем более, что нет никаких обвинений в том, что ObjC является антиконкурентной платформой, которая может смягчить стандартизацию.
Ответ 2
Нет. Ссылка, которую вы предоставили, является единственной "официальной" документацией, которая по сути является прозаическим описанием, а не строгой спецификацией языка. Сотрудники Apple считают, что этого достаточно для большинства целей, и если вам требуется что-то более формальное, вы должны подать отчет об ошибке (!). К сожалению, запущенная шутка - это стандарт Objective-C, определяемый тем, что компилятор компилирует.
Многие считают, что Objective-C является либо "строгим надмножеством", либо "надмножеством" C. IMHO, для "классического" Objective-C (или, Objective-C 1.0) я бы счел это истинным утверждением, В частности, я не знаю о добавлении языка Objective-C, которое не сопоставляется с эквивалентным выражением "plain C". В сущности, это означает, что дополнения Objective-C представляют собой чистый синтаксический сахар, и можно использовать стандарт C по сути, чтобы рассуждать о nitty gritty. Я не уверен, что это верно для Objective-C 2.0 с включенным GC. Это связано с тем, что указатели на управляемую память GC необходимо обрабатывать специально (компилятор должен вставлять различные барьеры в зависимости от особенностей указателя). Поскольку квалификаторы типа указателя GC, такие как __strong
, реализованы как __attribute__(())
внутри gcc
, это означает, что void *p;
и void __strong *p;
являются similarly qualified pointers
в соответствии со стандартом C99. Проблемы, которые это может вызвать, и даже способность писать программы, которые детерминированы, либо самоочевидны, либо нет (обратитесь за помощью к своему юристу по местному языку или составителю компилятора).
Еще одна проблема, возникающая время от времени, заключается в том, что язык C продолжает развиваться относительно языка Objective-C. Objective-C относится к середине 1980-х годов, которое является стандартным временем до ANSI-C. Рассмотрим следующий фрагмент кода:
NSMutableArray *mutableArray = [NSMutableArray array];
NSArray *array = mutableArray;
Это законный Objective-C код, определяемый официальным описанием прозы языка. Это также одна из основных концепций объектно-ориентированного программирования. Однако, когда мы рассматриваем те высказывания, которые сформулированы с точки зрения "строгого суперсета C99", каждый сталкивается с огромной проблемой. В частности, это нарушает C99 strict aliasing rules
. Спецификация языка стандартов может помочь прояснить обращение и поведение таких конфликтов. К сожалению, поскольку такой документ не существует, может быть много споров по таким деталям и в конечном итоге привести к ошибкам в компиляторе. Это привело к ошибке в gcc
, которая датируется вплоть до версии 3.0 (gcc bug # 39753).
Ответ 3
Документ Apple - это лучшее, что вы собираетесь получить. Как и многие другие языки, Objective-C не имеет официального стандарта или спецификации; скорее, он описывается главным образом его каноническими реализациями.
Ответ 4
Другие ресурсы включают:
Ответ 5
Apple (теперь), используя clang проекта llvm.org.
Некоторые элементы языка определены в этом контексте
например. Objective-C литералы → http://clang.llvm.org/docs/ObjectiveCLiterals.html
Но я не нашел четкого обзора всех элементов.
--- обновлено -
Источником ящериц яблок доступен (как открытый источник) здесь:
http://opensource.apple.com/source/clang/