13 puntos por xguru 2023-07-13 | 2 comentarios | Compartir por WhatsApp
  • 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

 
carnoxen 2023-07-13

Parece que todavía no hay noticias sobre un estándar de networking, ¿verdad?

 
penza1 2023-07-20

Creo que incluso para el próximo estándar seguirá habiendo incertidumbre;;