domingo, 14 de marzo de 2010

Un paso más hacia el nuevo C++

Ayer terminamos la reunión del comité de estandarización ISO C++. La reunión la hemos celebrado en Pittsburgh en CERT Software Engineering Institute de la Universidad de Carnegie-Mellon.

Dentro de un par de semanas escribiré un informe más detallado, pero me parece que hay algunas cosas relevantes que resaltar.

Por una parte hemos aprobado la emisión de un FCD (Final Committee Draft). Esto significa que se abrirá un periodo para que las entidades de normalización nacional puedan emitir comentarios y un voto afirmativo o negativo. En el caso de España, este proceso se llevará a cabo a través de AENOR y del comité CTN71/GT21, que es el que se encarga de seguir la normalización de C++ a nivel nacional. Cualquier persona interesada en el comité puede contactarme en la dirección josedaniel.garcia en uc3m.es. Está previsto que el documento FCD esté disponible a primeros de abril y a partir de ahí se abrirá un plazo de cuatro meses para emitir comentarios.

Además se ha aprobado de forma final el estándar ISO/IEC 29123 (C++ Special Math Functions). Este estándar defina una extensión opcional al estándar ISO/IEC 14882 (C++), que ofrece funciones matemáticas avanzadas en C++. ¿Que se entiende por funciones matemáticas avanzadas? Son funciones que uno no usa todos los días (polinomios de Leguerre, integrales elípticas, funciones de Bessel, ...). Está bien que esto sea una extensión y no parte del estándar C++, porque digamos que no son cosas que use todo el mundo :-).

Por último, desde la última reunión en Santa Cruz (California), hemos aprobado diversos cambios:
  • Se ha ampliado el uso de decltype().
  • Se ha mejorado el uso de los atributos C++ como mecanismo de anotación de código. Este permitirá limitar mucho el uso de las pragmas. Por ejmplo, se espera que OpenMP deje de usar pragmas y pase a usar atributos.
  • Se permite la conversión automática de lambdas a punteros a función. Esto permitirá pasar un lambda a una función que espera un puntero a función.
  • Las funciones constexpr pueden ahora tomar parámetros de tipo referencia.
  • Se ha mejorado las reglas que gobiernan la generación de operaciones de movimiento.
  • Se ha eliminado el uso de export. Esta era una característica de C++ 2003 que casi ningún compilador había conseguido implementar.
  • Se ha actualizado la biblioteca de generación de números aleatorios después de la eliminación de los conceptos.
  • Se han despreciado (deprecated) las especificaciones de excepciones. Es decir, no se eliminan pero es algo que en el futuro podría eliminarse. Las especificaciones de excepciones tenían varios problemas, entre otros algunos relacionados con el rendimiento. En su lugar se ha incluido la nueva especificación noexcept.
  • Se ha añadido la especificación noexcept para funciones. Una función noexcept garantiza que no va a lanzar una excepción. Si viola esta promesa el programa termina de forma abrupta invocando a terminate().
  • Se han incorporado operadores de comparación de igualdad a los contenedores no ordenados.
  • Se ha simplificado notablemente la interfaz de la clase pair.
  • Se ha añadido un mecanismo de iniciación explícita de variables atómicas (concurrencia de bajo nivel).
  • Se han mejorado notablemente los futuros como mecanismo de concurrencia de alto nivel.
  • Se han solucionado problemas derivados de la gestión de objetos thread_local.
  • Se ha mejorado la especificaciones de los iteradores.
  • Se han corregido muchos problemas menores en el documento del estándar.
Con todo esto el estándar empieza a tomar forma. Las previsiones más optimistas indican que el estándar podría cerrarse en la reunión que tendrá lugar en Madrid en marzo de 2011.

Como se puede ver. Esto es un pequeño resumen de una semana de seis días de trabajo (Si, el comité también se reune los sábados).

--
  J. Daniel García
  Presidente del comité español de normalización de C++

4 comentarios:

  1. Todo lo que sea estandarizar es un acierto y sobre trabajar los sabados, ¡moderacion! :)

    ResponderEliminar
  2. Parece que todos estos cambios son a "bajo nivel", para mejoras de rendimiento, estilo y claridad.
    ¿Esperas alguna modificación gorda en el C++ que modifique el lenguaje de forma importante?

    Un saludo,

    Ignacio del Olmo

    ResponderEliminar
  3. Bueno, Ignacio, tienes todo un nuevo estándar que modifica el lenguaje de forma importante. Por poner algunos ejemplos:
    · Move constructors.
    · Rvalue references.
    · Lambdas.
    · Variadic templates.
    ...
    De hecho todos "estos cambios" cruzan todos los niveles: rendimiento, estilo, diseño, compiladores, optimizadores, modelo de memoria, modelo de sincronización... En mi opinión este es un nuevo C++, y a la vista de la entrada: "Un paso más hacia el nuevo C++" creo que no soy el único.

    csr

    ResponderEliminar
  4. En mi opinión, más allá de características concretas, creo que se ha dado un paso importante en el objetivo de hacer de C++ un lenguaje más fácil de enseñar y de aprender.

    Pero para evaluar esto tendremos que esperar un poco y ver la aceptación real que tienen estos cambios.

    ResponderEliminar