- El estándar de C++ de próxima generación que sigue a C++20
- No es un cambio de juego como C++98, C++11 o C++20, sino un cambio pequeño al nivel de C++17
Conozcamos los cambios del estándar de C++ (a lo largo de 40 años)
C++98
- A finales de los años 80, Bjarne Stroustrup y Margaret A. Ellis escribieron el famoso libro Annotated C++ Reference Manual (ARM)
- Este libro tenía dos objetivos
- Como existían demasiadas implementaciones independientes de C++, ARM definió las características de C++
- Sirvió como base del estándar de C++, C++98 (ISO/IEC 14882)
- C++98 incluyó varias características importantes
- Templates
- STL (Standard Template Library): incluye contenedores, algoritmos, strings y IO streams
C++03
- En C++03 (14882:2003) se hicieron correcciones técnicas muy pequeñas
- En la comunidad, a C++03 junto con C++98 se le llama "C++ legado"
TR1
- En 2005 ocurrió algo interesante: se publicó TR1 (Technical Report 1)
- TR1 fue un gran paso hacia C++11 y el primer paso hacia Modern C++
- Se basó en el proyecto Boost de miembros del comité de estandarización de C++
- Incluyó 13 bibliotecas que entrarían en el estándar de C++ de próxima generación (expresiones regulares, números aleatorios, smart pointers como
std::shard_ptr, tablas hash, etc.)
C++11
- Fue el siguiente estándar de C++, pero nosotros lo llamamos Modern C++. Ese nombre también incluye C++14 y C++17
- C++11 cambió por completo la forma en que desarrollamos en C++
- Además de los componentes de TR1, incorporó move semantics, perfect forwarding, variadic templates, constexpr y más
- Incluyó un modelo de memoria basado en threading y una API de threading
C++14
- Un estándar pequeño de C++. Introdujo read-writer locks, lambdas generalizadas y funciones constexpr
C++17
- Ni grande ni pequeño
- Incluye dos características sobresalientes: Parallel STL y un sistema de archivos estandarizado
- Cerca de 80 algoritmos de STL pueden ejecutarse mediante políticas de ejecución (paralela, secuencial, vectorial)
- Recibió mucha influencia de Boost: el sistema de archivos y tres tipos de datos (
std::optional, std::variant, std::any)
C++20
- C++20, al igual que C++11, cambió la forma en que programamos en C++
- En particular, hay cuatro aspectos grandes
- Ranges: con la biblioteca Ranges, se pueden expresar algoritmos directamente sobre contenedores y combinarlos con el operador de tubería para aplicarlos a flujos de datos infinitos
- Coroutines: hizo que la programación asíncrona se volviera dominante en C++. Sirve de base para trabajo cooperativo, event loops, flujos de datos infinitos y pipelines
- Concepts: cambió la forma de pensar y programar con templates. Permite imponer restricciones sobre argumentos de template o hacer verificación de tipos, y comprobarlo en tiempo de compilación
- Modules: permite superar las limitaciones de los archivos de encabezado. Promete varias cosas; por ejemplo, elimina la necesidad del preprocesador y, en última instancia, reduce el tiempo de compilación y facilita la construcción de paquetes
C++23
- A julio de 2023, C++23 está a la espera de la votación final
- Añade una característica pequeña, pero muy influyente para el lenguaje en sí: "Deducing this"
- Similar a Python, permite hacer explícito el puntero
this que se pasa implícitamente a las funciones miembro
- Esto simplifica la implementación de técnicas complejas como CRTP (Curiously Recurring Template Pattern) o el patrón Overload
- La biblioteca de C++23 también tiene adiciones importantes
- Permite importar directamente la biblioteca estándar con
import std; o aplicar format strings de C++20 en std:print y std:println
std::flat_map, que reemplaza a std::map en rendimiento
- La interfaz de
std::optional se amplía a una interfaz monádica para mejorar la composability
- El nuevo tipo de dato
std::expected
std::mdspan, un span multidimensional
std::generator, una coroutine para generar flujos de números
2 comentarios
Parece que todavía no hay noticias sobre un estándar de networking, ¿verdad?
Creo que incluso para el próximo estándar seguirá habiendo incertidumbre;;