web-dev-qa-db-fra.com

Pourquoi Objective-C n'est-il pas très populaire en dehors de la communauté Apple?

Je sais que la Apple - y compris les développeurs Mac et iPhone - utilise principalement Objective-C pour leur langage de développement. Mais il semble que peu de gens utilisent Objective-C en dehors de Apple, comme dans les mondes Windows ou Linux.

Quelles sont les raisons possibles pour lesquelles Objective-C n'est pas particulièrement populaire en dehors de la communauté Apple?

43
Tattat

Une autre façon de penser à cette question pourrait être: pourquoi le C++, plutôt que l'Objective-C, est-il devenu le "Object-Oriented C"?

J'ai appris le C++ en 1991 et je me souviens que le C++ semblait être la chose la plus intéressante alors qu'Objective-C était ce petit langage étrange que personne (autre que NeXT) ne voulait utiliser. J'ai essayé de me rappeler pourquoi, et je pense que cela se résume à 4 choses (5, si vous incluez C++ avec AT&T derrière):

  1. Fonctionnalités: C++ avait, même alors, un ensemble de fonctionnalités beaucoup plus riche que Objective-C.
  2. Syntaxe: la syntaxe d'Objective-C est un changement beaucoup plus important de C que C++.
  3. Performances: Stroustrup s'est concentré sur la création de fonctionnalités C++ facilement mappables en C, de sorte que (en théorie!) Il n'y avait pas de pénalité de performances dans l'utilisation de C++. Et avec une utilisation judicieuse du mot clé "inline", vous pourriez même obtenir de meilleures performances avec C++ qu'avec C. Même maintenant, il n'y a aucun moyen d'utiliser Objective-C dans un projet où les performances étaient critiques.
  4. Style: La frappe statique relativement forte était à la mode (pour de bonnes raisons).

Donc, par rapport à Objective-C, C++ au début des années 90 vous offrait plus de fonctionnalités avec moins de pénalité de performance, avec une syntaxe à la mode et plus familière que celle d'Objective-C.

22
Dave S.

C'est une question compliquée; mais en bref; Je pense que la réponse réside probablement dans l'âge des systèmes d'exploitation et de leurs racines.

  • UNIX est C, donc c'est tout.
  • Linux est envisagé comme un clone direct d'Unix (très bien, c'est un peu inexact, mais assez proche pour cette discussion) et en tant que tel, il est plus ou moins écrit en C.
  • Windows est un ancien système d'exploitation ; et celui qui est construit en empilant hack sur hack en remontant jusqu'à Windows 3.1. C++ est fortement favorisé et en .NET, C #.

    Ce nouvel afflux est bien sûr basé sur le programme que Microsoft a avec cette plate-forme.

  • Mac OS X; d'autre part, est un système d'exploitation (relativement) jeune, et ses nouvelles parties (bien qu'encore assez anciennes, héritées du NeXT et ainsi de suite) sont toutes basées sur Objective-C parce que "Hey! Pourquoi pas?".

    La compatibilité ascendante ne faisait pas partie de la liste des priorités avec Mac OS X 10.0; la boîte à outils basée sur C/C++ et Carbon ont obtenu le bout court du bâton, et l'ensemble du système d'exploitation a été plus ou moins conçu comme une version peaufinée de NeXTSTEP.

Le problème avec Obj-C est que la puissance du langage vient principalement des cadres de taille, du niveau généralement élevé d'intégration dans le système, etc. Il est presque impossible d'obtenir un bon jive comme celui-ci sans une rupture nette avec la compatibilité descendante et, en tant que tel, il n'aurait jamais vraiment de chance sur une plate-forme qui n'oserait pas le faire. Apple, avec une petite base d'utilisateurs (à l'époque) et dévouée, a osé le faire et a frappé l'or.

Microsoft essaie maintenant, mais échoue, à mon humble avis. ("Echec?! .NET!? COMMENT OSEZ-VOUS!?": Avec 4 révisions majeures en environ 8 ans, ils font plus de croissance que de maturation; ce qui peut être une bonne chose, s'ils peuvent renverser la vapeur.)

Edit: Certains projets tentent de porter OpenStep sur Linux, mais ils sont un peu maladroits et difficiles à utiliser; il existe également des projets plus petits sur les NS/OS-like avec des domaines de problèmes plus petits, mais c'est un travail difficile.

20
Williham Totland

Je me tenais récemment dans une librairie lisant Masterminds of Programming où les créateurs de langages de programmation parlent de leurs créations. Il y avait un chapitre sur Objective-C où Tom Love (l'un des créateurs d'Objective-C, avec Brad Cox) a été demandé pourquoi C++ était allé si loin, alors qu'Objective-C n'avait pas:

Pourquoi pensez-vous que C++ a été utilisé plus fréquemment que Objective-C?

Tom: Il y avait le surnom AT&T derrière.

Juste ça?

Tom: Je pense que oui.

Que pensez-vous d'Objective-C aujourd'hui?

Tom: Il existe toujours. Et ça?

17
nevan king

Objective-C n'est rien d'autre qu'une fine couche (un peu plus épaisse avec 2.0 ) de sucre syntaxique pour le message passant au-dessus de standard C . Même l'orientation d'objet la plus élémentaire est fournie par la bibliothèque d'exécution, qui était propriétaire depuis longtemps. L'inertie est un facteur important dans l'utilisation de la langue.

Il brille surtout sur les interfaces graphiques , mais les seules boîtes à outils qui le prennent en charge sont Apple et la plupart inconnue et rattrapage GNUStep.

Bien qu'il existe une certaine valeur pour Objective-C en dehors de GUI , et je pense que les gens utiliseraient les extensions où ils ont été importés C , même dans le code système, il y a peu de raisons de le choisir plutôt que des alternatives, quand peu de votre système est censé fonctionner avec.

12
user14554

Du haut de ma tête, je crois que C++ est plus ancien que Objective-C, et non seulement pour cette raison, il a une base d'utilisateurs beaucoup plus importante. Partout où OC peut être venu, C++ était déjà là :)

De plus, C++ a plus de fonctionnalités. Beaucoup de gens sont impressionnés par de nombreuses fonctionnalités. Et il y a eu plus de recherche et de développement dedans ... et ainsi de suite. Essentiellement, l'élan.

4
Carl Smotricz