121 votes

Pourquoi limiter artificiellement votre code au C ?

Cette question fait suite à une réponse que j'ai donnée à une personne de l'Union européenne. question actuelle qui pose la question d'une bibliothèque générique pour le C - l'auteur de la question précise qu'il ne veut pas utiliser le C++. La question que je lui pose, ainsi qu'aux autres personnes qui insistent pour utiliser le C, est la suivante : pourquoi le font-ils alors qu'ils le font ?

  • C++ fournit les caractéristiques spécifiques qu'ils demandent
  • Leur compilateur C est presque certainement en réalité un compilateur C++, ce qui n'a aucune incidence sur le coût du logiciel.
  • Le C++ est tout aussi portable que le C
  • Le code C++ peut être aussi efficace que le C (ou plus, ou moins).

Veuillez noter : Je n'ai pas l'intention d'argumenter - je suis sincèrement intéressé par les motivations du choix de la langue.

Edit : Il a été suggéré qu'il s'agissait d'un doublon, mais je ne le pense pas. Pour clarifier, je m'intéresse aux raisons pour lesquelles les gens se limitent au sous-ensemble C. Par exemple, l'auteur du message auquel j'ai fait référence aurait pu conserver tout son ancien code C et se contenter d'utiliser les conteneurs génériques C++ comme "meilleurs tableaux" - je m'intéresse à la raison pour laquelle les gens sont si réfractaires à cette idée. Je ne suis pas intéressé par les raisons pour lesquelles vous devriez ou ne devriez pas apprendre le C ou le C++.

Le message de Peter Kirkham était pour moi le plus instructif, en particulier en ce qui concerne les questions relatives à la C99 que je n'avais pas prises en compte, et je l'ai donc accepté. Merci à tous les autres participants.

0voto

Maxthon Chan Points 751

Il existe plusieurs tentatives d'améliorer le C en un langage orienté objet : C++, C# et Objective-C. (Java et ses amis ne sont qu'une variante de C#, avec encore plus de problèmes).

C# mettait en œuvre l'OO de manière satisfaisante et complète, mais au prix de la possibilité de revenir à une conception procédurale sans introduire de complications ou d'odeurs de code. De plus, l'introduction d'une machine virtuelle a rendu difficile l'écriture de code de bas niveau et ne peut jamais être auto-hébergée car la machine virtuelle elle-même doit être implémentée dans un langage qui peut fonctionner en natif. Java est encore plus problématique en faisant des types primitifs des citoyens de second ordre. (En C#, vous avez System.Int32 (un type primitif, int ) : System.ValueType : System.Object ce qui fait que les types primitifs sont toujours des objets, mais en Java, les types primitifs ne sont pas du tout des objets). Cependant, c'est le plus portable car les binaires compilés qui s'exécutent sous des machines virtuelles sont intrinsèquement compatibles binairement sous différentes plateformes.

Le C++ n'utilise pas de machine virtuelle et conserve les pointeurs C, ce qui le rend encore adapté au développement de systèmes. (Le noyau de OS X, Darwin, est largement écrit en C++, mais un sous-ensemble étroit qui ne possède pas de templates, d'héritage multiple ou de STL, essentiellement un dialecte d'Objective-C ressemblant à du C++. Cependant, le C++ n'a pas du tout résolu les problèmes du C classique, tout en introduisant d'autres problèmes, y compris des problèmes de portabilité qui sont clairement les plus évidents.

Objective-C se situe à mi-chemin entre C++ et C#, puisqu'il s'agit d'un simple mélange de C (toute version) et d'un dialecte Smalltalk modifié. Smalltalk, tout comme C#, traite tout comme des objets. Il n'utilise pas de machine virtuelle, et il peut toujours (obligatoirement !) utiliser des pointeurs, donc il peut toujours être utilisé comme un langage de développement de systèmes. (Bizarre pourquoi personne ne le fait ? Je veux forker Minix et essayer d'implémenter un noyau avec un minimum d'assembleur et de C, et surtout d'Objective-C) Avec les bibliothèques appropriées, l'Objective-C est largement compatible avec le code (c'est-à-dire qu'il nécessite une recompilation mais pas de changement de code) entre les plateformes, tout comme le C.

0voto

Sebastian Points 1222
  • Parce que le fournisseur du compilateur ne fournit qu'un compilateur C certifié pour les applications critiques en matière de sécurité.
  • Parce que le C++ FQA est effrayant. http://www.yosefk.com/c++fqa/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X