Pregunta

Sigo leyendo sobre C99 y C ++ 11 y todas estas cosas totalmente dulces que se están agregando al estándar de lenguaje que podría ser bueno 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 alguna vez se agregará a Visual Studio, o Microsoft está más interesado 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 ella:

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

Muy útil. Gracias!

¿Fue útil?

Solución

MS tiene una serie de respuestas públicas a esto, la mayoría de ellas culpando a sus usuarios. Como este:

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

  

Ahora, el equipo del compilador de Visual C ++ recibe la pregunta ocasional 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 las macros variables, long , __pragma , __FUNCTION__ y __restrict . Si hay otras características de C99 que le resulten útiles en su trabajo, ¡avísenos! No escuchamos mucho de nuestros usuarios de C, así que hable y hágase escuchar

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

  

Hola: desafortunadamente, el abrumador feadback que recibimos de la mayoría de nuestros usuarios es que prefieren que nos enfoquemos en C ++ - 0x en lugar de en C-99. Tenemos " cherry-recogido " ciertas características populares del C-99 (macros variadic, long long ) pero más allá de esto es poco probable que hagamos mucho más en el espacio C-99 (al menos en el corto plazo).

     

Jonathan Caves

     

Equipo de compilación de Visual C ++.

Este es un estado de cosas bastante triste, pero también tiene sentido si sospechas que MS quiere bloquear a los usuarios: hace que sea muy difícil trasladar el código moderno basado en gcc a MSVC, que al menos me parece extremadamente doloroso.

Sin embargo, existe una solución alternativa: tenga en cuenta que Intel está mucho más informado sobre esto. El compilador Intel C puede manejar el código C99 e incluso tiene las mismas marcas que gcc, lo que hace que sea mucho más fácil portar el código entre plataformas. Además, el compilador de Intel funciona en visual studio. Por lo tanto, al eliminar MS COMPILER, aún puede utilizar el IDE de MS que usted cree que tiene algún tipo de valor, y usar C99 para el 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 programación. La portabilidad del código en Windows-Linux-Solaris-AIX-etc suele ser importante en mi experiencia, y desafortunadamente no es compatible con las herramientas de MS.

Otros consejos

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

Es uno de los autores del nuevo modelo de memoria C ++ estandarizado para C ++ 0x. Por ejemplo, los siguientes artículos:

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

tiene 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, supongo que esta es una cuestión de prioridades.

  • Las características más interesantes de C99 ya están presentes en C ++ (alineación, declaración de variables en cualquier lugar, // comentarios, etc.) y probablemente ya se puedan usar en C en Visual Studio (si solo se está haciendo un código C dentro del compilador de C ++). Vea mi respuesta aquí para obtener 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 que ya existen en C ++, pero de una manera incompatible (lo siento, pero la implementación compleja de boolean en C99 es ridícula, en el mejor de los casos ... Ver Para obtener más información, visite http://david.tribble.com/text/cdiffs.htm . )
  • La comunidad C en Windows parece no existir o no es lo suficientemente importante como para ser reconocida
  • La comunidad de C ++ en Windows parece demasiado importante para ser ignorada
  • .NET es la forma en que Microsoft quiere que la gente programe en Windows. Esto significa C #, VB.NET, quizás C ++ / CLI.

Entonces, ¿sería Microsoft, por qué implementaría funciones que pocas personas usarían cuando las mismas funciones ya se ofrecen en más idiomas activos de la comunidad que ya utilizan la mayoría de las personas?

¿Conclusión?

Se incluirá

C ++ 0x, 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 se han implementado no se implementarán en los próximos años, a menos que suceda algo dramático (¿aparece un país lleno de desarrolladores de C99 de la nada?)

Editar 2011-04-14

Aparentemente, el " país lleno de desarrolladores de 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 suficientemente claro, supongo.

Editar 2012-05-03

Herb Sutter dejó en claro que:

  
      
  1. Nuestro objetivo principal es admitir la mayor parte de C99 / C11 que es un subconjunto de ISO C ++ 98 / C ++ 11. "
  2.   
  3. También por razones históricas enviamos un compilador C90 que acepta (solo) C90 y no C ++
  4.   
  5. No tenemos la intención de admitir las funciones ISO C que no forman parte de C90 o ISO C ++.
  6.   

La publicación del blog agrega enlaces y más explicaciones de esas decisiones.

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

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

Actualización :

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

  

Específicamente, en 2015 nuestra implementación de la biblioteca estándar de C99 está completa, excepto para las macros pragma CX_LIMITED_RANGE / FP_CONTRACT (irrelevante en C ++).

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 .

He estado involucrado en el trabajo de ISO C ++ (2000-2005), y Microsoft hizo contribuciones significativas a ese idioma. No hay duda de que funcionarán en C ++ 0x, pero necesitarán un poco más de tiempo que, digamos, Intel. Micosoft tiene que lidiar con una base de código más grande que a menudo usa sus extensiones propietarias. Esto simplemente hace para un testfase más largo. Sin embargo, admitirán la mayoría de C ++ 0x eventualmente (la exportación aún no se ama, o eso entiendo).

Cuando se trata de la norma ISO C, las personas que trabajan en el estándar no son representativas del mercado de Microsofts. Los clientes de Microsofts pueden usar C ++ 98 si solo buscan una mejor C. Entonces, ¿por qué Microsoft gastaría dinero en C99? Claro, Microsoft escogió partes, pero eso es un asunto sano. Los necesitarían para C ++ 0x de todos modos, ¿por qué esperar?

Desafortunadamente, el soporte de MSVC para C es muy deficiente. Solo es compatible con la parte de C99 que es un subconjunto de C ++ ... lo que significa que, por ejemplo, es físicamente imposible compilar ffmpeg o sus bibliotecas libav * en MSVC, porque usan muchas características de C99 como los elementos de estructura nombrados. Esto se agrava por el hecho de que libavcodec también requiere un compilador que mantenga la alineación de la pila, que MSVC no.

Trabajo en x264, que a diferencia de ffmpeg hace hace un esfuerzo para apoyar a MSVC, aunque hacerlo a menudo ha sido una pesadilla en sí mismo. No mantiene la alineación de la pila, incluso si pasa explícitamente la llamada de función más alta a través de una función de alineación de pila explícita basada en ensamblajes, por lo que todas las funciones que requieren una pila 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 pesa masivamente en cuanto al rendimiento.

Una publicación más reciente sobre la compatibilidad de las características C ++ 11 de MSVC para MSVC 2010 y 2011 es ahora 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á envejeciendo). Triste para los programadores de C, pero sospecho que Microsoft se preocupa más por la comunidad de C ++.

Visual C ++ 2008 SP1 contiene al menos partes de TR1, 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 en la función. Sin embargo, no leí nada oficial.

Información actualizada sobre esto:

Ahora hay (10 de noviembre de 2008) una " Vista previa comunitaria de la tecnología " (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 cambios de C ++ 0x implementados incluso cuando se libere VC10 ):

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

Algunos detalles sobre las novedades en el CTP VC10:

Como se señaló en el artículo anterior, " El compilador de Visual C ++ en Microsoft Visual Studio 2010 September Community Technology Preview (CTP) contiene compatibilidad con cuatro funciones de lenguaje C ++ 0x, a saber: "

  • lambdas,
  • auto,
  • static_assert,
  • referencias de valor

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

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

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

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top