Le langage de programmation C est-il toujours utilisé?

96

Je suis un programmeur C # et l'essentiel de mon développement concerne des sites Web ainsi que quelques applications Windows. En ce qui concerne C, je ne l'ai pas utilisé depuis longtemps, car ce n'était pas nécessaire. J'ai été surprise par un de mes amis qui lui a dit qu'elle devait apprendre le C pour tester des emplois pendant que je l'aidais à apprendre le C #.

J'ai pensé que quelqu'un apprendrait le C uniquement à tester si un développement était effectué en C. Tous les développements liés à la conception COM et à la conception matérielle sont également réalisés en C ++. Par conséquent, l'apprentissage de C n'a pas de sens si vous devez utiliser C ++. Je ne crois pas non plus en l'importance historique, alors pourquoi perdre du temps et de l'argent dans l'apprentissage de C?

Est-ce que C est toujours utilisé dans tout type de développement logiciel ou autre?

Monomeeth
la source
46
Avez-vous déjà vu un compilateur C ++ pour les PIC?
SK-logic
195
Suis-je le seul qui est triste que quelqu'un assimile l'apprentissage à une perte de temps et d'argent?
Jetti
37
" À ma connaissance, tous les développements liés à la conception du matériel COM et du matériel se font également en C ++ ". Cela me semble que vous ne réalisez aucune interface matérielle.
Ed S.
32
Les gens oublient que les langages de haut niveau fantaisie que nous aimons tous sont souvent implémentés dans C.
David Cowden
13
@ThomasEding Langue morte? Vous avez certainement une connaissance très limitée des langages de programmation si vous considérez que C est un langage mort.
JesperE

Réponses:

214

C a l'avantage d'être un langage relativement petit , ce qui facilite l'implémentation d'un compilateur C (alors qu'un compilateur C ++ est un monstre à écrire) et facilite l'apprentissage du langage . Voir aussi l' index TIOBE , selon lequel C devance légèrement C ++.

Dans l’ordre de justification décroissant (IMO), C est encore beaucoup utilisé pour

  • Choses Embarqué
    Il est beaucoup plus facile au port d' un compilateur C à une petite plate - forme qu'il est au port d' un compilateur C ++. En outre, les défenseurs du C prétendent que C ++ "en fait trop derrière leur dos". Cependant, IMO c'est FUD.

  • Programmation de systèmes
    Encore une fois, cela est généralement dû à l'affirmation qu'il est plus facile de "savoir ce que fait le compilateur". Cependant, de nombreux programmes intégrés bénéficieraient, par exemple, de modèles et d'autres fonctionnalités de clé C ++.

  • Logiciel open source
    C'est cependant surtout un problème d'attitude: OSS a toujours préféré le C au C ++ (alors que c'est l'inverse dans de nombreuses parties du secteur). La haine irrationnelle de Torvalds pourrait bien en être la raison la plus importante sous Linux .

sbi
la source
16
C'est plus d'histoire que d'attitude. Beaucoup de ce que vous pourriez considérer comme des packages open source "de base" ont été développés à l'origine, alors que C ++ n'était pas aussi largement disponible qu'aujourd'hui et que les ressources étaient encore rares.
Blrfl
65
L’index TIOBE est une blague. Les résultats des moteurs de recherche n'ont pas de sens.
DeadMG
29
@Sedate: Que les templates provoquent généralement un gonflement du code est un mythe, remontant à l'époque des anciens compilateurs C ++. Les compilateurs modernes plieront des instances de modèles identiques. OTOH, les modèles autorisent la méta-programmation de modèles, qui exécute le code au moment de la compilation plutôt que de l'exécution, ce qui entraîne moins de code généré. En outre, ils rendent les programmes beaucoup plus sûrs (moins de casting), ce qui est souvent très important dans le domaine intégré. EC ++ a été condamné à mort par des experts en C ++ à cause de la stupidité de jeter des modèles.
sbi
18
@ James: Vous voulez dire des choses comme des abstractions efficaces, une programmation générique et une sécurité de type? Ouais, qui voudrait ça.
Xeo
11
@ JesperE En l'occurrence, j'ai changé de travail depuis que j'ai écrit cela, et je suis en train de programmer pour des périphériques intégrés. Nous utilisons le C ++, et ce que la méta-programmation STL et modèles peut faire pour vous est remarquable lorsque vous avez un matériel faible, des contraintes temps réel difficiles ainsi que des impératifs de fiabilité. (Nous travaillons sur des centrales électriques.) Oui, vous devez savoir si vous devez utiliser un std::vectorou plusieurs std::mapcodes, mais vous ne devez pas le mettre en œuvre vous-même, mais vous pouvez vous fier à des outils bien testés et très performants. et des implémentations de bibliothèques fiables offrant des abstractions élevées.
Sbi
119

C est beaucoup utilisé dans la programmation de matériel embarqué où les ressources sont rares.

Le noyau Linux est écrit en C car, selon Linus Torvalds, le C ++ est un langage horrible .

Joonas Pulakka
la source
14
Je pense qu'une grande partie du noyau Windows est aussi en C. Et beaucoup de systèmes hérités.
Coder
14
Pour être complet, Linus a essayé le C ++ dans le noyau. C'était plus un problème qu'un avantage. Quoi qu'il en soit, le développement du noyau est un sujet très spécifique, cela ne signifie pas que C ++ est mauvais en général.
deadalnix
75
Selon d' autres , l'argumentation de Linus est horrible.
sbi
36
Les arguments de Linus peuvent être ou ne pas être valides, mais le noyau Linux est toujours écrit en clair C :-)
Joonas Pulakka
15
Linus est un git.
ubiyubix
94

Toutes les langues modernes que j'ai vues peuvent interagir avec C:

  • C ++
  • Java
  • C #
  • Python
  • Haskell
  • Objectif c

La nécessité d'interagir avec C découle de:

  • C ayant un ABI simple
  • C être autour depuis longtemps

Cela signifie que puisque ces langues peuvent communiquer avec C, elles peuvent:

  • tirer parti de ses bibliothèques
  • communiquer entre eux par C (par exemple, Clang est écrit en C ++ mais offre des liaisons Python accrochées à son interface C).

Et je parierais que tous comptent sur C pour leurs durées d’exécution (à moins qu’ils ne s’assemblent en assemblée? Douteux).

C est la Lingua Franca des langages de programmation et l’un des plus simples (en termes d’ABI) qui ne soit pas lié à une architecture spécifique (comme l’assemblage en est un), il faudra un changement majeur pour s’en débarrasser.

Matthieu M.
la source
45

À mon avis, il s'agit d'une question à très courte vue s'apparentant à "Mes amis et moi écoutons du reggae. Quelqu'un écoute-t-il encore le rap?".

Chaque langue a son utilisation. Différentes langues ont définitivement leurs niches. Mais poser des questions sur C! Je suis sûr que moins de gens utilisent quotidiennement C # que C (du point de vue totalement biaisé du travail dans un magasin où personne n’utilise C #).

Google rapide à la recherche sur la popularité relative des langues.
Je suis sûr que rien de tout cela ne fait autorité, mais nous pouvons l'utiliser pour voir les tendances:

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
http://langpop.com/

Même en regardant SO ratio de question sur les balises:
https://stackoverflow.com/tags

  • C #: 209845
  • 16 autres tags
  • C: 38790

C est donc le sujet le plus populaire de SO (il existe beaucoup d’autres langues).

Remarque: L'indice TIOBE ci-dessus, constamment mis à jour depuis plus d'une décennie (et dont certaines données remontent à trois décennies), est censé mesurer le nombre d'ingénieurs travaillant dans chaque langue (bien que je ne sache pas à quel point c'est exact). Parmi les 10 langues les plus utilisées, à l'exception de Java / Visual Basic, cela correspond à ce que savent les utilisateurs de mon magasin (bien que nos ratios soient légèrement différents, car notre échantillon est beaucoup plus petit).

Loki Astari
la source
1
Cette réponse m'embrouille ... vous parlez de C #, puis vous affichez les balises SO question, mais rien de tout cela n'a vraiment à faire avec l'utilisation de C. La popularité (en particulier sur langpop, où ils utilisent les requêtes des moteurs de recherche pour déterminer la popularité) ne montre pas vraiment l'utilisation d'une langue dans le monde moderne, mais simplement dans les recherches modernes effectuées dans une langue. Vous devez prendre en compte, pour les recherches, que C est fréquemment utilisé dans les universités pour les classes de niveau inférieur afin d’augmenter le nombre de requêtes et les publications SO.
Jetti
3
@ Jetti: C'est pourquoi je dis explicitement: I am sure none of this is authoritative but we can use it to see trendsMais je ne suis pas d'accord avec votre deuxième déclaration. C n’est plus la langue principale enseignée dans les instituts d’enseignement supérieur (le cas échéant, le nouveau groupe de diplômés ne serait pas aussi inutile). Les gens ont tendance à apprendre Java / C # sharp de nos jours. De plus, le rapport Tiobe concerne les travaux et non les requêtes.
Martin York
En regardant en arrière, il semble y avoir un choix de mots pauvres de ma part. Je ne parlais pas des classes de petit nombre (classes de début), je voulais dire des classes de systèmes (architecture informatique) où C est utilisé.
Jetti
4
Le nombre de balises SO ne définit pas la popularité de la langue en général, il indique simplement sa popularité entre les utilisateurs de SO .
Ed S.
4
@Ed S. évidemment. Mais la question ne concerne pas la popularité. C'est à propos de l'existence de C en tant que langage. Le nombre de balises SO nous montre que ce n'est certainement pas une langue morte. Le fait que C soit dans le top 2 des autres sites n'en fait pas la première / deuxième langue la plus utilisée. Mais son existence dans le top 10 est un marqueur important qu'il n'est pas mort. Bien sûr, rien de tout cela ne prouve que de puissants indicateurs indiquent que C est toujours utilisé activement.
Martin York
23

Vous devrez peut-être utiliser C lorsque vos ressources sont limitées et que vous n’avez pas besoin de fonctionnalités orientées objet.

De nombreux logiciels utilisés aujourd'hui sont encore écrits en C, sans parler des pilotes matériels.

Selon l’ indice Tiobe , C est toujours la langue la plus utilisée.


Comme suggéré par tcrosley, vous voudrez peut-être examiner cette question connexe .


Vous devriez également rechercher des articles connexes sur les différences entre C et C ++, comme ce wiki ou ce exemple.

Jose Faeti
la source
4
ahem !! c'est un bon point. Je n'ai jamais pensé que "les capacités de programmation orientée objet ajoutent un surcoût au langage". Merci d'avoir clarifié ce point. Maintenant, je peux comprendre, où C est en avance sur d’autres
Pankaj Upadhyay
7
@Pankaj C ++ n’ajoute généralement pas forcément beaucoup de temps d’exécution, le principe selon lequel le langage est complexe consiste à "ne pas payer pour ce que vous n’utilisez pas" - si vous n’utilisez pas d’exceptions, les exceptions ne le font ralentissez ou ajoutez de la taille à votre code. Le compilateur est plus grand et plus complexe cependant
Martin Beckett
2
Voir C dans le champ intégré, voir aussi cette question et ses réponses: programmers.stackexchange.com/questions/84514/…
tcrosley
6
Vous n’avez jamais réellement besoin de capacités de POO, cela fonctionne simplement bien dans certains scénarios.
Ed S.
2
@ Jose Faeti: Mon patron serait d'accord parce que mon patron est un gars expérimenté et rationnel. Il n'adhère pas à la programmation religieuse.
Ed S.
20

On dirait que vous essayez de vous convaincre que C est inutile et peut donc être ignoré. Décomposons votre question:

"J'ai pensé que quelqu'un n'apprendrait le C pour tester que s'il y avait du développement en C."

Non, il y a de nombreuses raisons pour apprendre le C. Même si vous ne le saviez pas, j'évitais tout de même d'utiliser de tels énoncés, en particulier avec la logique circulaire. Évidemment, il faut connaître la langue dans laquelle le code est écrit pour pouvoir le tester / le corriger correctement, mais cela suppose que la langue est toujours utilisée comme telle et qu’elle est vraie pour toutes les langues et pas seulement C.

"A ma connaissance, tous les développements liés à la conception COM et à la conception matérielle sont également réalisés en C ++."

C'est inexact.

"Par conséquent, l'apprentissage de C n'a pas de sens si vous devez utiliser le C ++. Je ne crois pas non plus en l'importance historique, alors pourquoi perdre du temps et de l'argent en apprenant le C?"

C'est la logique la plus discutable de toutes. Tout d’abord, l’importance historique est une chose à laquelle il faut croire, car si vous le saviez, vous sauriez que C est un sous-ensemble du C ++ et que, de ce fait, le savoir C peut vous aider à devenir un meilleur programmeur C ++. Bien sûr, C a également influencé la plupart des langues qui l'ont suivi, de sorte que les avantages ne s'arrêtent pas là. En outre, comme C est si important, il ne peut être considéré comme n’ayant qu’une importance historique. Il est encore largement utilisé et ne peut donc pas être relégué à une position secondaire comme celle-là. Vous pouvez faire valoir que ce n'est pas un langage que chaque programmeur doit utiliser et avoir une connaissance approfondie, ce serait juste, mais veuillez ne pas développer votre argument en affirmant que vous ne croyez pas en quelque chose sans d'abord en examiner les véritables mérites.

GonzoKnight
la source
7
C est un sous-ensemble de C ++ , est-ce ce que vous vouliez dire? . C n'est pas un sous-ensemble de C ++; En fait, ils sont assez différents. Oui, C ++ est une amélioration de C, ou parfois appelée C avec classes et POO , mais dire que C est un sous-ensemble, ne justifie pas
Pankaj Upadhyay
7
C ++ est principalement un sur-ensemble d'une ancienne version de C, et C a pris une direction quelque peu différente depuis. Certains aspects des langages vont dans des directions largement parallèles, d'autres non (et C ++ a beaucoup d'autres choses).
Donal Fellows
Je suis d’accord en votant pour la clarification de ce fait, tous les programmes C valides ne sont pas des programmes C ++ valides, c’est-à-dire que C ++ n’est pas un sur-ensemble de C. Cependant, c’est un sur-ensemble de la façon dont C était sur le point de prendre la décision de le faire. un sur-ensemble, comme l'ont mentionné les Donal Fellows. Cela n'a tout simplement aucun sens de dire que c'est toujours le cas, mais ce n'est plus vrai.
Joshua Hedges
16

En plus des systèmes embarqués, la plupart des langages plus récents ont un moyen de s’interfacer avec C. Lorsque vous écrivez une bibliothèque que vous souhaitez utiliser facilement dans toutes ces langues, C est un choix évident. C ++, bien qu'il puisse également s'interfacer avec certains langages (tels que Python (CPython uniquement)), le C ++ ne peut pas s'interfacer avec un plus grand nombre de langages en raison de certaines de ses fonctionnalités (changement de nom en particulier, mais les modèles n'aident pas le problème). C ABI est l’un des plus faciles à utiliser (je sais que vous pouvez écrire en C ++ et utiliser extern "C" pour l’interface. Cela m’importe peu).

Il présente également l'avantage que C et C ++ sont vraiment les meilleurs langages pour la programmation système et que les temps de compilation en C sont beaucoup plus rapides. Les temps de compilation C ++ sont visiblement les pires de tous les langages que j'ai utilisés.

Bien qu’il existe d’autres langages qui souhaitent devenir le langage système le plus populaire (je connais D en particulier), une grande majorité des logiciels sont écrits en C / C ++. Les langages comme D exigent que quelqu'un crée un wrapper autour de la bibliothèque C au lieu de l'utiliser directement (comme vous le feriez avec C ++).

Jsternberg
la source
D peut appeler le code C directement, tout comme C ++. Tout ce dont vous avez besoin si le prototype de fonction (encore une fois, tout comme C ++). Vous écrivez juste extern(C)en D, alors qu'en C ++ vous écrivezextern "C"
Peter Alexander
@ Peter Alexander Je connais extern (C) en D. C'est ce à quoi je faisais allusion lorsque j'ai dit fichier wrapper. Vous ne pouvez pas inclure directement l'en-tête C (ce que vous pouvez faire en C ++, en supposant que l'en-tête C utilise extern "C" et comporte les blocs #ifdef __cplusplus, ce que la plupart font). Il y a alors d'autres incompatibilités entre simplement utiliser extern (C) (en particulier la façon dont les chaînes sont gérées. À ma connaissance, elles n'ont pas de terminateur nul dans D. Il faut donc modifier spécialement le tableau en le passant à C).
Jsternberg
11

consultez langpop.com , en particulier les graphiques de Freshmeat et Google Code. Cela montre que C est toujours en avance.

C est toujours populaire sur les systèmes où vous devez vous rapprocher du métal (système intégré) et des applications gourmandes en performances.

tehnyit
la source
4
NE PAS OUVRIR cette URL! Le site Web n'existe plus et l'URL redirige vers des pages spammy gênantes.
Nikolay Suvandzhiev
11

Je l'utilise presque tous les jours en développement pour iPad / iPhone. De nombreuses bibliothèques sont écrites en C et n’ont pas d’équivalent Objective-C. Alors oui, il est toujours utilisé et par l’un des appareils les plus récents du marché.

Avec C, vous pouvez programmer de nombreux systèmes embarqués, petits et pratiques, et le seront probablement dans les années à venir (vous ne perdez pas de temps ni d'argent à l'apprendre)

Valentin Radu
la source
2
"Objective-C est encore jeune", il date du milieu des années 1980 et a à peu près le même âge que le C ++. La plupart des personnes qui l'utilisent ne l'ont pas rencontré avant 2007, cependant.
Certes, ce que je voulais dire, c’est qu’il existe de nombreuses bibliothèques C qui n’ont pas d’équivalent dans Objective-C pour iOS. En effet, la langue elle-même n’est pas jeune (vérifiée avec Wiki). Merci d'avoir fait remarquer cela.
Valentin Radu
7

Généralement, pour le système intégré, C est encore largement utilisé.

Cette question donne un autre exemple.

L’ indice Tiobe , qui tente de classer la langue par popularité / usage , place systématiquement C au premier rang.

Xavier T.
la source
2e place (après Java).
Martin York
7
Il est intéressant de noter que C ++ et Java semblent être à la baisse en popularité ces 10 dernières années, alors que C reste plus ou moins statique.
Paul R
7

Portabilité.

Faites une liste de tous les systèmes qui, à votre avis, exécuteront du code C, puis une liste similaire pour toutes les autres langues de votre choix.

Si vous apportez la même réponse que moi, alors la conclusion est oui.

tidbeck
la source
5

Eh bien, je pense que C est le langage le plus puissant pour les raisons suivantes!

1) AT first C, C’est un langage système (c’est-à-dire qu’il peut être utilisé pour faire de la programmation de bas niveau avec une exécution minimale ou inexistante).

2) Vitesse de l'application résultante. Le code source C peut être optimisé beaucoup plus que les langages de niveau supérieur car le jeu de langages est relativement petit et très efficace. C’est à peu près aussi proche que possible de la programmation en langage assembleur, sans programmation en langage assembleur. et vous pouvez même utiliser ensemble et C ensemble!

3) C a quelle est son application dans la programmation du micrologiciel (matériel). Cela est dû à sa capacité à utiliser / travailler avec l’assemblage et à communiquer directement avec les contrôleurs, processeurs et autres périphériques.

4) C est un bloc de construction pour de nombreuses autres langues actuellement connues. Recherchez l'historique de C et vous constaterez qu'il existe depuis un certain temps (les langages de programmation le sont quand même). Jetez un coup d'œil à Python, par exemple, un langage de programmation de haut niveau entièrement orienté objet. Il est écrit en C (peut-être aussi en C ++). Cela vous dit si vous voulez savoir ce qui se passe sous le capot dans d'autres langues; Comprendre C et son fonctionnement est essentiel.

Un langage d'application est utilisé pour la programmation de haut niveau, par exemple l'écriture d'un traitement de texte ou d'un jeu. Des exemples de langages d'application sont Java, C #. La raison en est qu’elles contiennent un ramasse-miettes, une saisie automatique, une validation au moment de l’exécution, etc. - l’accent étant mis sur la productivité.

Un langage système est utilisé pour la programmation de bas niveau. Par exemple, un micro-contrôleur, un pilote et un noyau de système d'exploitation. Les exemples incluent assembly, C. Ils requièrent peu ou pas d’exécution pour exécuter le code directement sur le matériel, et le programmeur a pour objectif principal de contrôler directement le matériel.

Dans l’ensemble, il est en déclin en tant que langage d’applications, mais reste fort en tant que langage système.

niko
la source
1

Oh oui, c'est utilisé. Je travaille dans le domaine du traitement de paquets en réseau. Je suis allé dans deux sociétés différentes où nous traitons des paquets de réseau. Nous travaillons donc au niveau Ethernet ou IP, et non au-dessus de TCP.

Fait intéressant, dans les deux sociétés, C a été choisi plutôt que C ++. Dans l’une des sociétés, l’un des deux produits était construit sur le noyau Linux, alors que l’autre était construit dans l’espace utilisateur Linux. Le produit du noyau utilisé évidemment en C, le noyau Linux étant programmé en C, ils ont également choisi d'utiliser le C pour le produit en espace utilisateur. Les deux produits ont été développés à partir de l’an 2000 environ (le produit du noyau un peu avant 2000 et le produit de l’espace utilisateur un peu après 2000).

Dans l'entreprise où je suis allé après cela, le produit a été construit en C, pas en C ++. Il s’agit en réalité d’une poursuite du projet du milieu des années 90, bien qu’étant donné les exigences récentes en matière d’amélioration des performances, il a été décidé que tout serait réécrit. Nous avions une option pour sélectionner C ++ en raison de cette réécriture, mais nous ne l'avons pas fait.

Dans le domaine du traitement de paquets en réseau, les performances comptent beaucoup. Je souhaite donc implémenter ma propre table de hachage ayant des performances supérieures à celles des tables de hachage existantes. Moi, et non l'auteur de la table de hachage, je suis celui qui sélectionne la fonction de hachage à utiliser. Peut-être que je veux la performance et aller pour MurMurHash3 . Peut-être que je veux la sécurité et aller pour SipHash . Les allocateurs de mémoire sont évidemment personnalisés. En fait, toutes les structures de données importantes que nous utilisons ont été implémentées sur mesure pour des performances optimales.

Bien que rien n'empêche d'utiliser le C ++, c'est généralement une mauvaise idée. Une seule exception levée par paquet laissera tomber le taux de traitement des paquets à des niveaux inacceptables! Nous ne pouvons donc pas utiliser les exceptions de C ++. Bien trop lent. Nous utilisons déjà un type de code C orienté objet en implémentant des structures de données en tant que structures, puis en implémentant des fonctions opérant sur ces structures. C ++ permettrait d’avoir des fonctions virtuelles, mais les appels de fonction virtuels tueraient les performances s’ils étaient utilisés partout. Il est donc préférable d’être explicite et d’avoir un pointeur de fonction si des appels de fonction virtuels sont nécessaires.

C ++ fera beaucoup de choses derrière votre dos: allocation de mémoire, etc. Par contre, en C, cela n'arrive pas d'habitude. Vous pouvez écrire une fonction qui alloue de la mémoire, mais il ressort généralement de l'interface de la fonction que l'allocation est en cours.

Pour illustrer le type de micro-optimisation que vous pouvez effectuer lors de la programmation en C, consultez la macro container_of du noyau Linux. Bien sûr, vous pouvez utiliser container_of dans le code C ++, mais qui fait cela? Je veux dire, cela est tout à fait acceptable dans la plupart des programmes C, mais les programmeurs C ++ typiques proposeraient immédiatement autre chose, telle qu'une liste chaînée qui alloue les nœuds de liaison en blocs séparés. Nous ne le voulons pas car chaque bloc de mémoire alloué est mauvais pour la performance.

Peut-être que la seule chose qui nous serait bénéfique en C ++ est que C ++ autorise la métaprogrammation des modèles, ce qui signifie que vous pouvez parfois éviter les appels de fonctions virtuelles tout en conservant un paramètre de fonction et permettre au compilateur de mettre les fonctions en ligne. Cependant, la métaprogrammation des modèles est compliquée et nous avons réussi à répondre à toutes les exigences en C, de sorte que les avantages de cette fonctionnalité en C ++ ne sont pas si critiques.

Dans l'une des sociétés, nous avions un langage compilé personnalisé dans lequel une partie des fonctionnalités était implémentée. Devinez quel était le langage cible du compilateur? Assemblée? Non, nous devions prendre en charge les architectures 32 bits et 64 bits. C ++? Vous plaisantez sûrement. Évidemment, c'était C avec goto calculé par GCC . Ainsi, le langage personnalisé a été compilé en C (ou en fait la variante gcc de C qui prenait en charge la fonction goto calculée), et le compilateur C a produit

juhist
la source
0

J'utilise toujours C quotidiennement et l'une des principales raisons est l'interopérabilité avec d'autres langages et un SDK conçu pour être utilisé par des plugins construits par tous les types de compilateurs dans différentes langues.

Je ne peux pas écrire une API C ++ qui utilise des classes avec des constructeurs, des destructeurs et des vtables, une surcharge de fonction, des exceptions, etc. pouvant être utilisées à partir de Lua, C #, Python, C, etc. Sans parler d'un plugin C ++ écrit avec différents compilateurs et les paramètres de notre propre.

Je ne peux pas écrire un SDK C # pouvant être appelé à partir de Python, par exemple, ni un SDK Python pouvant être appelé à partir de C #.

C est le seul langage qui me permet de créer une API pouvant être appelée à partir de n’importe lequel de ces langages. Cela dit, j’utilise souvent le C ++ pour implémenter ces interfaces C (bien que je les implémente parfois en C).

En outre, je trouve parfois que C est le langage le plus simple à utiliser, par exemple pour les structures de données de bas niveau et les allocateurs de mémoire. Toute la sécurité de type supplémentaire que vous gagnez en C ++ n’aide en rien si vous écrivez un allocateur de mémoire conçu pour regrouper des bits et des octets alignés. Et contre le riche système de types et la gestion des exceptions de C ++, il n’est pas facile de mettre en place vos propres structures de données - il suffit de regarder l’effort nécessaire pour écrire une structure de données aussi triviale que std::vectorsi vous souhaitiez la rendre exempte d’exceptions et éviter d’appeler. ctors et dtors sur des éléments que vous n'avez pas insérés dans le conteneur (je parle en tant que tel qui a implémenté toute la bibliothèque standard C ++). Lorsque la mise en œuvre d'un réseau pouvant être développé est très difficile, imaginez le travail nécessaire pour mettre en œuvre un système BVH de qualité production.

Je préfère le C ++ au C lorsque je veux utiliser des structures de données existantes ou implémenter des structures de niveau supérieur en utilisant celles existantes, mais si je vais implémenter une structure de données de bas niveau au cœur d'un moteur qui ne sert à rien. Avec les structures de données existantes, C rend cela beaucoup plus facile à faire avec son système de types ultra simpliste qui vous permet de ne faire que des memcpychoses ici et memmovelà, mallocun bloc contigu et tout reallocce qui est là, sans vous soucier des constructeurs, des destructeurs et des exceptions lancés.

utilisateur204677
la source