web-dev-qa-db-fra.com

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

Je continue à lire sur C99 et C++ 11 et toutes ces choses totalement adorables qui s'ajoutent à la norme de langage qui pourrait être agréable à utiliser un jour. Cependant, nous languisons actuellement au pays de l'écriture 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, ce poste:

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

Très utile. Merci!

102
Colen

MS a une série de réponses publiques à cela, la plupart blâmant leurs utilisateurs. Comme celui-ci:

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

Désormais, l'équipe du compilateur Visual C++ reçoit occasionnellement la question de savoir pourquoi nous n'avons pas implémenté C99. C'est vraiment basé sur l'intérêt de nos utilisateurs. Là où nous avons reçu de nombreuses demandes pour certaines fonctionnalités C99, nous avons essayé de les implémenter (ou analogues). Quelques exemples sont des macros variadiques, long long, __pragma, __FUNCTION__, et __restrict. S'il existe d'autres fonctionnalités C99 que vous jugeriez utiles dans votre travail, faites-le nous savoir! Nous n'entendons pas beaucoup de nos utilisateurs C, alors parlez et faites-vous entendre

http://connect.Microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=34536

Salut: malheureusement, le retour en arrière écrasant de la majorité de nos utilisateurs est qu'ils préféreraient que nous nous concentrions sur C++ - 0x plutôt que sur C-99. Nous avons sélectionné avec soin certaines fonctionnalités populaires du C-99 (macros variadiques, long long) mais au-delà, il est peu probable que nous fassions beaucoup plus dans l'espace C-99 (du moins à court terme).

Jonathan Caves

Équipe du compilateur Visual C++.

C'est une situation assez triste, mais aussi logique si vous pensez que MS veut verrouiller les utilisateurs: il est très difficile de porter du code basé sur gcc moderne dans MSVC, ce que je trouve au moins extrêmement douloureux.

Une solution de contournement existe cependant: notez qu'Intel est beaucoup plus éclairé à ce sujet. le compilateur Intel C peut gérer le code C99 et a même les mêmes drapeaux que gcc, ce qui facilite le portage de code entre les plates-formes. De plus, le compilateur Intel fonctionne dans Visual Studio. Donc, en supprimant MS COMPILER, vous pouvez toujours utiliser le MS IDE que vous semblez avoir une sorte de 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 du tout pris en charge par les outils MS.

103
jakobengblom2

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

Il fait partie des auteurs du nouveau modèle de mémoire C++ standardisé 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. Je suppose donc que l'inclusion sur Windows de C++ 0x est assurée tant que H. Sutter reste chez Microsoft.

Quant à C99 seulement partiellement inclus dans Visual Studio, je suppose que c'est une question de priorités.

  • Les fonctionnalités C99 les plus intéressantes sont déjà présentes en C++ (inlining, déclaration de variable n'importe où, // commentaires, etc.) et probablement déjà utilisables en C dans Visual Studio (si seulement faire 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à existantes en C++, mais de manière incompatible (désolé, mais le booléen une implémentation complexe en C99 est risible, au mieux ... Voir http://david.tribble.com/text/cdiffs.htm pour plus d'informations)
  • La communauté C sur Windows semble inexistante ou pas assez importante pour être reconnue
  • La communauté C++ sur Windows semble trop importante pour être ignorée
  • .NET est la façon dont Microsoft veut que les gens programment sur 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 gens utiliseront jamais alors que les mêmes fonctionnalités sont déjà proposées dans des langages actifs plus communautaires déjà utilisés par la plupart des gens?

Conclusion?

C++ 0x sera inclus, en tant qu'extension de VS 2008, ou sur la prochaine génération (générations?) De Visual Studio.

Les fonctionnalités C99 non 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 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 =
^ _ ^

Pourtant, le dernier commentaire à: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6828778 est assez clair, je deviner.

Modifier 2012-05-03

Herb Sutter a précisé que:

  1. Notre objectif principal est de prendre en charge "la majeure partie de C99/C11 qui est un sous-ensemble d'ISO C++ 98/C++ 11".
  2. Nous livrons également pour des raisons historiques un compilateur C90 qui accepte (uniquement) C90 et non 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 sur ces décisions.

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

36
paercebal

À partir de VC2013 preview 1 , C99, un ensemble plus diversifié de C++ 11 et certaines 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

Mise à jour:

De https://news.ycombinator.com/item?id=943448 (Stephan T Lavavej aka: STL est le mainteneur 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 cet article 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 .

11
vulcan raven

J'ai été impliqué dans le travail ISO C++ (2000-2005), et Microsoft a apporté des contributions importantes à ce langage. Il ne fait aucun doute qu'ils fonctionneront sur C++ 0x, mais ils auront besoin d'un peu plus de temps que Intel. Micosoft doit gérer une base de code plus importante qui utilise souvent leurs extensions propriétaires. Cela fait simplement une base de test plus longue. Pourtant, ils prendront en charge la plupart de C++ 0x finalement (l'exportation n'est toujours pas appréciée, du moins je comprends).

En ce qui concerne l'ISO C, les personnes travaillant sur la norme ne sont pas représentatives du marché des microsofts. Les clients de Microsofts peuvent utiliser C++ 98 s'ils recherchent simplement un meilleur C. Alors pourquoi Microsoft dépenserait-il de l'argent pour C99? Bien sûr, les pièces choisies par Microsoft, mais c'est une affaire sensée. Ils en auraient besoin pour C++ 0x de toute façon, alors pourquoi attendre?

8
MSalters

Le support MSVC pour C fait malheureusement très défaut. Il ne prend en charge que la partie de C99 qui est un sous-ensemble de C++ ... ce qui signifie, par exemple, qu'il est physiquement impossible de compiler ffmpeg ou ses bibliothèques libav * dans MSVC, car ils utilisent de nombreuses fonctionnalités C99 telles que les éléments de structure nommés. Cela est aggravé par le fait que libavcodec nécessite également un compilateur qui maintient l'alignement de la pile, ce que MSVC ne fait pas.

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

7
Dark Shikari

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

6
fbrereto

Informations mises à jour à ce sujet:

Il y a maintenant (10 novembre 2008) un "Community Tech Preview" (CTP) de VS2010 qui contient un aperçu de VC10 qui a quelques parties de C + + 0x implémenté (notez que VC10 n'aura pas l'ensemble complet des modifications C++ 0x implémentées 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 VC10 CTP:

Comme indiqué dans l'article ci-dessus, "Le compilateur Visual C++ dans l'aperçu de la technologie communautaire (CTP) de septembre de Microsoft Visual Studio 2010 contient la prise en charge de quatre fonctionnalités du langage C++ 0x, à savoir:"

  • lambdas,
  • auto,
  • static_assert,
  • références rvalue
4
Michael Burr

Microsoft n'a jamais manifesté d'intérêt réel à se tenir au courant de la norme c99 (qui vieillit désormais). Triste pour les programmeurs C, mais je soupçonne que Microsoft se soucie plus de la communauté C++.

4
JesperE

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

4
OregonGhost

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

3
David Scruggs

Herb Sutter est le président de l'organisme de normalisation ISO C++ et travaille également pour Microsoft. Je ne connais pas la norme Visual Studio C - principalement parce que je n'utilise jamais de C simple - mais Microsoft essaie certainement de pousser la nouvelle norme C++ vers l'avant. La preuve en est, comme l'a mentionné OregonGhost, le TR1 inclus dans la dernière version de Visual Studio Service.

3
QBziZ

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 tableaux

  • Fonctionnalités du langage C++ 11 Core
  • Fonctionnalités du langage C++ 11: accès simultané
  • Fonctionnalités du langage C++ 11: C99
  • tailles de conteneur x86 (octets)
  • tailles des conteneurs x64 (octets)

Blog de l'équipe Visual C++, fonctionnalités C++ 11 dans Visual C++ 11

1
Pixelchemist