Objective-C эквивалент спецификации языка Java или C ++ Standard? - PullRequest
13 голосов
/ 05 августа 2009

Что является Objective-C эквивалентом Спецификации языка Java или C ++ Standard ?

Это так: http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html?

(Я просто ищу (официальный) авторитетный документ, который объяснит мелкие мелочи языка. Я пока пропущу почему:)

Ответы [ 5 ]

13 голосов
/ 05 августа 2009

Приложение A документа, на который вы ссылаетесь, представляет собой описание всех языковых возможностей, которое ближе всего к спецификации (Приложение B раньше было спецификацией грамматики, но они явно удалили ее из более поздней версии). версии документа).

Стандартизации Objective-C никогда не было, и она всегда находилась под контролем одного поставщика - сначала StepStone, затем NeXT Computer лицензировала его (и в конечном итоге приобрела IP) и, наконец, Apple использовала программное обеспечение NeXT. Я ожидаю, что у Apple мало мотивации пройти трудоемкий процесс стандартизации, тем более что нет никаких обвинений в том, что ObjC является антиконкурентной платформой, которую стандартизация могла бы смягчить.

12 голосов
/ 06 августа 2009

Там нет ни одного. Ссылка, которую вы предоставили, является единственной «официальной» документацией, которая по сути является прозаическим описанием, а не строгой языковой спецификацией. Сотрудники Apple считают, что этого достаточно для большинства целей, и если вам требуется что-то более формальное, вы должны отправить отчет об ошибке (!). К сожалению, шутка о том, что стандарт Objective-C определяется тем, что компилятор умеет компилировать.

Многие считают Objective-C «строгим надмножеством» или «надмножеством» языка C. ИМХО, для «классического» Objective-C (или Objective-C 1.0) я бы посчитал это истинным , В частности, я не знаю ни о каком добавлении языка Objective C, которое не сопоставляется с эквивалентным «простым C» оператором. По сути, это означает, что добавки Objective-C являются чистым синтаксическим сахаром, и можно использовать действующий стандарт C, чтобы рассуждать о мелочности. Я не уверен, что это полностью верно для 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 ).

1 голос
/ 14 июня 2013

Дополнительные ресурсы включают в себя:

  • Руководство по программированию языка Objective-C и базовой библиотеки GNUstep .

  • Библиотека разработчиков NeXT

1 голос
/ 05 августа 2009

Документ Apple о лучшем, что вы собираетесь получить. Как и многие другие языки, Objective-C не имеет формального стандарта или спецификации; скорее он описывается в основном своими каноническими реализациями.

0 голосов
/ 22 мая 2014

Apple (сейчас), используя лязг проекта llvm.org.

Некоторые из языковых элементов определены в этом контексте

например. Литералы Objective-C -> http://clang.llvm.org/docs/ObjectiveCLiterals.html

Но я не нашел четкого обзора всех элементов.

--- обновлено -

Источник клана Яблока доступен (как открытый источник) здесь: http://opensource.apple.com/source/clang/

...