GCC 5.1

El pasado 22 de abril fue publicada la nueva versión 5.1 de la colección de compiladores GCC para los lenguajes C, C++ y Fortran, entre otros. Este lanzamiento supone un hito en la trayectoria de GCC, al presentar un compilador 100% conforme con el nuevo estándar del lenguaje C++2014 a pocos meses de su publicación oficial. Entre las muchas funcionalidades implementadas, cabría destacar muy especialmente:
  • Funciones lambda genéricas.
  • Expresiones constantes de mayor complejidad.
  • Biblioteca estándar conforme con los estándares C++11 y C++14. La funcionalidad ofrecida para expresiones regulares a través del fichero de cabecera <regex> es, sin embargo, aún incompleta, por lo que recomiendo el uso de la biblioteca del mismo nombre ofrecida por Boost (visítese www.boost.org para mayor información).
  • Implementación experimental de futuras adiciones al lenguaje (en la forma de especificaciones técnicas), tales como las plantillas de clase std::experimental::any<> y std::experimental::not_fn<>, entre otras novedades.
Es de esperar la pronta disponibilidad del compilador en el sistema MS Windows, por ejemplo a través de la distibución proporcionada por el proyecto mingw-w64 (visítese mingw-w64.yaxm.org para mayor información).

Punteros inteligentes (V): Propiedad compartida (segunda parte)


std::weak_ptr


La plantilla de clase std::weak_ptr<>, el tercer tipo de puntero inteligente que analizaremos en esta serie de posts, se encuentra intrínsecamente ligada al uso de la propiedad compartida, permitiendo interrumpir referencias circulares de objetos std::shared_ptr<>.

A modo de ejemplo, consideremos el patrón de diseño de nombre observador (observer pattern en Inglés), propio de la programación orientada a objetos. Se desea implementar un notificador al que pueda suscribirse un número arbitrario de observadores. El notificador deberá informar de forma automática a todos los observadores registrados de cualquier cambio en su estado mediante el envío de un mensaje, sin que esto afecte sustancialmente a la implementación de sus clases.

Se recomienda al lector interesado en profundizar en éste y otros patrones de diseño que consulte la obra clásica "Design Patterns", de E. Gamma et al., referencia obligada en este campo.

Gestión de memoria (VII)

Registros de la CPU


Como se ha mencionado en posts anteriores de esta serie de artículos dedicados a la gestión eficiente de la memoria, los registros de la CPU son espacios de memoria de acceso rápido integrados en el microprocesador, típicamente del tamaño de una palabra (64 bits en la arquitectura x86-64). En ellos pueden almacenarse copias tanto de instrucciones como de datos contenidos en la memoria física de la computadora.

Gestión de memoria (VI)

La importancia de la localidad


La mayoría de nuestros algoritmos y aplicaciones satisfacen una o ambas de las siguientes propiedades [1]:
  • Localidad espacial: Una vez se referencia una determinada dirección en memoria, es altamente probable que en breve se referencie una dirección contigua o próxima a ella.
  • Localidad temporal: Una vez se referencia una determinada dirección en memoria, es altamente probable que ésta sea referenciada nuevamente en un futuro próximo.
En base a ello, una computadora puede hacer uso de una jerarquía de memorias caché con el fin de reducir el tiempo de acceso a los datos residentes en memoria y/o para almacenar instrucciones de uso frecuente.