Question

Je ne cesse de lire à propos de C99 et C ++ 11 et de toutes ces choses totalement douces qui sont ajoutées à la norme de langage et qui pourraient être intéressantes à utiliser un jour. Cependant, nous sommes actuellement au pays de l’écriture C ++ dans Visual Studio.

Certaines des nouveautés du standard seront-elles jamais ajoutées à Visual Studio, ou Microsoft est-il plus intéressé par l'ajout de nouvelles variantes de C # à cette fin?

Modifier: 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:

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

Très utile. Merci!

Était-ce utile?

La solution

MS a une série de réponses publiques à ce sujet, la plupart accusant ses 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 ++ se voit parfois demander 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 de C99, nous avons essayé de les implémenter (ou des analogues). Quelques exemples sont les macros variadic, long long , __ pragma , __ FUNCTION __ et __ restrict . Si vous trouvez d'autres fonctionnalités du C99 utiles dans votre travail, faites-le nous savoir! Nous n'entendons pas beaucoup parler de nos utilisateurs C, alors parlez et faites-vous entendre

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

  

Bonjour: malheureusement, la majorité de nos utilisateurs nous disent qu’ils préféreraient que nous nous concentrions sur C ++ - 0x plutôt que sur C-99. Nous avons " choisis parmi les cerises " Certaines fonctionnalités populaires du C-99 (macros variadiques, long long ), mais il est peu probable que nous en fassions davantage dans l'espace C-99 (du moins à court terme).

     

Jonathan Caves

     

Équipe du compilateur Visual C ++.

C’est une situation assez triste, mais logique si vous pensez que MS veut enfermer les utilisateurs: il est très difficile de transférer du code moderne basé sur gcc dans MSVC, ce qui au moins, m’est extrêmement douloureux.

Il existe cependant une solution de contournement: notez qu'Intel est beaucoup plus éclairé à ce sujet. le compilateur C d'Intel peut gérer le code C99 et a même les mêmes drapeaux que gcc, ce qui facilite grandement le portage du code entre plates-formes. En outre, le compilateur Intel fonctionne dans Visual Studio. Donc, en supprimant MS COMPILER, vous pouvez toujours utiliser le MS IDE qui, à votre avis, a quelque valeur, et utiliser C99 comme bon vous semble.

Une approche plus judicieuse consiste honnêtement à passer à Intel CC ou à gcc et à utiliser Eclipse pour votre environnement de programmation. La portabilité du code sous Windows-Linux-Solaris-AIX-etc. est généralement importante dans mon expérience, et malheureusement, les outils MS ne la prennent pas en charge.

Autres conseils

Herb Sutter est à la fois président et membre actif du comité de normalisation C ++, ainsi qu’architecte logiciel sous Visual Studio pour Microsoft.

Il est l’un 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. Je suppose donc que l’inclusion de C ++ 0x sous Windows est assurée tant que H. Sutter reste chez Microsoft.

Comme C99 n’est que partiellement inclus dans Visual Studio, j’imagine que c’est une question de priorités.

  • Les fonctionnalités les plus intéressantes de C99 sont déjà présentes en C ++ (alignement, déclaration de variable n'importe où, // commentaires, etc.) et probablement déjà utilisables en C dans Visual Studio (si vous ne faites que 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 l'implémentation complexe booléenne dans C99 est risible, au mieux ... Voir http://david.tribble.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 mettrais-je en place des fonctionnalités que peu de gens utiliseront quand les mêmes fonctionnalités sont déjà offertes dans davantage de langues actives de la communauté que la plupart des gens utilisent déjà?

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 de 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 le 14/04/2011

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

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

Modifiez le 05/05/2012

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 de la norme ISO C ++ 98 / C ++ 11". "
  2.   
  3. Pour des raisons historiques également, nous envoyons un compilateur C90 qui accepte uniquement C90 et non C ++
  4.   
  5. Nous ne prévoyons pas de prendre en charge les fonctionnalités ISO C qui ne font partie ni de C90 ni d'ISO C ++.
  6.   

L'article 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 Aperçu du VC2013 , C99, un ensemble plus diversifié de C ++ 11 et quelques nouvelles normes C ++ 14 sont prises en charge. Visitez 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):

  

Plus précisément, en 2015, notre implémentation de la bibliothèque standard C99 est terminée, à l'exception des macros pragma tgmath.h (non pertinentes en C ++) et 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 .

J'ai participé au travail ISO C ++ (2000-2005) et Microsoft a apporté une contribution significative à 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 composer avec une base de code plus grande qui utilise souvent ses extensions propriétaires. Cela fait simplement pour un testfase plus long. Cependant, ils supporteront finalement la plupart de C ++ 0x (l’exportation n’est toujours pas appréciée, du moins je le comprends).

En ce qui concerne ISO C, les personnes qui travaillent sur les normes ne sont pas représentatives du marché de Microsofts. Les clients de Microsofts peuvent utiliser C ++ 98 s’ils cherchent simplement un C plus performant. Pourquoi Microsoft dépenserait-il de l’argent pour C99? Bien sûr, les pièces Microsoft ont été choisies, mais c'est une affaire saine d'esprit. De toute façon, ils auraient besoin de ceux pour C ++ 0x, alors pourquoi attendre?

Le support MSVC pour C fait malheureusement défaut. Il ne prend en charge que la partie de C99 qui est un sous-ensemble de C ++ ... ce qui signifie que, par exemple, il est physiquement impossible de compiler ffmpeg ou ses bibliothèques libav * dans MSVC, car ils utilisent de nombreuses fonctionnalités de 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, contrairement à MSVC.

Je travaille sur x264, qui contrairement à ffmpeg fait un effort pour soutenir 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 la fonction la plus élevée via une fonction explicite d'alignement de la pile basée sur un assemblage. Par conséquent, toutes les fonctions nécessitant une pile alignée doivent être désactivées. Cela a également été très ennuyeux que je ne puisse pas utiliser vararrays non plus; c’est peut-être mieux, car apparemment, GCC les pessimise massivement en termes de performances.

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

Microsoft n’a jamais exprimé le moindre intérêt à rester à jour avec le standard c99 (qui vieillit maintenant). Triste pour les programmeurs C, mais je suppose que Microsoft se soucie davantage de la communauté C ++.

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

Informations mises à jour à ce sujet:

Il existe maintenant (10 nov. 2008) un "Aperçu de la technologie communautaire". (CTP) de VS2010 contenant un aperçu de VC10 comportant certaines parties de C ++ 0x implémentées (notez que VC10 n'aura pas l'ensemble des modifications C ++ 0x implémentées même lorsque VC10 sera libéré ):

Visual Studio 2010 CTP publié

  • Lambdas, auto et static_assert: Fonctionnalités C ++ 0x dans VC10, Première partie
  • Comme indiqué dans l'article ci-dessus, "Le compilateur Visual C ++ du CTP (Community Technology Preview) de Microsoft Visual Studio 2010 prend en charge quatre fonctionnalités du langage C ++ 0x, à savoir:"

    • lambdas,
    • 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 est certain d’essayer de faire avancer le nouveau standard C ++. Comme le mentionne OregonGhost, cette preuve est fournie par le TR1 inclus dans la dernière version du service Visual Studio.

    L'équipe Visual C ++ a publié un tableau des fonctionnalités C ++ 0x prises en charge par la version 2010 à 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écalage entre la spécification et la mise en oeuvre, cela semble assez raisonnable. Wikipedia a un bel article sur les spécifications. Ce n'est pas fini au moment où j'écris ceci.

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

    • Fonctionnalités du langage de base C ++ 11
    • Fonctionnalités du langage principal C ++ 11: accès concurrentiel
    • Fonctionnalités du langage de base C ++ 11: C99
    • Taille du conteneur x86 (octets)
    • Taille du conteneur x64 (octets)

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

    Licencié sous: CC-BY-SA avec attribution
    Non affilié à StackOverflow
    scroll top