Visual Studio 2010 Beta 2 y C++

Por fin anoche tuve un rato -y ganas- para instalarme la Beta 2 de Visual Studio 2010 en mi ordenador secundario, y por fin podré contar lo que llevo callándome bastante tiempo por el NDA de ser MVP… porque las novedades de Visual C++ 2010 son muchas y potentes, y seguro que a más de uno le voy a dar una alegría si no lo sabe ya por otras fuentes.

Pese a que hay cosas que ya son públicas desde hace mucho tiempo, voy a contarlas todas poco a poco aquí, y lo más seguro es que veáis más entradas mías sobre puntos concretos. No van en ningún orden de importancia, ni siquiera personal (bueno, sí, las que más me molan van al final), y antes voy a contar mi experiencia sobre la instalación.

Instalando. Primero lo instalé en mi máquina secundaria, un AMD X2 con 2GB de RAM y Windows 7 x86 Ultimate en inglés, pero antes tuve que desinstalar la versión anterior, de la que no diré más salvo que pude limpiarla sin problemas.

OJO CON DESINSTALAR LOS NUEVOS RUNTIMES DEL VISUAL C++ 2008 que el producto instala. Estos deben dejarse o correremos el riesgo de que luego nos peten la mitad de los programas que tengamos instalados. Considero que es una mala cosa eso de instalar runtimes no BETA dentro de una instalación BETA (o peor aún ni siquiera ALPHA), pero bueno, el Scatérgoris es de ellos.

Estuve probando varios programas y funcionaban bien, pese a la lentitud del IDE, que a veces se queda como autista o simplemente te ignora, frente a otras en las que la respuesta está casi adelantada al clic, así que me decidí a instalarlo en mi máquina principal, ya sabéis, un Q4 con 8GB de RAM y una espuerta de discos duros.

Si tenéis el SDK de Silverlight instalado, la instalación de la BETA 2 petará casi al final. Aunque no es ningún problema, ya que luego podéis desinstalar el SDK e instalarlo a mano a partir de la carpeta WCUSilverlight del DVD de instalación de esta misma BETA. Otro efecto adverso no tiene.

MSBUILD. Hasta la versión 2008, el sistema de construcción de proyectos era el llamado VCBUILD, que como su nombre indica es una especie de sistema de makefiles con esteroides. Pero el sistema es bastante obsoleto, y sólo era usado por Microsoft para Visual C++ ya que desde hace tiempo para los demás productos se viene utilizando MSBuild, que viene a ser lo mismo pero más moderno, basado en XML.

A mi personalmente es algo que me da igual porque no lo he usado más que integrado en el IDE y desde el IDE, así que tampoco sé muy bien qué ventajas tiene uno sobre el otro, aunque quizás la mejor de todas es que ahora el sistema de construcción es el mismo para todos los lenguajes.

No obstante, parece ser que las posibilidades de extensibilidad del más moderno son significativamente mejores que las del anterior, y supongo que serán útiles para aquellos que realicen compilaciones de gran tamaño.

Eso quiere decir que es necesario convertir los proyectos "vcproj" a "vcxproj", cosa que en esta BETA 2 se hace sin mayor problema, pero que en versiones anteriores fallaba estrepitósamente.

MFC. Aquí las novedades son relativamente pocas respecto al Feature Pack del VS2008SP1, pero alguna hay, como el restart manager, que es una extensión que, si tu aplicación peta, es capaz de recuperar tus documentos sin pérdida, o al menos eso es lo que proclaman. Parece ser que es la misma técnica y medios que se usan en, por ejemplo, Office, y lo cierto es que alguna que otra vez sí que me ha salvado el culo.

Luego tenemos los Task Dialogs, que son estas ventanas nuevas que vienen con Vista y 7 que permiten comunicación rica con el usuario, como la ventana de copiar archivos y similares.

image

Arriba podéis ver un ejemplo sacado de la documentación. La verdad es que no está nada mal, y se puede construir una ventana así con muy pocas líneas en C++.

SafeInt es una nueva biblioteca que permite manejar enteros con protección de desbordamiento en operaciones aritméticas, cosa que ni la biblioteca de C ni la de C++ tienen. Está basada en plantillas, de modo que al principio su uso puede resultar un tanto confuso. Un ejemplo sacado de la documentación:

SafeInt<uint>((uint)~0) > -1

devolverá cierto, mientras que si se hace con enteros normales, el resultado será falso. Para los legos, lo que estamos haciendo es una forma rápida de poner a unos todos los bits de un entero sin signo. ~0 es cero invertido, es decir, todo unos. Como lo moldeamos a un entero sin signo, eso significa que no importa el tamaño del tipo, estará lleno de unos de cabo a rabo. Ese valor, para un entero sin signo, es tropecientos mil trillones de trillones o más. Si se hace una comparación como

((uint)~0) > -1

el compilador comparará la pauta binaria. En ambos lados de la comparación, la representación binaria es la misma, todo unos, por lo que el compilador devolverá falso ya que para él ambos valores son iguales. Sin embargo, cuando usamos la versión segura, uno se asegura de que, efectivamente, tropecientos mil es mayor que menos uno.

C++ Estándar. También hay novedades en este aspecto, a ver si de una vez el comité se pone de acuerdo, que les cuesta más que a los políticos hablar de urbanismo. Lo que iba a ser el C++09 es muy posible que sea C++10 o superior. En fin.

La palabra reservada auto pierde su significado anterior (¿pone todavía alguien auto en las variables locales?) y pasa a indicar que la variable así cualificada es una cuyo tipo viene definido por el resultado de su valor-r. Para que me entendáis,

auto i=3;

significa que i es un int.

Las funciones lambda son el producto estrella de esta nueva futura revisión. Son un paso más allá de los punteros a función y los functors, ya que son funciones sin nombre que se pueden guardar en una variable… esto… de tipo auto (y esta es la razón que explica el cambio de significado de dicha palabra).

He dicho auto porque es la mejor forma de declarar un lambda y asignarlo a algo, y si no a ver quién es bonico que me dice el tipo de un lambda que toma tres enteros y devuelve un número en coma flotante sin llenar la declaración de paréntesis, asteriscos y demás menesteres.

Hay más novedades, como el operador decltype que devuelve el tipo de una expresión indicada. También están los declaradores de referencias a valores-r, que como su nombre indica declaran una referencia a un valor-r. Con static_assert tenemos la posibilidad de indicar aserciones en tiempo de compilación. Aunque creo que no pertenece al estándar, se crea la palabra reservada nullptr (y __nullptr) para asignar un puntero a nulo sin importar si estamos en C++ o en C++/CLI.

Si os fijáis, casi todas estas características están para dar un soporte eficiente a los lambdas. No voy a explicar aquí nada más de ellos porque pienso hablar largo y tendido sobre los mismo aquí… o en mi futuro libro si saco ganas para terminarlo.

Otras. Hay más novedades, como la eliminación de los caracteres trigráficos por defecto (se pueden activar), o una nueva opción de optimización de perfilado guiado. Para el que no lo sepa, un trigráfico es una secuencia de tres caracteres que se usa para especificar uno cuando el editor no lo tiene. De esta forma era como, hace muchos años, se podían poner ciertos caracteres inexistentes en los teclados, como ??) para indicar la llave de cierre ]. El estándar en ellos creo que especifica 10 diferentes.

Editor gráfico de Ribbons. Como lo lees. Visual C++ 2010 trata las Ribbons como un recurso más y proporciona un editor gráfico muy similar al de los cuadros de diálogo (que por cierto, también traen nuevos componentes largamente deseados), pudiendo escribir eventos y relacionar la Ribbon con partes del código. Ésta se almacena en un fichero XML embebido en el ejecutable, lo que seguro va a dar para algunos trucos que intentaré.

EL BOMBAZO: Para terminar, el bombazo. Cuando me enteré fue un bombazo, y he estado muchos meses comiéndome las uñas para que no se me escapara, y quizás haya que anunciarlo con letras bien gordas y a otro color:

¡¡VUELVE EL CLASS WIZARD!!

Sí señor, el magnífico, el inigualable, el incopiable, el ínclito Class Wizard. Así que ya no tenéis que seguir usando la morralla esa del Visual C++ 6.0 de los años de Maricastaña con un compilador todavía más obsoleto que uno que me sé y me callo. De todos modos, partes del mismo siempre han estado presentes, si bien algo camufladas.

Y para muestra, un botón:

image

5 comentarios en “Visual Studio 2010 Beta 2 y C++”

  1. Solo puedo decir w0w, paree que esta versión si me anima a seguir escribiendo ciertas cosas en C++, thanks por la info =).

    P.D. Y que paso con C++0x

  2. jeje, me has hecho ir al diccionario para ver el significado de “ínclito” (es lo que tenemos los argentinos, tomamos el lenguaje que nos dejaron hace 300 años y lo evolucionamos, descartando duplicidades como la “c”, “s” y “z” entre otras mejoras)

    Saludos

  3. @HardBit, C++0x es lo que debería haber sido C++09, que como no se sabe el año en que iba a salir (y esperaban que fuera antes del 2010) le dieron ese nombre temporal.

    @Bruno, pues fíjate tu que cosas, yo esa palabra la aprendí en un poema de Rubén Darío, “ínclitas razas ubérrimas, etc” que es de aquellos lares, Nicaragüense para más datos…

  4. @Ramón, no tengo todavía claro si se puede decir que esta vez sí, esta vez sí que [dicen] que lo han solucionado definitivamente… pero si te digo la verdad, fue en un mensaje de news interno que no sé dónde lo tengo y que no me acuerdo, pero ahora creo que puedes dejar el runtime donde te salga de los OO que ya se encargará Windows de tracearlo y actualizarlo cuando haga falta, o algo así.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *