Le C ++ moderne remplace-t-il le C #? Est-ce que Microsoft pousse les développeurs à adopter le C ++? [fermé]

91

J'entends parler de la popularité du C ++ moderne et certains parlent de la migration vers C ++ à partir de C # ou d'autres langages de type C.

Je connais les fonctionnalités de C ++ 11, mais j'aimerais connaître votre expérience, en particulier celle de développeurs qui ont migré de C # vers C ++.

Plus important encore, est-ce que Microsoft incite les développeurs à utiliser le C ++? Si oui pourquoi?

Amir Karimi
la source
16
Je pense que le langage C ++ a toujours été un langage plus largement utilisé car il est plus bien établi et facilement portable que le langage C #. Je ne pense pas que cela remplace C #. Pour les applications d’entreprise basées sur Windows, le langage C # sera toujours très demandé en tant que langage facile à utiliser . C ++ n'est jamais vraiment parti. Il vient d'avoir une sorte de résurgence récemment.
KChaloux
2
J'espère que non. Java et C # ont été une bénédiction pour les développeurs et ils évoluent encore.
Jesse C. Slicer
4
C ++ et C # ne sont que des outils : choisissez le meilleur pour un travail particulier. Par exemple, si vous voulez écrire du code multiplate-forme, vous pouvez utiliser C ++; si vous voulez de petites applications qui ne nécessitent pas d'installation d'exécution .NET, vous pouvez utiliser le langage C ++ (avec une liaison CRT statique); si vous souhaitez développer un outil d'interface graphique pour Windows de manière RAD, vous pouvez utiliser C # et WinForms; etc.
M.C64
6
C'est une bonne question, peut-être besoin d'une reformulation. Ce n’est pas un autre langage A par rapport au langage B. C’est plutôt ce que sont les positions de Microsoft, pourquoi cela a-t-il changé et où vont-ils parce que la réalité est que la SEP est assez grosse pour qu’ils aient au moins une influence quand ils exercent une influence bouger. Et oui dans ce cas, ils influencent définitivement.
DXM
9
Faisons en sorte que tout le monde soit civil. La grossièreté ne sera pas tolérée.
maple_shaft

Réponses:

95

Oui, vos soupçons sont corrects. Microsoft pousse le C ++ à revenir et à devenir plus populaire.

Je ne le trouve pas pour le moment, mais j’ai vu il y a quelque temps un exposé présenté par l’un des gros joueurs de Microsoft. L’ensemble était destiné aux développeurs et portait sur le déploiement de Windows 8 et en particulier de WinRT (le remplacement du framework .NET également). comme API Win32).

Il avait une chronologie dans laquelle il expliquait comment diverses pressions influaient sur la technologie à la mode à certains moments. Donc, au début, les gens voulaient de la vitesse, ils ont donc tous codé en C / C ++ (deux langages distincts). Au fur et à mesure que le matériel informatique devenait plus rapide, l'accent a été mis sur la vitesse d'exécution plutôt que sur la vitesse de développement. Les langages de niveau supérieur sont donc devenus beaucoup plus populaires.

Cependant, l’accent est de plus en plus mis sur les ordinateurs mobiles et basés sur ARM (Windows 8 est la première version de Windows à être compilée pour ARM) et beaucoup pensent qu’ils vont devenir beaucoup plus populaires et, pour certains, remplacer complètement le poste de travail. Donc, l'accent est mis (du moins aux yeux de Microsoft) sur le C ++, car nous tenons maintenant à la vie de la batterie. Code de niveau supérieur = plus d'instructions = plus de jus requis.

Pour prendre en charge cette transition vers le C ++, ils ont introduit une toute nouvelle API de programmation Windows 8, appelée WinRT (la dernière fois que j'ai vérifié, c'était de toute façon le nom). Cette API suit le thème du .NET Framework dans le cadre des fonctionnalités qu’elle fournit, mais elle sera disponible pour tous ceux qui codent en C ++ (via les interfaces COM), en C # ou même en Javascript pour ceux qui souhaitent écrire des applications HTML 5 / Javascript. Ils apportent également la technologie XAML (la technologie utilisée par WPF, leur plus récente infrastructure d'interface utilisateur) en C ++.

Donc, pour moi, cela indique en quelque sorte que Microsoft met davantage l'accent sur le C ++ que par le passé.

MISE À JOUR # 1:

Comme je viens juste de recevoir un badge "bonne réponse", j’ai pensé que je devrais peut-être revenir et a) clarifier quelques points et b) contenter la police qui vérifie les faits, car comme nous le savons tous sur les forums technologiques, tout ce qui est inexact pourrait entraîner des guerres. qui durent des années.

  1. WinRT ne remplace pas le framework .NET, mais constitue une autre alternative aux développeurs MS Windows. MS encourage vivement les utilisateurs à aller dans cette direction. Il semble (maintenez vos flammes si cela n’est pas précis à 100%) que WinRT était principalement destiné aux applications d’interface utilisateur moderne, bien que les applications de bureau classiques puissent également en tirer parti. Cela dit, MS insiste vivement pour que les gens passent à l'écriture a) des applications d'interface utilisateur modernes et b) commencent à utiliser WinRT de manière à ce que le pourcentage de personnes utilisant le framework .NET se modifie.

  2. C ++ ne remplacera JAMAIS les langages de niveau supérieur tels que C # ou Python. Tout comme ces langages ne remplaceront JAMAIS le C ++. C'était probablement la partie la plus controversée de la question d'OP. Mais tout est question d'équilibre et les faits sont les suivants:

    • La communauté C ++ (dont la grande partie est MS) milite pour un retour en force afin de positionner le C ++ comme un bon langage pour les périphériques de faible puissance, dont la part de marché a augmenté de façon folle ces derniers temps. Si vous ne me croyez pas, recherchez la série de discussions "GoingNative" qui a débuté l'année dernière.
    • Avec tous les efforts et l’influence de Microsoft, l’usage de C ++ augmentera certainement, alors que C # pourrait laisser tomber quelque chose. C’est ce que MS cherche à faire et, comme je l’ai dit dans les commentaires ci-dessus, lorsque les États membres mettent leur capital derrière une idée, ils transfèrent une grande partie de l’industrie. Je vais probablement obtenir une réponse d'un type qui dira "Quelle industrie, j'ai toujours été sous Linux" et à cela, ma seule réponse est: réveille-toi! Oui, il existe d’autres systèmes d’exploitation, mais la majorité du marché des ordinateurs de bureau, qu’il s’agisse de particuliers ou d’entreprises, est Windows et tout développeur sérieux qui souhaite maximiser la valeur de son temps serait très ridicule de ne pas cibler cette partie du marché des ordinateurs de bureau.

Donc, pour conclure: Oui, MS pousse le C ++ à revenir, de sorte que sa popularité va probablement augmenter. Non, C ++ ne remplacera jamais C #.

Mise à jour # 2:

Je ne sais pas pourquoi mais la communauté technique a tendance à voir les choses en termes très absolus noir / blanc lorsque la réalité est pleine de nuances de gris. Ceci est une réponse à plusieurs nouveaux commentaires qui ont été ajoutés à ce post:

  1. Le framework .NET ne disparaîtra pas de sitôt (ou jamais). Presque toutes les technologies que Windows possédait depuis les années 90 existent toujours, sous une forme ou une autre. Donc, pour ceux qui sont si attachés au .NET Framework: a) ne vous inquiétez pas de sa disparition et b) arrêtez de vous disputer en sa faveur, comme si votre vie en dépendait, votre API est sûre.

  2. WinRT réimplémente de nombreuses fonctionnalités fournies auparavant par les API Win32 et .NET Framework. Les personnes qui veulent cette fonctionnalité auront le choix si elles veulent utiliser WinRT, le framework .NET ou continuer avec l'API Win32 (ce n'est pas mort non plus). Si WinRT ne prend pas en charge la création facile d'applications Web aujourd'hui, il y a de fortes chances qu'il les prenne en charge à l'avenir.

La position annoncée par Microsoft est que WinRT est un grand framework qui donne à Microsoft une chance de commencer avec une table rase et de construire une API utilisant les leçons apprises dans l'API Win32 et le framework .NET lui-même. J'ai essayé de chercher cette vidéo et je ne le trouve toujours pas, mais l'une des choses mentionnées par l'orateur est qu'il y a certaines zones du .NET Framework qui auraient pu être définies mieux / plus simple / plus propre et WinRT expose cette même fonctionnalité. dans cette nouvelle interface de nettoyage.

DXM
la source
7
Était-ce le discours de Herb Sutter à C ++ et au-delà, intitulé "Pourquoi C ++?" Il y a une vidéo de celle-ci sur Channel 9, même si j'ai du mal à y accéder pour le moment, probablement parce que Redmond organise un énorme événement en streaming. Votre logique a du sens, mais ce type d’énoncé doit s’appuyer sur quelques références car cela représenterait un changement stratégique majeur pour Microsoft et tous ceux qui développent des logiciels avec les produits Microsoft.
Robert Harvey
13
WinRT n'est pas un remplacement pour .NET. Gardez vos faits en échec s'il vous plaît.
Euphoric
4
@Euphoric: En d'autres termes, le framework .NET n'a jamais remplacé l'API Win32. En même temps, lorsque C # est sorti, de nombreuses personnes sont passées au système et ont complètement oublié de faire des appels de fonction de style C dans des DLL Windows. MS pousse pour le même commutateur maintenant. Alors oui, le framework .NET continuera d'exister sous le capot de WinRT et vous pouvez toujours utiliser le framework .NET, mais MS pousse les gens à passer au nouveau framework.
DXM
21
@gbjbaanb - C'est 100% faux. Tout d'abord, ALL .NET était toujours un très bon wrapper pour la bibliothèque Win32. Deuxièmement, il n'y a que des différences mineures entre le Fullprofil .NET et 'WinRT'. Le profil .NET, les principales différences sont de nombreux éléments mal implémentés il y a 10 ou 15 ans ont été supprimés et remplacés par un code mieux conçu. Jusqu'à ce qu'ils se débarrassent de la bibliothèque Win32 tous ensemble. NET est là pour rester. Votre commentaire révèle un manque de connaissances COMPLET et TOTAL en ce qui concerne les langages .NET et C #.
Ramhound
6
Sans oublier que pour les applications Web, .NET est excellent. S'il s'agissait d'un «remplacement», ce serait pour les applications de bureau et non pour les applications Web.
George Stocker
22

Non, Windows 8 consiste à utiliser la langue dont vous avez besoin pour (ou savoir) faire le travail. JavaScript, les langages .Net (C #) et C / C ++ sont tous pris en charge de manière égale.

Rien n'est en train d'être remplacé et, finalement, c'est aux développeurs de décider. Cependant, WinRT facilite les choses pour une meilleure durée de vie de la batterie.

L'exception concerne les jeux pour lesquels C ++ bénéficie d'un soutien accru, en particulier sur Windows Phone 8, alors que les langues gérées ne prennent en charge aucun support natif (autrement dit, aucun xna).

Daniel Little
la source
1
+1 Microsoft cherche désespérément à faire adopter Windows 8 sur le marché des smartphones et des tablettes. Apple tire plus de revenus de l'iPhone que de Microsoft. L’un des obstacles est qu’il existe très peu d’applications pour téléphones / tablettes Windows par rapport aux plates-formes établies. Ils veulent donc permettre à quiconque de créer une application dans leur langue préférée. C #, C ++ ou JavaScript.
MarkJ
Je ne sais pas pourquoi ils ont décidé de supprimer le support natif de c / c ++ à partir de Windows Phone 7. Depuis ce jour, Windows + Windows Mobile est passé de 90% de la plate-forme principale de notre société à 10% d'importance. 10%, ce n'est que grâce aux meilleurs outils de développement (visual studio), sinon nous ne fabriquons plus de produits, même pour Windows Desktop.
Pavel P
1
@Pavel Je ne suis pas sûr de ce que vous dites là-bas.
Daniel Little
@Pavel - ils ont supprimé le code natif de WinPhone7, puis le code géré de WinPhone8. Peut-être que vous pouvez revisiter la plate-forme maintenant, ou simplement l'ignorer jusqu'à ce que / s'il gagne une part de marché beaucoup plus grande.
gbjbaanb
19

Je connais les fonctionnalités de C ++ 11, mais j'aimerais connaître vos expériences.

Il est risible de penser que les gens préfèrent le C ++ au C # (ou à peu près tout autre produit de substitution post-1990 [non-php]) pour la programmation générique . C ++ 11 ajoute de bons éléments manquants, mais il s'agit toujours de clouer les jambes à un chien .

Le C ++ a de bonnes niches et reste la meilleure option sur certaines plates-formes avec un support limité du compilateur. Mais non, le C ++ moderne n’est pas près de remplacer quoi que ce soit, sauf peut-être un C ++ obsolète et cassé.

Telastyn
la source
31
Lisez ce que vous écrivez. Vous affirmez carrément que l’utilisation de C ++ pour la programmation générale en C # est risible . Est-ce sincèrement un fait auquel vous croyez, ou s'agit-il simplement de votre propre opinion exagérée?
Zxcdw
38
@zxcdw - Si j'ai 100 problèmes de programmation généraux, j'en aurai environ 90 résolus plus rapidement, mieux, avec moins de bugs utilisant C #, Java, Python, Scala ou ... Et c'est généreux. C'est le point de vue commun de presque tous les programmeurs professionnels que je connais; même ceux qui utilisent le C ++ comme langue principale.
Telastyn
33
@zxcdw: Je suis un développeur C ++ inconditionnel. Je pratique le C ++ depuis plus de 15 ans et travaille principalement sur des applications back-end nécessitant le C ++. J'ai parcouru le STL et la moitié du Boost. Au grand dam de mon équipe, j'ai introduit la métaprogrammation de modèles dans quelques endroits qui, à mon avis, le méritaient. Ce que j'essaie de dire, c'est que j'aime le C ++ et que je travaille avec. Cela dit, je suis d’accord avec Telastyn, si j’ai un problème général qui n’exige pas ce que le C ++ a à offrir, je préférerais utiliser le C # ou même le Python. Ce sont des langues de niveau supérieur et vous obtenez simplement des résultats plus rapidement. Ceci est vrai au moins pour Win devs
DXM
5
@MadKeithV - Si je ne travaillais pas sur une application C # exécutée sous OSX, iOS et Android, je pourrais peut-être donner un peu plus de poids à cet argument multiplate-forme. Même en ignorant cela, les langages non-C # que j'ai énumérés sont presque toujours de meilleures options que le C ++ lorsque multiplate-forme est une préoccupation majeure. C ++ 11 ne fait pas beaucoup pour repousser ces options.
Telastyn
14
Si tout ce que vous avez est un marteau, tout ressemble à un clou. Les améliorations apportées à C ++ 11 ne réduiront pas l'impact généralisé de C # et d'autres langages similaires, mais peut-être plus agnostiques sur les plates-formes, mais maintiendront ce navire à flot. Le plus gros argument de vente de C ++ 11 reste qu'il peut être le langage de bout en bout pour un système qui fouille dans les profondeurs d'un système, tout en offrant la possibilité de bricoler avec des abstractions d'ordre supérieur.
JustinC
2

DXM a écrit:

Donc, l'accent est mis (du moins aux yeux de Microsoft) sur le C ++, car nous tenons maintenant à la vie de la batterie. Code de niveau supérieur = plus d'instructions = plus de jus requis.

Selon ces mots, choisir Java comme langage / framework principal pour Android de Google était une erreur. Ce n'était pas. Un langage de niveau supérieur signifie généralement que les choses se passent plus vite et je pense que c'est la chose la plus importante pour Microsoft et Google. Plus les applications créées pour la plate-forme sont nombreuses et performantes, plus le producteur de système d'exploitation en profite.

D'autre part, de nombreux logiciels pour Windows sont encore écrits en C ++. Il serait donc insensé de pousser ces développeurs à basculer vers C # / JavaScript / toute autre option. Microsoft se concentre sur la possibilité de développer des applications Win8 pour autant de développeurs que possible. C'est pourquoi, à mon avis, ils ont décidé de prendre en charge C ++ et JavaScript dans la pile de développement Win8.

rotman
la source
5
Java était une erreur. Si vous voulez des performances brutes (et vous en avez souvent), vous voulez écrire en C / C ++. Si vous voulez la productivité des développeurs, vous voulez un langage de niveau supérieur comme Python ou PHP ou Ruby ou JS. Java (et C #) sont des systèmes intermédiaires qui ne vous offrent ni les meilleures performances, ni la meilleure productivité. En l'état actuel des choses, le C ++ n'est pas si mauvais - vous pouvez en tirer une bonne productivité une fois que vous savez ce que vous faites.
gbjbaanb
8
@gbjbaanb Votre opinion est mitigée: il y a quelques années, il aurait été logique de placer Java et C # sur le même plan d'abstraction, mais l'introduction de LINQ, des expressions lambda et des fonctionnalités de programmation async dans les nouvelles versions de .NET a déplacé C # à un niveau supérieur (Java va rattraper son retard sur le manque de programmation fonctionnelle dans JDK8, mais c'est encore au stade de l'accès précoce).
codesparkle
2
@gbjbaanb heureusement, WCF n'est qu'une infime partie de .NET, et généraliser l'application à la langue C # n'est pas valide. Avez-vous réellement utilisé les nouvelles fonctionnalités depuis .NET 3? Parce que VS n’est pas du tout un environnement de développement exceptionnel (en fait, c’est vraiment ennuyant sans ReSharper). Donc, étant donné que ce site même (et l’ensemble du réseau SE) est construit en C #, votre commentaire semble un peu inexact.
codesparkle
1
@rotman S'il vous plaît ne répondez pas aux réponses d'autres personnes dans votre propre réponse. Les réponses doivent uniquement répondre à la question initiale :)
Andres F.
6
@ gbjbaanb: Je dirais que c'était une affirmation sans preuve que les systèmes intermédiaires qui ne vous donnent ni les meilleures performances ni la meilleure productivité sont une erreur. Étant donné que performances et productivité sont toutes deux importantes, la meilleure solution est celle qui équilibre les deux. Un choix intermédiaire, tel que Java ou C #, constitue un excellent choix pour de nombreux cas d'utilisation.
Carson63000
2

Le C ++ a toujours des fichiers d'en-tête, des préprocesseurs flexibles (#define), ... de telles choses que certaines personnes ont considérées comme étant "mauvaises" ou "difficiles à gérer".

C #, d’autre part, utilise des métadonnées, pas besoin d’écrire et de gérer des fichiers d’en-tête.

A propos de Microsoft pour ajouter plus de fonctionnalités à C ++: ce n’est pas une mince affaire.

Chaque compilateur C ++ ajoute de nouvelles fonctionnalités, notamment C ++ 11. gcc c'est aussi.

linquize
la source
7
Si tout ce que vous pouvez dire au sujet de C ++, ce sont bien les fichiers d’en-tête, vous en avez indirectement prouvé le sens. Je peux énumérer une foule de problèmes graves liés à C #, de non-portabilité, non déterministes, de temps système, de temps système, de
droits de
1
Utilisez le bon outil pour le bon travail. Le C ++ est excellent dans des sociétés comme Intel pour la performance de code non géré requis pour les projets de médaille, mais si vous avez besoin d’un site Web / d’un service Web que chaque entreprise FAIT, alors que la chance soit avec C ++!
Tom Stickel
1

C'est peut-être juste moi, mais, je vois une utilisation beaucoup plus simple du C que du C ++.

Le fait que C ++ ait avalé le C en entier rend difficile de déduire qui utilise quoi.

Mais il y a beaucoup plus de projets open source C que C ++.

Mon point de vue est que si vous avez besoin d'une vitesse proche de celle du métal, utilisez C. Si vous avez besoin de flexibilité et de facilité de gestion avec des performances raisonnables, utilisez C # ou Java. Si vous souhaitez une conception épurée faite rapidement, utilisez Python, Scala, Groovy ou l’un des nombreux langages complets.

James Anderson
la source
2
Non, je pense que vous avez tort ici. Si vous désactivez les exceptions, C ++ est aussi proche du métal que C, tant que vous savez ce que vous faites. Le problème, ce sont les ABI. En C ++, la situation doit encore être résolue, ils y travaillent. Une fois que cela sera fait, je pense qu’il n’y aura pas grand intérêt à utiliser C au lieu de C ++, alors que C ++ vérifie mieux les erreurs et qu’il s’agit d’un sur-ensemble, de sorte que l’outil serait supérieur à ce stade.
Germán Diago
0

c ++ ne remplace pas c #. Voyons où le langage c ++ est utilisé. Il est utilisé lorsque des performances élevées sont nécessaires, pour l'écriture de bibliothèques middleware, un accès de bas niveau et pour l'écriture de code pour des périphériques à ressources limitées. Bien que vous puissiez utiliser c # pour certains d'entre eux, c ++ est plus approprié pour ceux-ci. La poussée de Microsoft pour le c ++ est étroitement liée à sa forte poussée dans l’espace mobile. Personne ne vous demandera d’écrire votre prochaine application Web en c ++. Mais avec Qt, l'argument de productivité ne peut pas être comparé à c ++. Mais je pense que beaucoup de gens ne connaissent pas Qt.

Jaak
la source
Le C ++ est encore très utilisé dans le développement de logiciels Windows commerciaux non verticaux.
peu-twiddler
1
C ++ est comme l'outil le plus professionnel que vous puissiez utiliser pour écrire un logiciel. Mais vous devez être habile pour écrire du bon code, car il est assez gratuit et présente quelques inconvénients liés à la compatibilité ascendante. Je pense qu’il est bien adapté à tous les types de logiciels, à l’exception des scripts. Le problème est la courbe d'apprentissage. Avec les bibliothèques modernes, il est très compétent même en termes de productivité. Et pensez que si l'application réussit, vous devez la porter. Le portage est plus facile avec les bases de code C / C ++, faites-le pour la disponibilité du compilateur. La liste de logiciels écrits en C ++ est interminable: amazon, google, dropbox, télécom, jeux, facebook ...
Germán Diago
-4

Non, C ++ ne peut pas remplacer C # car toutes les applications Windows Phone 8 autres que Direct3D doivent être développées en C #. Vous ne pouvez pas développer et publier des applications sur wp8 app store simplement en utilisant C ++ ou HTML5 / Javascript. Et tant que Microsoft ne supprime pas cette restriction, C ++ ne remplace rien. En conséquence, je suis sûr que très peu de personnes développeront pour WP8. Pauvre Nokia, perdant une fois de plus.

Voici l'extrait de microsoft dev center :

Windows Phone 8 ne prend pas en charge l'interface utilisateur XAML avec le modèle d'application code-behind C ++ pris en charge pour les applications du Windows Store.

encore un autre:

Cela signifie-t-il que je ne peux pas utiliser C ++ avec XAML pour développer une application sur Windows PHone 8? Suis-je obligé d'utiliser C # + XAML?

C'est correct. XAML ne peut être utilisé qu'avec C #. C ++ peut être utilisé pour un composant WinRT utilisé par le projet C #.

Même les MVP Microsoft affirment que cette rumeur est une désinformation délibérée de Microsoft lui-même:

J'aime ce que Microsoft fait avec WinRT et Windows Phone 8, mais je souhaite qu'ils ne sur-vendent pas une partie de cette valeur, car cela frustrerait les utilisateurs une fois qu'ils apprendraient toute la vérité.

Et cette mauvaise commercialisation délibérée gaspille des mois :

Il aurait été agréable de connaître ce MOO AGO avant de suivre la route du code tout natif avec mon application Metro.

Özgür
la source
1
Vos liens indiquent tous les deux que vous pouvez utiliser C ++ pour le développement WP8, et que seul XAML requiert C #. De plus, Direct3D est uniquement pris en charge par C ++.
Lee
@ Lee, pouvez-vous développer une application non-Direct3D sans utiliser C # pour WP8?
Özgür