Из того, что я там прочитал: Почему Objective-C не очень популярен за пределами сообщества Apple?
Objective-C - это надмножество C (на самом деле намного более строго, чем C ++), поэтому проблема обратной совместимости не возникает. Все, что вы можете делать в C, вы можете делать в Objective-C.
Быть суперсетом бинарно, как беременность. Obj-C - это надмножество C, а C ++ - нет.
Что они подразумевают под суперсетом? Каким образом объект-C будет более // обратно совместим с C? В каком смысле объектный C следует философии C более точно, чем C ++?
Можно ли скомпилировать любую программу на C без модификации с помощью компилятора Objective-C (100% совместимость)?
Это больше вопрос о дизайне и совместимости языков программирования, чем споры о том, какой из них лучше.
источник
Они означают строгий суперсет. Любая допустимая программа на C будет компилироваться с помощью компилятора Objective-C. Некоторые допустимые программы на C не компилируются с помощью компилятора C ++.
Вот простой пример:
int *foo = malloc(12);
Компилируется на C и Objective-C, но не на C ++. Есть, конечно, и другие примеры.
All - Objective-C является строгим надмножеством C.
Да.
источник
С самого начала C ++ разрабатывался как «лучший C», исправляющий упущения в конструкции, как реальные, так и предполагаемые, когда авторы C ++ работали над языком. Результатом этого проектного решения стало то,
X
что наличие действующей программы на C не гарантируетX
ее компиляции, не говоря уже о запуске, при обработке компилятором C ++. Изменения коснулись таких базовых конструкций, как строковые литералы (ими сталиconst char*
), присвоениеvoid
указателей, преобразования междуenum
s и целочисленными типами, семантика составных операторов присваивания и так далее.Более того, как только появился C99, функции, которые вошли в обновленный стандарт C, были исключены из обновленного стандарта C ++. Опять же, очень важные языковые функции были упущены - в первую очередь, назначенные инициализаторы и массивы переменного размера.
Напротив, Objective C позиционируется как надмножество C, требуя, чтобы все допустимые программы C были компилированы с помощью компилятора Objective C.
источник
int nil = 0; nil++;
не компилируется как Objective-C. В чем проблема, очевидно ли, что Objective-C делает доступными заголовки, которые после включения могут сломать ваш код точно так же, как заголовки C? Следовательно, автору этого фрагмента не следовало их включать.«Objective-C - это надмножество C» означает, что каждая допустимая программа C является действительной программой Objective-C (с тем же значением).
Он иногда говорит, хотя и не эксперты C ++, что C ++ является надстройкой C. Это не является точным, поэтому ваша цитата делает большое дело сравнивая два.
источник
Objective C - это набор обратно совместимых расширений C. Это возможно, потому что функции Objective C разграничены двумя очень простыми способами:
@
. Этот символ в настоящее время не используется в языке C.[obj method:argument]
. В C квадратные скобки используются очень специфическим образом для индексации массива, поэтому это недопустимый синтаксис C. Расширения, основанные на недопустимом синтаксисе, не изменяют значения всего допустимого на языке хоста.Так легко понять, что никакая программа, использующая расширения Objective C, не может быть строго соответствующей программой ISO C, какой бы простой она ни была. Более того, каждая программа ISO C может быть объявлена по определению действительной программой Objective C. Objective C может легко следить за разработками, такими как C99 и C11.
С другой стороны, C ++ - это не просто расширение C; это другой язык, который меняет значение некоторых синтаксисов C. C ++ и C поддерживаются отдельно, поэтому их взаимосвязь со временем меняется. Например, C получил новые функции, которые полностью отсутствуют в C ++ и, скорее всего, не войдут в C ++, такие как массивы переменной длины C99. C ++ не может легко получить новые функции C.
Если вы пишете переносимую программу на C, она должна быть в то же время программой Objective C. Но потребуется дополнительная осторожность, чтобы это была программа на C ++ с тем же значением. (Эта практика не является чем-то необычным, и требуемый диалект неофициально известен как «Чистый C»).
Тривиальный пример программы на C, которая ломается при обработке как C ++, - это любая программа на C, которая использует ключевое слово C ++ в качестве идентификатора, например
class
илиvirtual
. Objective C не вводит никаких зарезервированных ключевых слов. В нем есть новые ключевые слова, которые вводит@
персонаж, например@interface
.источник