D'après ce que j'ai lu là-bas: Pourquoi Objective-C n'est-il pas très populaire en dehors de la communauté Apple?
Objective-C est un sur-ensemble de C (beaucoup plus strictement que C ++, en fait) donc le problème de compatibilité descendante ne se pose pas. Tout ce que vous pouvez faire en C, vous pouvez le faire en Objective-C.
Être un surensemble est binaire, comme être enceinte. Obj-C est un sur-ensemble de C, et C ++ ne l'est pas.
Que veulent-ils dire par sur-ensemble? De quelle manière objective-C serait-il plus proche // rétrocompatible de C? De quelle manière objective-C suit-il la philosophie C de plus près que C ++?
Un programme C peut-il être compilé sans modification par un compilateur objective-C (compatibilité à 100%)?
C'est plus une question sur la conception et la compatibilité du langage de programmation qu'une guerre pour savoir lequel est le meilleur.
la source
Ils signifient un sur-ensemble strict. Tout programme C valide sera compilé avec un compilateur Objective-C. Certains programmes C valides ne seront pas compilés avec un compilateur C ++.
Voici un exemple simple:
Compile en C et Objective-C, mais pas en C ++. Il y a bien sûr d'autres exemples également.
Tous - Objective-C est un sur-ensemble strict de C.
Oui.
la source
Depuis le début, le C ++ a été conçu comme un «meilleur C», corrigeant les omissions de conception, à la fois réelles et perçues, au fur et à mesure que les auteurs de C ++ ont parcouru le langage. Le résultat de cette décision de conception a été
X
qu'être un programme C valide ne garantissait pas qu'ilX
compilerait, et encore moins s'exécuterait, lorsqu'il serait traité par le compilateur C ++. Les changements ont touché des constructions de base telles que les littéraux de chaîne (ils sont devenusconst char*
), l'affectation devoid
pointeurs, les conversions entreenum
les types s et intégraux, la sémantique des opérateurs d'assignation composés , etc.De plus, une fois que C99 est arrivé, les fonctionnalités qui en ont fait la norme C mise à jour ont été laissées de côté dans la norme C ++ mise à jour. Encore une fois, des fonctionnalités de langage très importantes ont été laissées de côté, notamment les initialiseurs désignés et les tableaux de taille variable.
En revanche, Objective C a été positionné comme un sur-ensemble de C, exigeant que tous les programmes C valides soient compilables avec un compilateur Objective C.
la source
int nil = 0; nil++;
ne se compile pas en Objective-C. Quel est le problème, est-ce évident qu'Objective-C met à disposition des en-têtes qui, une fois inclus, peuvent casser votre code exactement comme les en-têtes C le peuvent? Et par conséquent, l'auteur de cet extrait de code n'aurait pas dû les inclure."Objective-C est un sur-ensemble de C" signifie que chaque programme C valide est un programme Objective-C valide (avec la même signification).
On dit parfois , bien que pas par les experts C ++, que C ++ est un sur-ensemble de C. Ce n'est pas exact, c'est pourquoi votre citation fait beaucoup de comparaison entre les deux.
la source
Objective C est un ensemble d'extensions rétrocompatibles vers C. Cela est possible car les fonctionnalités d'Objective C sont délimitées de deux manières très simples:
@
. Ce caractère n'est actuellement pas utilisé dans le langage C.[obj method:argument]
. En C, les crochets sont utilisés de manière très spécifique pour l'indexation des tableaux, et il s'agit donc d'une syntaxe C invalide. Les extensions qui reposent sur une syntaxe invalide ne modifient pas la signification de tout ce qui est valide dans la langue hôte.Il est si facile de voir qu'aucun programme utilisant des extensions Objective C ne peut être un programme ISO C strictement conforme, aussi simple soit-il. De plus, chaque programme ISO C peut être déclaré, par définition, comme un programme Objective C valide. Objective C peut facilement suivre des développements comme C99 et C11.
D'un autre côté, C ++ n'est pas simplement des extensions de C; c'est un langage différent qui change la signification d'une partie de la syntaxe de C. C ++ et C sont maintenus séparément, et donc leur relation change avec le temps. Par exemple, C a acquis de nouvelles fonctionnalités qui sont complètement absentes en C ++, et qui n'iront probablement pas dans C ++, comme les tableaux de longueur variable C99. C ++ ne peut pas facilement saisir de nouvelles fonctionnalités C.
Si vous écrivez un programme C portable, il doit être en même temps un programme Objective C. Mais des précautions supplémentaires seront nécessaires pour qu'il s'agisse également d'un programme C ++ avec la même signification. (Cette pratique n'est pas inconnue, et le dialecte qu'elle nécessite est officieusement connu sous le nom de «C propre»).
Un exemple trivial de programme C qui s'arrête lorsqu'il est traité comme C ++ est tout programme C qui utilise un mot clé C ++ comme identificateur, tel que
class
ouvirtual
. L'Objectif C n'introduit aucun mot-clé réservé. Il a de nouveaux mots-clés qui sont introduits par le@
personnage, comme@interface
.la source