Objective C, эквивалентный из Спецификации языка Java или Стандарта C++?

Выезд nutch, это записано тем же парнем, который создал Lucene ( Doug Cutting ).

13
задан Mansfield 15 June 2012 в 02:10
поделиться

3 ответа

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

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

13
ответ дан 1 December 2019 в 21:12
поделиться

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

1
ответ дан 1 December 2019 в 21:12
поделиться

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

Многие считают Objective-C либо «строгим надмножеством», либо «надмножеством» C. ИМХО, для «классического». «Objective-C (или Objective-C 1.0), я бы счел это верным утверждением. В частности, я не знаю ни одного дополнения к языку Objective-C, которое не отображалось бы в эквивалентный "простой" оператор C. По сути, это означает, что дополнения Objective-C - это чистый синтаксический сахар, и можно использовать стандарт C, чтобы рассуждать о мелочах. Я не уверен, что это полностью верно для Objective-C 2.0 с включенным GC. Это связано с тем, что указатели на управляемую память сборщика мусора должны обрабатываться специально (компилятор должен вставлять различные барьеры в зависимости от характеристик указателя). Поскольку квалификаторы типа указателя GC, такие как __ strong , реализованы как __ attribute __ (()) внутри gcc , это означает, что void * p; и void __strong * p; являются одинаково квалифицированными указателями в соответствии со стандартом C99. Проблемы, которые это может вызвать, и даже возможность писать программы, которые работают детерминированным образом, либо очевидны, либо нет (обратитесь к юристу по местному языку или составителю компилятора для получения дополнительной информации).

Другая проблема, которая возникает из время от времени язык C продолжает развиваться относительно языка Objective-C. Objective-C восходит к середине 1980-х, что является стандартным временем до ANSI-C. Рассмотрим следующий фрагмент кода:

NSMutableArray *mutableArray = [NSMutableArray array];
NSArray *array = mutableArray;

Это законный код Objective-C, как определено в официальном прозаическом описании языка. Это также одна из основных концепций объектно-ориентированного программирования. Однако, если рассматривать эти утверждения с точки зрения «строгого надмножества C99», можно столкнуться с огромной проблемой. В частности, это нарушает строгие правила псевдонима C99 . Спецификация языка стандартных оценок поможет прояснить трактовку и поведение таких конфликтов. К сожалению, поскольку такого документа не существует, могут быть много споров по поводу таких деталей, что в конечном итоге приведет к ошибкам в компиляторе. Это привело к ошибке в gcc , которая восходит к версии 3.

12
ответ дан 1 December 2019 в 21:12
поделиться