Sigo leyendo sobre C99 y C ++ 11 y todas estas cosas totalmente dulces que se están agregando al estándar del lenguaje y que podrían ser agradables de usar algún día. Sin embargo, actualmente languidecemos en la tierra de escribir C ++ en Visual Studio.
¿Alguna vez se agregará alguna de las cosas nuevas en el estándar 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 ++:
Y específicamente, esta publicación en ella:
Muy útil. ¡Gracias!
c++
visual-studio
visual-c++
c++11
c99
Colen
fuente
fuente
Respuestas:
MS tiene una serie de respuestas públicas a esto, la mayoría de ellas culpando a sus usuarios. Como éste:
https://devblogs.microsoft.com/cppblog/iso-c-standard-update/
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=345360
Este es un estado de cosas bastante triste, pero también tiene sentido si sospecha que MS quiere encerrar a los usuarios: hace que sea muy difícil migrar el código moderno basado en gcc a MSVC, lo 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 código C99 e incluso tiene los mismos indicadores que gcc, lo que hace que sea mucho más fácil portar código entre plataformas. Además, el compilador de Intel funciona en Visual Studio. Entonces, al eliminar MS COMPILER, aún puede usar el MS IDE que parece pensar que tiene algún tipo de valor, y usar C99 al contenido de su corazón.
Un enfoque más sensato es pasar honestamente 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, lamentablemente, no es compatible con las herramientas de MS.
fuente
Herb Sutter es 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 mientras H. Sutter permanezca en Microsoft.
En cuanto a C99 incluido solo parcialmente en Visual Studio, supongo que esto es una cuestión de prioridades.
booleanoen C99 es ridícula, en el mejor de los casos ... Ver http://david.tribble.com/ text / cdiffs.htm para obtener más información)Entonces, ¿sería Microsoft, por qué implementaría características que pocas personas usarán cuando las mismas características ya se ofrecen en más idiomas activos de la comunidad que ya usa 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 funciones de C99 que aún no se han implementado no estarán en los próximos años, a menos que suceda 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:
La publicación 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/
fuente
restrict
palabra clave. Hay un montón de excelentes características de C99 que faltan en C ++, y son características que uso todos los días como programador de C.restrict
palabra clave, todavía se puede usar en C ++, aparentemente: stackoverflow.com/questions/776283/… . . .A partir de la versión preliminar 1 de VC2013 , 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
Actualizar:
De https://news.ycombinator.com/item?id=9434483 (Stephan T Lavavej también conocido como: STL es el mantenedor del equipo de STL @VC):
Consulte esta publicación para obtener más detalles: http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015-rc.aspx .
fuente
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 que la prueba sea más larga. Sin embargo, eventualmente admitirán la mayor parte de C ++ 0x (aunque la exportación aún no se ama, o eso tengo entendido).
Cuando se trata de 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? Por supuesto, Microsoft eligió las piezas cuidadosamente, pero eso es un asunto sensato. Los necesitarían para C ++ 0x de todos modos, así que ¿por qué esperar?
fuente
Lamentablemente, el soporte de MSVC para C es muy deficiente. Solo admite 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 utilizan muchas características de C99, como elementos de estructura con nombre. Esto se ve agravado por el hecho de que libavcodec también requiere un compilador que mantenga la alineación de la pila, cosa que MSVC no hace.
Trabajo en x264, que a diferencia de ffmpeg hace un esfuerzo para admitir 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 ensamblaje, por lo que todas las funciones que requieren una pila alineada deben estar deshabilitadas. También ha sido muy molesto que tampoco pueda usar varrays; quizás esto sea lo mejor, ya que aparentemente GCC los pesimiza enormemente en términos de rendimiento.
fuente
Una publicación más reciente sobre la compatibilidad de la función C ++ 11 de MSVC para MSVC 2010 y 2011 ya está en línea .
fuente
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 ++.
fuente
Visual C ++ 2008 SP1 contiene partes de TR1 al menos y, de vez en cuando, el equipo de Visual C ++ escribe en blogs o habla sobre C ++ 0x, así que supongo que lo admitirán en algún momento en la función. Aunque no leí nada oficial.
fuente
Información actualizada sobre esto:
Ahora hay (10 de noviembre de 2008) una "Community 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:
Como se indica en el artículo anterior, "El compilador de Visual C ++ en la Vista previa de tecnología de la comunidad (CTP) de septiembre de Microsoft Visual Studio 2010 contiene soporte para cuatro características del lenguaje C ++ 0x, a saber:"
fuente
Herb Sutter es el presidente del organismo de estándares 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 prueba de esto es, como mencionó OregonGhost, el TR1 que se incluye en la última versión de servicio de Visual Studio.
fuente
El equipo de Visual C ++ publicó una tabla de características de C ++ 0x que admite la versión de 2010 en http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language -características-en-vc10-the-table.aspx . Dado que puede haber un retraso 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.
fuente
Visual C ++ Bloq proporciona mucha información sobre varios puntos interesantes relacionados con el soporte de C ++ 11 en VC ++ 11, incluidas varias tablas
Blog del equipo de Visual C ++, características de C ++ 11 en Visual C ++ 11
fuente