Prise en charge de Visual Studio pour les nouveaux standards C / C++?

je continue à lire sur C99 et c++11 et toutes ces choses totalement douces qui sont ajoutées à la norme de langue qui pourrait être agréable à utiliser un jour. Cependant, nous languissons actuellement dans le pays de l'écriture C++ dans Visual Studio.

est-ce que l'un des nouveaux éléments de la norme sera un jour ajouté à visual studio, ou est-ce que Microsoft est plus intéressé à ajouter de nouvelles variantes C# pour faire cela?

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

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

et plus spécifiquement, ce billet:

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

très utile. Merci!

101
demandé sur Xeo 2008-09-28 22:08:19

12 réponses

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

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

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

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

Salut: malheureusement, la majorité de nos utilisateurs nous font une grande surprise en nous disant qu'ils préféreraient que nous nous concentrions sur C++-0x plutôt que sur C-99. Nous avons "choisi" certaines caractéristiques populaires du C-99 (macros variadiques, long long ), mais au-delà de cela, il est peu probable que nous fassions beaucoup plus dans l'espace du C-99 (au moins à court terme).

Jonathan Caves

Compilateur Visual C++ Équipe.

This est une situation assez triste, mais aussi logique si vous soupçonnez MS veut verrouiller les utilisateurs dans: Il est très difficile de transférer le code moderne basé sur gcc dans MSVC, qui au moins je trouve extrêmement douloureux.

une solution existe, cependant: notez Qu'Intel est beaucoup plus éclairé sur ce point. le compilateur Intel C peut gérer le code C99 et possède même les mêmes options que gcc, ce qui rend beaucoup plus facile de transférer du code entre les plateformes. De plus, le compilateur Intel fonctionne dans visual studio. Par supprimer le compilateur MS vous pouvez toujours utiliser L'IDE MS que vous semblez penser avoir une certaine valeur, et utiliser C99 pour votre contenu de cœur.

une approche plus sensée est honnêtement de passer à Intel CC ou gcc, et d'utiliser Eclipse pour votre environnement de programmation. La portabilité du code à travers Windows-Linux-Solaris-AIX-etc est généralement importante dans mon expérience, et ce n'est pas du tout pris en charge par les outils MS, malheureusement.

100
répondu jakobengblom2 2010-09-06 16:35:25

Herb Sutter est à la fois le président et un membre très actif du comité de standardisation C++, ainsi que software architect on Visual Studio pour Microsoft.

il est l'un des auteurs du nouveau modèle de mémoire c++ standardisé pour C++0x. Par exemple, les documents 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

porte son nom. Donc je suppose que L'inclusion de C++0x sur Windows est assurée tant que H. Sutter reste chez Microsoft.

comme pour C99 seulement 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 en C++ (en ligne, déclaration de variables n'importe où, / / commentaires, etc.) et probablement déjà utilisable en C dans Visual Studio (si ce n'est que 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 d'une manière incompatible (désolé, mais le booléen implémentation complexe en c99 est risible, au mieux... Voir http://david.tribble.com/text/cdiffs.htm pour plus d'information)
  • 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.

Donc, je serais Microsoft, pourquoi voudrais-je mettre en œuvre des fonctionnalités que peu de gens utiliseront alors que les mêmes fonctionnalités sont déjà offertes dans des langues communautaires actives déjà utilisées par la plupart des gens?

Conclusion?

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

les fonctionnalités C99 qui n'ont pas encore été 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 sorti 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

^_^

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

Modifier 2012-05-03

Herb Sutter a précisé que:

  1. notre objectif premier est de supporter" la plupart des C99/C11 qui sont un sous-ensemble de ISO C++98/C++11."
  2. nous aussi pour des raisons historiques expédier un compilateur C90 qui accepte (seulement) C90 et non c++
  3. nous ne prévoyons pas de supporter les caractéristiques ISO C qui ne font pas partie de C90 ou ISO c++.

Le blog ajouter des liens et de plus amples explications sur ces décisions.

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

37
répondu paercebal 2017-05-23 10:29:57

à partir de vc2013 preview 1 , C99, un ensemble plus diversifié de C++11 et quelques nouveaux standards C++14 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=9434483 (Stephan t Lavavej alias: STL est le responsable de L'équipe STL @VC):

en particulier, en 2015, notre bibliothèque C99 Standard mise en œuvre est terminée, sauf pour tgmath.h (non pertinent en C++) et les macros Pragma CX_LIMITED_RANGE/FP_CONTRACT.

Vérifier ce post 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
répondu vulcan raven 2015-05-28 18:32:36

j'ai été impliqué dans le travail ISO c++ (2000-2005), et Microsoft a apporté des contributions significatives à ce langage. Il n'y a aucun doute qu'ils travailleront sur C++0x, mais ils auront besoin d'un peu plus de temps que de dire Intel. Micosoft doit traiter avec une base de code plus grande qui utilise souvent leurs extensions propriétaires. Cela fait simplement une base de test plus longue. Pourtant, ils vont éventuellement prendre en charge la plupart des C++0x (l'exportation n'est toujours pas aimée, si je comprends bien).

Quand il s'agit de ISO C, les personnes qui travaillent sur la norme ne sont pas représentatifs du marché des Microsofts. Les clients de Microsofts peuvent utiliser C++98 s'ils sont juste à la recherche D'un meilleur C. Alors pourquoi Microsoft dépenserait-il de l'argent sur C99? Bien sûr, Microsoft cherry-pieces choisis, mais c'est une affaire saine. Ils en auraient besoin pour C++0x de toute façon, alors pourquoi attendre?

8
répondu MSalters 2008-09-29 12:19:12

MSVC C est malheureusement que très peu. Il supporte seulement la partie de C99 qui est un sous-ensemble de C++... ce qui signifie, par exemple, qu'il est matériellement impossible de compiler ffmpeg ou ses bibliothèques libav* dans MSVC, car elles utilisent de nombreuses fonctionnalités C99 telles que les éléments struct nommés. Ceci 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 ne faire un effort pour soutenir MSVC, si cela a souvent été un cauchemar dans et de lui-même. Il ne maintient pas l'alignement de la pile même si vous passez explicitement l'appel de fonction le plus élevé par une fonction explicite d'alignement de la pile basée sur l'assemblage, donc toutes les fonctions qui nécessitent une pile alignée doivent être désactivées. Cela a aussi été très ennuyeux que je ne puisse pas utiliser vararrays non plus; peut-être est-ce pour le mieux, car apparemment GCC les pessimise massivement en terme de performance.

7
répondu Dark Shikari 2008-09-28 19:45:42

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

6
répondu fbrereto 2011-10-14 17:15:32

Microsoft N'a jamais exprimé d'intérêt réel à rester à jour avec le C99-standard (qui devient vieux maintenant). Triste pour les programmeurs C, mais je soupçonne que Microsoft se soucie davantage de la communauté C++.

4
répondu JesperE 2008-09-28 18:12:57

Visual C++ 2008 SP1 contient des parties de TR1 au moins, et de temps en temps, L'équipe de Visual C++ blogue ou parle de C++0x, donc je suppose qu'ils vont le supporter à un moment donné dans la fonctionnalité. Je n'ai pas lu quoi que ce soit officiel.

4
répondu OregonGhost 2008-09-28 18:19:13

informations mises à Jour sur ce point:

Il y a maintenant (10 Novembre 2008), une "Communauté Tech Preview (CTP), de VS2010, qui contient un aperçu de VC10 qui a certains parties de C++0x mis en œuvre (à noter que VC10 n'aura pas l'ensemble de C++0x changements mis en œuvre, même lorsque VC10 est sorti):

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

Quelques détails sur ce qui est nouveau dans le VC10 CTP:

comme noté dans l'article ci-dessus, "le Visual C++ compiler dans le Microsoft Visual Studio 2010 septembre Community Technology Preview (CTP) contient prise en charge de quatre fonctionnalités de langage C++0x, à savoir: "

  • lambdas,
  • auto,
  • static_assert,
  • références rvalue
4
répondu Michael Burr 2008-11-10 20:05:20

Herb Sutter est le président de L'ISO C++ standards body et travaille également pour Microsoft. Je ne suis pas au courant de la norme C de Visual Studio - principalement parce que je n'utilise jamais de C simple - mais Microsoft est sûr d'essayer de faire avancer la nouvelle norme C++. La preuve en est-comme OregonGhost l'a mentionné - le TR1 qui est inclus dans la dernière version du Service Visual Studio.

3
répondu QBziZ 2008-09-28 18:55:47

L'équipe de Visual C++ a publié un tableau des fonctionnalités de C++0x que la version 2010 supporte à 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écalage entre le spec et la mise en œuvre, cela semble assez raisonnable. Wikipedia a un bel article sur le spec. Ce n'est pas fini au moment où j'écris ceci.

3
répondu David Scruggs 2011-01-26 18:36:15

Visual C++ Bloq fournit beaucoup d'informations intéressant sur plusieurs points concernant le support de C++11 dans VC++11, y compris plusieurs tables

  • C++11 Fonctions Du Langage De Base
  • C++11 Caractéristiques Du Langage De Base: Simultanéité
  • C++11 Caractéristiques Du Langage De Base: C99
  • x86 dimensions des conteneurs (octets)
  • x64 dimensions des conteneurs (octets)

Visual C++ Blog de l'Équipe, C++11 Fonctionnalités de Visual C++ 11

1
répondu Pixelchemist 2013-06-28 03:03:30