Prise en charge de Visual Studio pour les nouvelles normes C / C ++?

Je continue à lire à propos de C99 et C ++ 11 et tous ces trucs très sympas qui s’ajoutent à la norme de langage qui pourrait être agréable à utiliser un jour. Cependant, nous languissons actuellement au pays de l’écriture de C ++ dans Visual Studio.

Est-ce que l’un des nouveaux éléments de la norme sera ajouté à Visual Studio, ou Microsoft est-il plus intéressé par l’ajout de nouvelles variantes C # pour ce faire?

Edit: En plus de la réponse acceptée, j’ai trouvé le blog de l’équipe Visual C ++:

http://blogs.msdn.com/vcblog/

Et plus précisément, cet article contient:

http://blogs.msdn.com/vcblog/archive/2008/02/22/tr1-slide-decks.aspx

Très utile. Merci!

MS a une série de réponses publiques à ce sujet, la plupart d’entre eux accusant leurs utilisateurs. Comme celui-ci:

http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx

Maintenant, l’équipe du compilateur Visual C ++ reçoit la question occasionnelle sur la raison pour laquelle nous n’avons pas implémenté C99. C’est vraiment basé sur l’intérêt de nos utilisateurs. Lorsque nous avons reçu de nombreuses demandes pour certaines fonctionnalités C99, nous avons essayé de les implémenter (ou des analogues). Quelques exemples sont les macros __pragma , long long , __pragma , __FUNCTION__ et __ressortingct . Si vous avez d’autres fonctionnalités C99 utiles dans votre travail, faites-le nous savoir! Nous n’entendons pas grand chose de nos utilisateurs C, alors faites-vous entendre et faites-vous entendre

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=345360

Bonjour, malheureusement, la majorité de nos utilisateurs pensent que nous préférerions que nous nous concensortingons sur C ++-0x plutôt que sur C-99. Nous avons choisi certaines fonctionnalités populaires du C-99 (macros variadiques, long long ), mais au-delà de cela, il est peu probable que nous puissions faire beaucoup plus dans l’espace C-99 (du moins à court terme).

Jonathan Caves

Équipe du compilateur Visual C ++.

C’est un sortingste état de choses, mais cela a aussi du sens si vous soupçonnez que MS veut verrouiller les utilisateurs: cela rend très difficile le portage de code moderne basé sur gcc dans MSVC, ce qui est au moins extrêmement douloureux.

Une solution existe cependant: notez qu’Intel est beaucoup plus éclairé à ce sujet. le compilateur Intel C peut gérer le code C99 et possède même les mêmes indicateurs que gcc, ce qui facilite grandement le portage du code entre les plates-formes. En outre, le compilateur Intel fonctionne en Visual Studio. Ainsi, en éliminant MS COMPILER, vous pouvez toujours utiliser l’EDI de MS que vous semblez avoir une certaine valeur, et utiliser C99 à votre guise.

Une approche plus sensée consiste honnêtement à passer à Intel CC ou à gcc et à utiliser Eclipse pour votre environnement de programmation. La portabilité du code sur Windows-Linux-Solaris-AIX-etc est généralement importante dans mon expérience, et ce n’est malheureusement pas le cas avec les outils MS.

Herb Sutter est à la fois le président et un membre très actif du comité de normalisation C ++, ainsi que l’architecte logiciel de Visual Studio for Microsoft.

Il fait partie des auteurs du nouveau modèle de mémoire C ++ normalisé pour C ++ 0x. Par exemple, les articles suivants:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2669.htm
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2197.pdf

avoir son nom dessus. Donc, je suppose que l’inclusion sur Windows de C ++ 0x est assurée tant que H. Sutter rest chez Microsoft.

Comme pour C99, partiellement inclus dans Visual Studio, je suppose que c’est une question de priorités.

  • Les fonctionnalités les plus intéressantes de C99 sont déjà présentes dans C ++ (inlining, déclaration de variable n’importe où, // commentaires, etc.) et sont probablement déjà utilisables dans C dans Visual Studio (si seulement du code C dans le compilateur C ++). Voir ma réponse ici pour une discussion plus complète sur les fonctionnalités de C99 en C ++.
  • C99 augmente la divergence entre C et C ++ en ajoutant des fonctionnalités déjà présentes dans C ++, mais de manière incompatible (désolé, mais l’implémentation complexe booléenne en C99 est risible, au mieux … Voir http://david.sortingbble.com/ text / cdiffs.htm pour plus d’informations)
  • La communauté C sous Windows semble inexistante ou pas assez importante pour être reconnue
  • La communauté C ++ sous Windows semble trop importante pour être ignorée
  • .NET est la façon dont Microsoft veut que les gens programment sous Windows. Cela signifie C #, VB.NET, peut-être C ++ / CLI.

Alors, serais-je Microsoft, pourquoi devrais-je implémenter des fonctionnalités que peu de personnes utiliseront alors que les mêmes fonctionnalités sont déjà proposées dans plus de langues actives de la communauté déjà utilisées par la plupart des gens?

Conclusion?

C ++ 0x sera inclus, comme extension de VS 2008, ou sur la génération suivante (générations?) De Visual Studio.

Les fonctionnalités du C99 qui ne sont pas encore implémentées ne le seront pas dans les prochaines années, à moins que quelque chose de dramatique ne se produise (un pays plein de développeurs C99 apparaît de nulle part?)

Modifier le 2011-04-14

Apparemment, le “pays plein de développeurs C99” existe déjà: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6415401
^ _ ^

Néanmoins, le dernier commentaire à l’ adresse : http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6828778 est assez clair, je suppose.

Modifier 2012-05-03

Herb Sutter a précisé que:

  1. Notre objective principal est de prendre en charge “la plupart de C99 / C11 qui est un sous-ensemble de ISO C ++ 98 / C ++ 11”.
  2. Nous avons aussi, pour des raisons historiques, expédié un compilateur C90 qui accepte (uniquement) le C90 et non le C ++
  3. Nous ne prévoyons pas de prendre en charge les fonctionnalités ISO C qui ne font pas partie de C90 ou ISO C ++.

Le billet de blog ajoute des liens et des explications supplémentaires pour ces décisions.

Source: http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/

À partir de la prévisualisation VC2013 1 , C99, un ensemble plus diversifié de C ++ 11 et de nouvelles normes C ++ 14 nouvellement introduites sont pris en charge. Consultez le blog officiel pour plus de détails: http://blogs.msdn.com/b/vcblog/archive/2013/06/27/what-s-new-for-visual-c-developers-in-vs2013-preview. aspx

Mettre à jour:

Extrait de https://news.ycombinator.com/item?id=9434483 (Stephan T Lavavej alias: STL est responsable de l’équipe STL @VC):

Plus précisément, en 2015, notre implémentation de la bibliothèque standard C99 est terminée, à l’exception de tgmath.h (non pertinent en C ++) et des macros pragma CX_LIMITED_RANGE / FP_CONTRACT.

Consultez cette publication pour plus de détails: http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015-rc.aspx .

J’ai été impliqué dans le travail ISO C ++ (2000-2005) et Microsoft a apporté d’importantes consortingbutions à ce langage. Il ne fait aucun doute qu’ils travailleront sur C ++ 0x, mais ils auront besoin d’un peu plus de temps que Intel. Micosoft doit gérer une base de code plus grande qui utilise souvent ses extensions propriétaires. Cela donne simplement une base de test plus longue. Pourtant, ils supporteront finalement la plupart de C ++ 0x (l’exportation n’est toujours pas appréciée, ou alors je comprends).

En ce qui concerne ISO C, les personnes travaillant sur le standard ne sont pas représentatives du marché de Microsoft. Les clients de Microsoft peuvent utiliser C ++ 98 s’ils recherchent un meilleur C. Alors pourquoi Microsoft dépenserait-il de l’argent sur C99? Bien sûr, Microsoft a choisi des pièces, mais c’est une affaire saine. Ils en auraient besoin pour C ++ 0x, alors pourquoi attendre?

Le support MSVC pour C est malheureusement très absent. Il ne supporte que la partie de C99 qui est un sous-ensemble de C ++ … ce qui signifie que, par exemple, il est physiquement impossible de comstackr ffmpeg ou ses librairies libav * dans MSVC, car elles utilisent de nombreuses fonctionnalités C99 telles que des éléments struct. Ceci est aggravé par le fait que libavcodec nécessite également un compilateur qui maintient l’alignement de la stack, ce que MSVC ne fait pas.

Je travaille sur x264, qui contrairement à ffmpeg fait un effort pour soutenir MSVC, même si cela a souvent été un cauchemar en soi. Il ne conserve pas l’alignement de la stack même si vous passez explicitement l’appel de fonction le plus élevé via une fonction explicite d’alignement de la stack basée sur l’assemblage, de sorte que toutes les fonctions nécessitant une stack alignée doivent être désactivées. C’est aussi très ennuyeux de ne pas pouvoir utiliser les vararrays non plus. c’est peut-être pour le mieux, car apparemment, GCC les pessimise massivement en termes de performance.

Un article plus récent sur la compatibilité de la fonctionnalité C ++ 11 de MSVC pour MSVC 2010 et 2011 est maintenant en ligne .

Microsoft n’a jamais manifesté un réel intérêt à restr à jour avec le standard c99 (qui vieillit à présent). Triste pour les programmeurs en C, mais je pense que Microsoft se soucie davantage de la communauté C ++.

Visual C ++ 2008 SP1 contient des parties de TR1 au moins, et de temps en temps, l’équipe Visual C ++ blogue ou parle de C ++ 0x, donc je suppose qu’ils la prendront en charge à un moment donné dans la fonctionnalité. Je n’ai rien lu de officiel cependant.

Informations mises à jour à ce sujet:

Il y a maintenant (10 Nov 2008) un “Community Tech Preview” (CTP) de VS2010 qui contient un aperçu de VC10 dans lequel certaines parties de C ++ 0x ont été implémentées (notez que VC10 n’aura pas l’ensemble complet de C ++ 0x modifications apscopes même lorsque VC10 est publié):

http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&displaylang=en

Quelques détails sur les nouveautés du CTP VC10:

  • Visual Studio 2010 CTP publié
  • Lambdas, auto et static_assert: fonctionnalités C ++ 0x dans VC10, partie 1

Comme indiqué dans l’article ci-dessus, “le compilateur Visual C ++ dans l’aperçu des technologies de la communauté (CTP) Microsoft Visual Studio 2010 de septembre contient la prise en charge de quatre fonctionnalités du langage C ++ 0x, à savoir:”

  • lambda,
  • auto,
  • static_assert,
  • références rvalue

Herb Sutter est le président de l’organisme de normalisation ISO C ++ et travaille également pour Microsoft. Je ne connais pas le standard Visual Studio C, principalement parce que je n’utilise jamais le langage C, mais Microsoft essaie de faire avancer le nouveau standard C ++. La preuve en est, comme mentionné dans OregonGhost, le TR1 inclus dans la dernière version de service de Visual Studio.

L’équipe Visual C ++ a publié une table des fonctionnalités C ++ 0x que la version 2010 prend en charge à l’ adresse http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language -features-in-vc10-the-table.aspx . Comme il peut y avoir un délai entre la spécification et l’implémentation, cela semble plutôt raisonnable. Wikipedia a un bel article sur la spécification. Ce n’est pas fini au moment où j’écris ceci.

Le Visual C ++ Bloq fournit de nombreuses informations sur plusieurs points intéressants concernant la prise en charge de C ++ 11 dans VC ++ 11, y compris plusieurs tables

  • Fonctions de langage C ++ 11 Core
  • Fonctions de langage C ++ 11 Core: simultanéité
  • Fonctions C ++ 11 Core Language: C99
  • x86 Conteneur Taille (octets)
  • x64 Taille du conteneur (octets)

Blog de l’équipe Visual C ++, Fonctionnalités C ++ 11 dans Visual C ++ 11