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.

14voto

quinmars Points 4241

Le C++ a une courbe d'apprentissage beaucoup plus longue. Le C n'a que quelques constructions que vous devez connaître et ensuite vous pouvez commencer à coder des logiciels puissants. En C++, vous devez apprendre la base du C, puis la programmation OO et générique, les exceptions, etc. Au bout d'un certain temps, vous connaissez peut-être la plupart des fonctionnalités et vous pouvez probablement les utiliser, mais vous ne savez toujours pas comment le compilateur les traduira, quels sont les coûts implicites qu'elles entraînent ou non. Cela prend beaucoup de temps et d'énergie.

Pour un projet professionnel, cet argument peut ne pas compter, car vous pouvez employer des personnes qui connaissent déjà très bien le C++. Mais dans les projets Open Source, où le C est encore largement utilisé, les gens choisissent le langage qu'ils aiment et qu'ils sont capables d'utiliser. Considérez que tous les programmeurs de systèmes d'exploitation ne sont pas des programmeurs professionnels.

11voto

TrayMan Points 3586

J'aimerais revenir sur la réponse de Dan Olson. Je pense que les gens craignent les caractéristiques potentiellement dangereuses et contre-productives du C++, et ce à juste titre. Mais contrairement à ce que dit Dan, je ne pense pas que le simple fait de décider d'une norme de codage soit efficace, et ce pour deux raisons :

  1. Les normes de codage peuvent être difficiles à appliquer strictement
  2. Il peut être très difficile d'en trouver une bonne.

Je pense que la deuxième raison est beaucoup plus importante que la première, car décider d'une norme de codage peut facilement devenir une question politique et faire l'objet d'une révision ultérieure. Considérons le cas simplifié suivant :

  1. Vous êtes autorisé à utiliser des conteneurs stl, mais pas à utiliser des modèles dans votre propre code.
  2. Les gens commencent à se plaindre qu'ils seraient plus productifs s'ils étaient autorisés à coder telle ou telle classe de modèle.
  3. La norme de codage est révisée pour permettre cela.
  4. Glissez sur une pente vers une norme de codage excessivement compliquée que personne ne suit et l'utilisation d'exactement le type de code dangereux que la norme était censée empêcher, combinée à une bureaucratie excessive entourant la norme.

(L'alternative selon laquelle la norme n'est pas révisée à l'étape 3 est empiriquement trop improbable pour être envisagée et ne serait de toute façon pas tellement meilleure).

Bien que j'utilisais le C++ pour à peu près tout il y a quelques années, je commence à penser que le C est préférable pour les tâches de bas niveau qui doivent être gérées par le C ou le C++ et que tout le reste devrait être fait dans un autre langage. (Les seules exceptions possibles étant certains domaines de problèmes spécifiques de haute performance, par rapport au C++). Blitz++ )

11voto

Rhythmic Fistman Points 7612

J'utilise le C, ou du moins j'exporte une interface C lorsque j'écris du code de bibliothèque.

Je ne veux pas de problèmes d'ABI mal définis.

10voto

Dan Olson Points 11210

Je n'ai jamais vu d'arguments convaincants en faveur du C par rapport au C++. Je pense que la plupart des gens ont peur de certaines fonctionnalités offertes par le C++, souvent à juste titre. Pourtant, cela ne me convainc pas car on peut imposer l'utilisation ou non de certaines fonctionnalités par le biais de normes de codage. Même en C, il y a beaucoup de choses que vous voudriez éviter. Rejeter complètement le C++ revient à dire qu'il n'offre aucun avantage tangible par rapport au C qui aiderait à écrire un meilleur code, ce qui est un point de vue que je considère comme assez ignorant.

En outre, les gens semblent toujours soulever la situation des plateformes où il n'existe pas de compilateur C++. Le C serait certainement approprié dans ce cas, mais je pense qu'il est difficile de trouver une telle plate-forme de nos jours.

10voto

Ken Points 331

Il y a un point que je n'ai pas encore vu soulevé, et qui me semble être le plus important :

La plupart des bibliothèques que j'utilise au quotidien sont des bibliothèques C avec des liaisons pour Python, Ruby, Perl, Java, etc. D'après ce que j'ai vu, il est beaucoup plus facile d'envelopper des bibliothèques C avec 19 liaisons de langage différentes que d'envelopper des bibliothèques C++.

Par exemple, j'ai appris Le Caire une fois, et je l'ai depuis utilisé dans 3 ou 4 langues différentes. C'est une grande victoire ! Je préfère écrire un programme qui pourra être réutilisé à l'avenir, et en écrire un qui peut facilement être adopté dans d'autres langages de programmation en est un cas extrême.

Je sais qu'il est possible de lier des bibliothèques C++, mais ce n'est pas la même chose. J'ai utilisé Qt (v3 et v4) dans d'autres langues et c'est loin d'être aussi agréable à utiliser : on a l'impression d'écrire du C++ dans une autre langue, pas des bibliothèques natives. (Vous devez passer les sigles des méthodes C++ comme des chaînes de caractères !)

Le C++ est probablement un meilleur langage si vous écrivez une fonction à utiliser une seule fois, ou si vous pensez que le monde entier est en C++. Le C semble être un langage plus facile à utiliser si l'on cherche à rendre le langage portable dès le départ.

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