web-dev-qa-db-fra.com

Quelles sont les différences entre C, C # et C++ en termes d'applications réelles

Comme j’avais posté plus tôt ici , j’ai décidé de tenter ma chance dans un de ces domaines, mais compte tenu de mes centres d’intérêt en tant que développeur Web, j'aimerais connaître la différence qui existe entre eux dans leurs applications réelles.

Note éditée:

Bien que je sois développeur Web, ne laissez pas cela limiter votre réponse. J'ai 30 ans ... J'ai des années de carrière qui changent d'avance sur moi.

36
jerebear

C++ et C++ vous offrent tous deux un niveau d'abstraction plus faible qui, avec une complexité accrue, offre un accès étendu aux fonctionnalités sous-jacentes de la machine qui ne sont pas nécessairement exposées à d'autres langages. Par rapport au C, le C++ ajoute la commodité d'un langage entièrement orienté objet (temps de développement réduit) qui peut potentiellement ajouter un coût de performances supplémentaire. En termes d'applications dans le monde réel, ces langages sont appliqués dans les domaines suivants:

C

  • Logiciel au niveau du noyau.
  • Pilotes de périphériques
  • Applications où l'accès à un code ancien et stable est requis.

C, C++

  • Développement d'applications ou de serveurs pour lequel la gestion de la mémoire doit être optimisée (et ne peut pas être laissée aux solutions de récupération de place génériques).
  • Les environnements de développement qui nécessitent l’accès à des bibliothèques qui ne sont pas bien interfacées avec des langages gérés plus modernes.
  • Bien que le C++ géré puisse être utilisé pour accéder au framework .NET, ce n'est pas une transition transparente.

C # fournit un modèle de mémoire gérée qui ajoute à nouveau un niveau d'abstraction plus élevé. Ce niveau d'abstraction est plus pratique et améliore les temps de développement, mais complique l'accès aux API de niveau inférieur et pose des problèmes de performances spécifiques. 

Il est certes possible d'implémenter un logiciel extrêmement performant dans un environnement de mémoire gérée, mais il est essentiel de prendre conscience de ses implications. 

La syntaxe de C # est certainement moins exigeante (et sujette aux erreurs) que C/C++ et a, pour le programmeur initié, une courbe d’apprentissage moins profonde.

C #

  • Développement rapide d'applications client.
  • Développement serveur hautes performances (StackOverflow par exemple) qui bénéficie du framework .NET.
  • Applications qui nécessitent les avantages du framework .NET dans le langage pour lequel il a été conçu.

Johannes Rössel indique clairement que les mots-clés Pointeurs, non sécurisés et Non cochés, utilisés par C #, traversent la couche d’abstraction sur laquelle C # est construit. Je tiens à souligner que ce type de programmation est l'exception à la plupart des scénarios de développement en C # et non un élément fondamental du langage (comme c'est le cas avec C/C++).

60
RedBlueThing

C est le langage simple, le langage simple et propre qui vous fait tout faire vous-même. Cela ne vous tient pas la main, cela ne vous empêche pas de vous tirer une balle dans le pied. Mais il a tout ce dont vous avez besoin pour faire ce que vous voulez. 

C++ est le C avec des classes ajoutées, puis tout un tas d'autres choses, et encore d'autres choses. Il ne vous tient pas la main, mais vous laissera le faire par vous-même, avec l'ajout de GC, ou de RAII et de pointeurs intelligents. Si vous souhaitez accomplir quelque chose, il existe probablement un moyen d’abuser du système de gabarits pour vous en donner une syntaxe relativement simple. (plus avec C++ 0x). Cette complexité vous donne également le pouvoir de créer accidentellement une douzaine d'instances de vous-même et de les abattre toutes dans le pied.

C # incite Microsoft à améliorer C++ et Java. Des tonnes de fonctionnalités syntaxiques, mais pas de la complexité de C++. Il fonctionne dans un environnement entièrement géré, de sorte que la gestion de la mémoire est faite pour vous. Cela vous permet de vous "salir" et d'utiliser du code non sécurisé si vous en avez besoin, mais ce n'est pas le comportement par défaut et vous devez faire quelques efforts pour vous tirer dessus.

14
Eclipse

Mon opinion est C # et ASP.NET serait le meilleur des trois pour le développement qui est orienté web. 

Je doute que quiconque écrive de nouvelles applications Web en C ou C++. Cela a été fait il y a 10 ans, et il y a probablement beaucoup de code hérité encore utilisé, mais ils ne sont pas particulièrement adaptés, il semble ne pas y avoir autant d'outils (permanents), et ils ont probablement un petit actif communauté qui fait du développement Web (sauf peut-être pour le développement de serveur Web). J'ai écrit de nombreux objets COM de sites Web C++ à l'époque, mais C # est bien plus productif qu'il n'y a aucune raison impérieuse de coder C ou C++ (dans ce contexte) sauf si vous en avez besoin. 

J'écris quand même encore C++ si nécessaire, mais c'est généralement pour un petit problème. par exemple. communiquer à partir de C # via P/Invoke vers d'anciennes dll de style C - certaines choses totalement maladroites en C # étaient un jeu d'enfant pour créer un objet COM C++ en tant que pont.

La bonne chose avec C # est que vous pouvez également facilement transférer en écriture des applications Windows et Console et rester en C #. Avec Mono, vous n'êtes pas non plus limité à Windows (bien que vous puissiez être limité aux bibliothèques que vous utilisez).

Quoi qu'il en soit, tout cela est orienté Web. Si vous posiez des questions sur les périphériques intégrés, je dirais C ou C++. On pourrait dire qu'aucune de celles-ci ne convient au développement Web, mais C #/ASP.NET est assez lisse, cela fonctionne bien, il y a des tas de ressources en ligne, une énorme communauté et des outils de développement gratuits.

Ainsi, du point de vue du monde réel, en choisissant l'un des éléments C #, C++ et C requis, en règle générale, il vaut mieux rester avec C #.

5
Robert Paulson

De vos autres messages, je suppose que vous voulez apprendre une nouvelle langue pour acquérir de nouvelles compétences. Mon conseil est que la langue n’est pas vraiment importante, mais la qualité de sa communauté (des conseils, mais aussi du code existant que vous pouvez lire et apprendre) et des bibliothèques/frameworks disponibles. À cet égard, je pense que la "famille C" n'est pas le meilleur choix pour vous: les bibliothèques et les frameworks Web sont peu nombreux, ni portables, ni géniaux, et le style de code que vous pouvez étudier varie beaucoup et peut vous confondre. (Bien que C soit ma langue préférée)

Je conseillerais simplement d'apprendre le C et d'essayer de bien comprendre le concept des pointeurs, puis de passer à d'autres langages plus adaptés au Web (python ou javascript, même javascript). En outre, dans la famille C, Objective-C présente le meilleur mélange de puissance et de simplicité, à mon avis, mais est un acteur de niche.

4
Colas Nahaboo

C - un langage de programmation plus ancien décrit comme étant pratique. En tant que programmeur, vous devez dire au programme de tout faire. De plus, cette langue vous permettra de faire presque n'importe quoi. Il ne supporte pas le code objet ou différent. Donc pas de cours. 

C++ - un langage d'extension en soi de C. En C, ++ signifie incrémente 1. Ainsi, C++ est meilleur que C. Il permet un code hautement contrôlé objet ou objet. Encore une fois, un langage très pratique qui entre BEAUCOUP de détails. 

C # - Code orrient d'objet complet ressemblant au style du code C/C++. C'est vraiment plus proche de Java. C # est la dernière version des langages de style C et est très utile pour développer des applications Web.

2
Anand Kuma Arya

Pour la vitesse brute, utilisez C. Pour le pouvoir, utilisez C++. Pour la compatibilité .net, utilisez C #. Ils sont tous assez complexes au fur et à mesure que les langues évoluent; C à travers des décennies d’accumulation progressive, C++ à travers des années d’amélioration plus rapide et C # à travers la puissance de Microsoft. 

1
MarkusQ

C est le langage principal qui ressemble le plus et qui se traduit directement par le code machine de la CPU. Les processeurs suivent des instructions qui déplacent, ajoutent, combinent logiquement, comparent, sautent, poussent et sautent. C fait exactement cela en utilisant une syntaxe beaucoup plus facile. Si vous étudiez le démontage, vous apprendrez à écrire du code C aussi rapide et compact que Assembly. C'est ma langue préférée sur les micro-contrôleurs 8 bits à mémoire limitée. Si vous écrivez un programme PC volumineux en C, vous aurez des problèmes en raison de son organisation limitée. C'est là que la programmation orientée objet devient puissante. La capacité des classes C++ et C # à contenir des données et des fonctions ensemble impose une organisation, ce qui permet une opérabilité plus complexe que le C. Le C++ était essentiel pour un traitement rapide dans le passé, lorsque les CPU n'avaient qu'un seul cœur. Je commence à apprendre le C # maintenant. Sa seule structure de classe semble imposer un degré d'organisation plus élevé que le C++, ce qui devrait à terme conduire à un développement plus rapide et au partage de code. C # n'est pas interprété comme VB. Il est partiellement compilé au moment du développement, puis traduit au moment de l'exécution pour devenir plus convivial pour la plate-forme.

0
MikeZ