Soporte de Visual Studio para nuevos estándares C / C ++?

Sigo leyendo sobre C99 y C ++ 11 y todas estas cosas totalmente dulces que se están agregando al estándar de idioma que podría ser útil usar algún día. Sin embargo, actualmente languidecemos en la tierra de escribir C ++ en Visual Studio.

¿Alguna de las cosas nuevas en el estándar se agregará alguna vez al estudio visual, o Microsoft está más interesada en agregar nuevas variantes de C # para hacer eso?

Editar: Además de la respuesta aceptada, encontré el blog del equipo de Visual C ++:

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

Y específicamente, esta publicación en él:

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

Muy útil. ¡Gracias!

MS tiene una serie de respuestas públicas a esto, la mayoría de ellos culpa a sus usuarios. Como éste:

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

Ahora, el equipo del comstackdor de Visual C ++ recibe ocasionalmente la pregunta de por qué no hemos implementado C99. Realmente se basa en el interés de nuestros usuarios. Donde hemos recibido muchas solicitudes de ciertas características de C99, hemos intentado implementarlas (o análogos). Un par de ejemplos son macros variadas, long long , __pragma , __FUNCTION__ y __restrict . Si hay otras características de C99 que le resultarían útiles en su trabajo, ¡infórmenos! No escuchamos mucho de nuestros usuarios de C, así que hablen y háganse oír

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

Hola: desafortunadamente, la gran mayoría de nuestros usuarios es que prefieren que nos centremos en C ++ – 0x en lugar de C-99. Hemos seleccionado algunas características populares de C-99 (macros variadas, long long ) pero más allá de esto es poco probable que hagamos mucho más en el espacio C-99 (al menos a corto plazo).

Cuevas de Jonathan

Equipo del comstackdor de Visual C ++.

Esta es una situación bastante triste, pero también tiene sentido si sospechas que MS quiere bloquear a los usuarios: hace que sea muy difícil portar código moderno basado en gcc en MSVC, que al menos me resulta extremadamente doloroso.

Sin embargo, existe una solución: tenga en cuenta que Intel está mucho más iluminado en esto. el comstackdor Intel C puede manejar el código C99 e incluso tiene los mismos indicadores que gcc, por lo que es mucho más fácil codificar el puerto entre las plataformas. Además, el comstackdor de Intel funciona en Visual Studio. Así que al eliminar MS COMPILER aún puede usar el MS IDE que parezca que tiene algún tipo de valor, y usar C99 al contenido de su corazón.

Un enfoque más sensato es, honestamente, pasar a Intel CC o gcc, y usar Eclipse para su entorno de progtwigción. La portabilidad del código en Windows-Linux-Solaris-AIX-etc suele ser importante en mi experiencia, y eso no es en absoluto compatible con las herramientas de MS, desafortunadamente.

Herb Sutter es a la vez presidente y miembro muy activo del comité de estandarización de C ++, así como también arquitecto de software en Visual Studio para Microsoft.

Él es uno de los autores del nuevo modelo de memoria C ++ estandarizado para C ++ 0x. Por ejemplo, los siguientes documentos:

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

tener su nombre en él. Así que supongo que la inclusión en Windows de C ++ 0x está asegurada siempre que H. Sutter permanezca en Microsoft.

En cuanto a C99 solo parcialmente incluido en Visual Studio, creo que esta es una cuestión de prioridades.

  • Las características más interesantes de C99 ya están presentes en C ++ (en línea, statement de variable en cualquier lugar, // comentarios, etc.) y probablemente ya se pueden usar en C en Visual Studio (si solo se usa el código C dentro del comstackdor de C ++). Vea mi respuesta aquí para una discusión más completa sobre las características de C99 en C ++.
  • C99 aumenta la divergencia entre C y C ++ al agregar características ya existentes en C ++, pero de una manera incompatible (lo siento, pero la implementación booleana compleja en C99 es irrisoria, en el mejor de los casos … Vea http://david.tribble.com/ text / cdiffs.htm para más información)
  • La comunidad C en Windows parece inexistente o no lo suficientemente importante como para ser reconocida
  • La comunidad C ++ en Windows parece demasiado importante como para ser ignorada
  • .NET es la forma en que Microsoft quiere que las personas programen en Windows. Esto significa C #, VB.NET, quizás C ++ / CLI.

Entonces, si fuera Microsoft, ¿por qué implementaría características que pocas personas usarán cuando ya se ofrezcan las mismas características en más lenguajes activos de la comunidad que ya utilizan la mayoría de las personas?

¿Conclusión?

C ++ 0x se incluirá, como extensión de VS 2008, o en la próxima generación (¿generaciones?) De Visual Studio.

Las características de C99 que aún no están implementadas no serán en los próximos años, a menos que ocurra algo dramático (¿un país lleno de desarrolladores de C99 aparece de la nada?)

Editar 2011-04-14

Aparentemente, el “país lleno de desarrolladores C99” ya existe: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6415401
^ _ ^

Aún así, el último comentario en: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6828778 es lo suficientemente claro, supongo.

Editar 2012-05-03

Herb Sutter dejó en claro que:

  1. Nuestro objective principal es apoyar “la mayor parte de C99 / C11 que es un subconjunto de ISO C ++ 98 / C ++ 11”.
  2. También por razones históricas enviamos un comstackdor C90 que acepta (solo) C90 y no C ++
  3. No planeamos admitir las características de ISO C que no son parte de C90 o ISO C ++.

La entrada del blog agrega enlaces y más explicaciones para esas decisiones.

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

A partir de la vista previa de VC2013 1 , C99, se admite un conjunto más diversificado de C ++ 11 y algunos estándares de C ++ 14 recientemente introducidos. Consulte el blog oficial para obtener más información: http://blogs.msdn.com/b/vcblog/archive/2013/06/27/what-s-new-for-visual-c-developers-in-vs2013-preview. aspx

Actualizar:

De https://news.ycombinator.com/item?id=9434483 (Stephan T Lavavej alias: STL es mantenedor del equipo de STL @VC):

Específicamente, en 2015, nuestra implementación de la Biblioteca estándar C99 está completa, a excepción de tgmath.h (irrelevante en C ++) y las macros pragma CX_LIMITED_RANGE / FP_CONTRACT.

Consulte esta publicación para obtener más información: http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015-rc.aspx .

Estuve involucrado en el trabajo de ISO C ++ (2000-2005) y Microsoft hizo contribuciones significativas a ese lenguaje. No hay duda de que funcionarán en C ++ 0x, pero necesitarán un poco más de tiempo que Intel. Micosoft tiene que lidiar con una base de código más grande que a menudo usa sus extensiones propietarias. Esto simplemente hace una prueba más larga. Sin embargo, soportarán la mayor parte de C ++ 0x eventualmente (sin embargo, exportar todavía no es querido, o al menos eso entiendo).

Cuando se trata de ISO C, las personas que trabajan en el estándar no son representativas para el mercado de Microsofts. Los clientes de Microsofts pueden usar C ++ 98 si solo están buscando una mejor C. Entonces, ¿por qué Microsoft gastaría dinero en C99? Claro, Microsoft escogió piezas, pero eso es un negocio sensato. Necesitarían los de C ++ 0x de todos modos, ¿por qué esperar?

El soporte de MSVC para C es lamentablemente muy deficiente. Solo admite la parte de C99 que es un subconjunto de C ++ … lo que significa que, por ejemplo, es físicamente imposible comstackr ffmpeg o sus bibliotecas libav * en MSVC, porque usan muchas características C99, como los elementos de estructura nombrados. Esto empeora por el hecho de que libavcodec también requiere un comstackdor que mantenga la alineación de la stack, lo que MSVC no hace.

Trabajo en x264, que a diferencia de ffmpeg hace un esfuerzo para soportar MSVC, aunque hacerlo a menudo ha sido una pesadilla en sí mismo. No mantiene la alineación de stack incluso si pasa explícitamente la llamada de función más alta a través de una función de alineación de stack basada en ensamblaje explícita, por lo que todas las funciones que requieren una stack alineada deben desactivarse. También ha sido muy molesto que tampoco pueda usar vararrays; quizás esto sea lo mejor, ya que aparentemente GCC los pesimiza masivamente en términos de rendimiento.

Una publicación más reciente sobre la compatibilidad de la característica C ++ 11 de MSVC para MSVC 2010 y 2011 ya está en línea .

Microsoft nunca ha expresado ningún interés real en mantenerse al día con el estándar c99 (que ya está viejo). Triste para C-progtwigdores, pero sospecho que Microsoft se preocupa más por la comunidad C ++.

Visual C ++ 2008 SP1 contiene partes de TR1 al menos, y de vez en cuando, el equipo de Visual C ++ está blogueando o hablando de C ++ 0x, así que supongo que lo admitirán en algún momento de la función. Aunque no leí nada oficial.

Información actualizada sobre esto:

Ahora hay (10 de noviembre de 2008) una “Comunidad Tech Preview” (CTP) de VS2010 que contiene una vista previa de VC10 que tiene algunas partes de C ++ 0x implementadas (tenga en cuenta que VC10 no tendrá el conjunto completo de C ++ 0x cambios implementados incluso cuando se lanza VC10):

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

Algunos detalles sobre las novedades del VC10 CTP:

  • Visual Studio 2010 CTP lanzado
  • Lambdas, auto y static_assert: C ++ 0x Funciones en VC10, parte 1

Como se menciona en el artículo anterior, “El comstackdor de Visual C ++ en Microsoft Visual Studio 2010 Community Technology Preview (CTP) contiene soporte para cuatro características del lenguaje C ++ 0x, a saber:”

  • lambdas,
  • auto,
  • static_assert,
  • referencias rvalue

Herb Sutter es el presidente del organismo de normas ISO C ++ y también trabaja para Microsoft. No sé sobre el estándar Visual Studio C, principalmente porque nunca uso C simple, pero Microsoft está seguro de intentar impulsar el nuevo estándar C ++. La evidencia de esto es, como se mencionó en OregonGhost, el TR1 que se incluye en la versión más reciente del Servicio de Visual Studio.

El equipo de Visual C ++ presentó una tabla de características de C ++ 0x compatible con la versión de 2010 en http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language -features-in-vc10-the-table.aspx . Como puede haber un desfase entre la especificación y la implementación, parece bastante razonable. Wikipedia tiene un buen artículo sobre la especificación. No está terminado en el momento en que escribo esto.

Visual C ++ Bloq proporciona mucha información sobre varios puntos interesantes sobre el soporte de C ++ 11 en VC ++ 11, incluidas varias tablas

  • C ++ 11 Características principales del lenguaje
  • C ++ 11 Características principales del lenguaje: concurrencia
  • Características principales del lenguaje C ++ 11: C99
  • Tamaños de contenedor x86 (bytes)
  • x64 Tamaños de contenedor (bytes)

Blog del equipo de Visual C ++, características de C ++ 11 en Visual C ++ 11