web-dev-qa-db-fra.com

Le C ++ moderne remplace-t-il C #? Microsoft pousse-t-il les développeurs à adopter le C ++?

J'entends parler de la popularité du C++ moderne et de quelques discussions sur la migration de retour au C++ à partir de C # ou d'autres langages de type C.

Je connais les fonctionnalités de C++ 11 mais j'aimerais entendre vos expériences, en particulier celles des développeurs qui ont migré de C # vers C++.

Plus important encore, les développeurs Microsoft Push utilisent-ils C++? Si oui, pourquoi?

93
Amir Karimi

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

Je ne le trouve pas maintenant, mais il y a quelque temps, j'ai vu une présentation par l'un des gros gars de Microsoft et le tout était destiné aux développeurs et concernait le déploiement de Windows 8 et en particulier de WinRT (le remplacement du cadre .NET également comme API Win32).

Il avait un calendrier qui expliquait comment diverses pressions affectaient la technologie populaire à certains moments. Donc, au début, les gens voulaient de la vitesse, ils ont donc tous codé en C/C++ (deux langages séparés). Au fur et à mesure que le matériel devenait plus rapide, l'attention s'est déplacée de la vitesse d'exécution vers la vitesse de développement, de sorte que les langages de niveau supérieur sont devenus beaucoup plus populaires.

Cependant, l'accent est désormais mis davantage 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 deviendront beaucoup plus populaires et que certains remplaceront complètement le bureau. Ainsi, l'accent (au moins aux yeux de Microsoft) est de retour sur C++ parce que nous nous soucions maintenant de la durée de vie de la batterie. Code de niveau supérieur = plus d'instructions = plus de jus requis.

Pour prendre en charge cette transition vers 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 le nom de toute façon). Cette API suit le thème de .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 XAML (technologie utilisée dans WPF, leur plus récent framework d'interface utilisateur) pour être également disponible en C++.

Donc, pour moi, cela indique qu'il y a certainement plus de concentration sur C++ chez Microsoft que par le passé.

MISE À JOUR # 1:

Comme je viens de recevoir un badge `` Nice answer '' pour cela, j'ai pensé que je devrais peut-être revenir et a) clarifier quelques choses et b) rendre la police chargée de la vérification des faits heureuse 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 c'est encore une autre alternative que les développeurs de MS Windows ont maintenant et MS pousse fortement les gens à aller dans cette direction. Il semble (veuillez garder vos flammes si ce n'est pas exact à 100%) que WinRT était principalement ciblé pour les applications d'interface utilisateur modernes, bien que les applications de bureau normales devraient également pouvoir en profiter. Cela dit, MS encourage fortement les gens à passer à l'écriture a) des applications d'interface utilisateur modernes et b) à commencer à utiliser WinRT afin que le pourcentage de personnes qui utilisent le framework .NET diminue très probablement.

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

    • La communauté C++ (avec MS en grande partie) fait pression pour un retour en force afin de positionner C++ comme un bon langage pour les appareils de faible puissance, dont la part de marché a augmenté comme un fou ces derniers temps. Si vous ne me croyez pas, recherchez la série de conférences "GoingNative" qui a commencé l'année dernière.
    • Avec tous les efforts et l'influence de Microsoft, l'utilisation de C++ augmentera certainement, tandis que C # pourrait laisser tomber quoi. C'est ce que préconise MS et, comme je l'ai dit dans les commentaires ci-dessus, lorsque MS met son capital derrière une idée, il déplace une grande partie de l'industrie. J'obtiendrai probablement une réponse de la part d'un gars qui dira "quelle industrie, j'ai toujours été sous Linux" et à cela ma seule réponse est, réveillez-vous! Oui, il existe d'autres systèmes d'exploitation, mais la majorité du marché des ordinateurs de bureau, à la fois pour les particuliers et les entreprises, est Windows et tout développeur sérieux qui souhaite maximiser la valeur de son temps serait très stupide de ne pas cibler cette partie du marché des ordinateurs de bureau.

Donc en conclusion: Oui, MS fait pression pour que le C++ revienne, donc très probablement sa popularité augmentera. 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 absolus noir/blanc lorsque la réalité est pleine de nuances de gris. Il s'agit d'une réponse à plusieurs nouveaux commentaires qui ont été ajoutés à ce message:

  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 mode. Donc, pour ceux qui sont si attachés au framework .NET: a) ne vous inquiétez pas de sa disparition et b) arrêtez de discuter en sa faveur comme si votre vie en dépendait, votre API est en sécurité.

  2. WinRT réimplémente de nombreuses fonctionnalités qui étaient auparavant fournies par les API de framework Win32 et .NET. Les personnes qui souhaitent cette fonctionnalité auront le choix si elles souhaitent 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 soutienne à l'avenir.

La position que Microsoft a annoncée est que WinRT est un grand framework qui a donné à Microsoft une chance de commencer avec une table rase et a construit une API en utilisant les leçons apprises dans Win32 API et .NET Framework lui-même. J'ai essayé de chercher cette vidéo, mais je ne la trouve toujours pas, mais l'une des choses que le conférencier a mentionnées est qu'il existe certains domaines du cadre .NET qui auraient pu être mieux définis/plus simples/plus propres et WinRT expose cette même fonctionnalité dans cette nouvelle interface plus propre.

95
DXM

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

Rien n'est remplacé et c'est finalement aux développeurs de décider. Il existe cependant un Push pour une meilleure autonomie de la batterie que WinRT facilite.

L'exception est les jeux où C++ obtient plus de support, en particulier sur Windows Phone 8 alors que les langages gérés n'ont pas de support natif (aka no xna).

22
Daniel Little

Je connais les fonctionnalités de C++ 11 mais j'aimerais entendre vos expériences

La pensée que les gens préféreraient le C++ au C # (ou à peu près tout autre produit de remplacement post-1990 [non-php]) pour la programmation à usage général est risible . C++ 11 ajoute quelques bons morceaux manquants, mais c'est toujours clouer les jambes à un chien .

C++ a de bonnes niches, et c'est toujours la meilleure option sur certaines plates-formes avec une prise en charge limitée du compilateur. Mais non, le C++ moderne est loin de remplacer quoi que ce soit, sauf peut-être un C++ désuet et cassé.

19
Telastyn

DXM a écrit:

Ainsi, l'accent (au moins aux yeux de Microsoft) est de retour sur C++ car maintenant nous nous soucions de la durée de 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 Google Android était une erreur. Ce n'était pas le cas. Un langage de niveau supérieur signifie généralement que les choses se font plus rapidement et Je pense que c'est la chose la plus importante pour Microsoft et Google. Plus les applications sont créées et meilleures pour la plate-forme, plus le profit du producteur d'OS est élevé.

D'un autre côté, il existe de nombreux logiciels pour Windows encore écrits en C++, donc pousser ces développeurs à passer en C #/JavaScript/quoi que ce soit d'autre serait fou. 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.

2
rotman

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

C #, d'autre part, utilisez des métadonnées, pas besoin d'écrire et de maintenir des fichiers d'en-tête.

À propos de l'ajout de fonctionnalités au C++ par Microsoft: ce n'est pas étonnant.

Chaque compilateur C++ ajoute plus de fonctionnalités, y compris les fonctionnalités C++ 11. gcc l'est aussi.

2
linquize

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

Le fait que C++ ait avalé du C complet rend difficile de déduire qui utilise quoi.

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

À mon avis, si vous avez besoin d'une vitesse proche du métal, utilisez C. Si vous avez besoin de flexibilité et de gestion avec des performances raisonnables, utilisez C # ou Java. Si vous voulez une conception propre et rapide, utilisez Python, Scala, Groovy ou l'un des nombreux langages complets.

1
James Anderson

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 de middleware, un accès de bas niveau et pour l'écriture de code pour les périphériques à ressources limitées. Bien que vous puissiez utiliser c # pour certains d'entre eux, c ++ convient mieux à ces derniers. Le Push pour c ++ de Microsoft est fortement lié à son grand Push dans l'espace mobile. Personne ne vous demandera d'écrire votre prochaine application web en c ++. Mais avec Qt, l'argument de la productivité ne peut pas être avancé contre c ++. Mais je pense que beaucoup de gens ne connaissent pas Qt.

0
Jaak