La importancia de C++23 en la sociedad actual es innegable. C++23 ha sido objeto de interés y debate en diferentes ámbitos, desde la política hasta la cultura popular. Su impacto en la vida diaria de las personas es evidente, y su influencia se hace sentir en todos los aspectos de la sociedad. En este artículo, exploraremos el papel de C++23 en la actualidad, analizando su relevancia y el papel que desempeña en la vida moderna. Desde sus orígenes hasta su impacto en el mundo contemporáneo, C++23 es un tema que merece ser estudiado y comprendido en su totalidad.
C++23 es el nombre informal para la revisión de la ISO/IEC, el estándar para el lenguaje de programación C++ que sigue a la revisión C++20. El borrador actual es N4878. Se estima que la versión sucesora será C++26.
En febrero de 2020, en la reunión final para C++20 en Praga, se adoptó un plan global para C++23: La primera reunión WG21, centrado en C++23, estaba planeada para junio de 2020 en Varna, pero se canceló debido a la pandemia de COVID-19, al igual que la reunión de noviembre de 2020 en Nueva York y la reunión en Kona (Hawái), en febrero de 2021. Es poco probable que haya una reunión presencial antes de 2022. Mientras tanto, se llevan a cabo reuniones virtuales.
Las principales características esperadas para C++23, incluidas algunas postergadas que no lograron entrar en C++20, son:
assert<>
, para la que se formó un nuevo grupo de estudio (SG21) para trabajar en una nueva propuesta.Esta lista no está confirmada para C++23, ya que algunas características podrían postergarse para C++26, o incluso ser abandonadas.
En la ausencia de reuniones presenciales WG21, pocas características nuevas se han añadido al borrador de C++23. Pero las siguientes se agregaron luego de la reunión virtual de WG21 del 9 de noviembre de 2020, en la que se aprobaron mediante encuestas:
std::size_t
y el correspondiente tipo con signo.contains
para std::basic_string
y std::basic_string_view
, para comprobar si la string contiene una subcadena dada.<stacktrace>
, basada en Boost. Stacktrace, para presentar la secuencia de invocaciones de funciones cuando el ejecutable aborta con un error.std::is_scoped_enum
.<stdatomic.h>
para interoperabilidad con C atomics.La gran mayoría de las características nuevas responden a un plan de largo plazo para habilitar mejores formas de programación. Las tecnologías que habilitan estas nuevas formas de programar no suelen centrarse en una característica nueva sino en un conjunto de ellas, que se implementan de a poco en diferentes versiones de C++. C++20 es la versión que más cambios transformadores ha introducido, con la introducción de módulos, corrutinas, rangos y conceptos como ejemplos prominentes. A modo de ejemplo, rangos es la consumación de una serie de características que se fueron añadiendo paulatinamente desde C++11.
No se espera que C++23 tenga el mismo impacto, pero ya se vislumbran algunas de las tecnologías generales que se podrían habilitar en esa versión:
C++ tiende a facilitar la escritura indirecta de clases: en lugar de escribir el código de la clase, se podrá escribir código para metaclases que funcione como una fábrica de clases en tiempo de compilación. La definición plantillada de clases opera en este sentido, C++ avanza hacia la posibilidad de escribir código claro en funciones y expresiones constantes (ejecutadas en tiempo de compilación) para un control preciso en la definición de clases. Las características involucradas son:
Algunas de estas características tienen fuerte base en Conceptos, introducidos en C++20.
Algunas de las aplicaciones de los ejecutores que se están desarrollando para C++23:
La posibilidad de lanzar porciones de código ejecutable en otros núcleos (incluso en otras máquinas en red) de manera eficiente inspira el desarrollo de estas características:
C++20 introdujo módulos, la primera alternativa real para #include
. Sin embargo la propia biblioteca estándar no ha sido modularizada todavía, lo que está previsto para C++23. No se vislumbra la eliminación del preprocesador, que por ahora sigue siendo una pieza fundamental de C++, pero sí se reconoce el esfuerzo por presentar una alternativa completa para proyectos nuevos. El preprocesador será necesario siempre que se usen bibliotecas antiguas, y se podrá prescindir con bibliotecas renovadas basadas en módulos. En la próxima década se prevé una atenuación pronunciada del uso del preprocesador.
Los módulos no importan macros, lo que presenta un inconveniente en funciones basadas en ellas, como assert<>
. Muchas macros se pueden reemplazar por funciones constantes, ejecutadas en tiempo de compilación. Éstas son algunas características que contribuyen a evitar el preprocesador: