Translate

miércoles, 22 de abril de 2026

C++26: El salto más grande desde C++11


La nueva versión del estándar, C++26, ya está prácticamente cerrada… y no es una actualización menor.


Estamos hablando de una versión que introduce:

  • Reflection (reflexión)
  • Mejoras reales en seguridad de memoria
  • Contracts (programación por contratos)
  • Un nuevo modelo async/concurrencia


En conjunto, esto posiciona a C++ como un lenguaje que quiere competir con Rust en seguridad y con lenguajes modernos en expresividad… sin perder su filosofía de zero-overhead. 


Reflection: C++ ahora puede “mirarse a sí mismo”

La reflection en tiempo de compilación es probablemente el cambio más disruptivo.

¿Qué significa?

Que el código puede inspeccionar tipos, atributos y estructuras en compile-time.


Antes:

  • Macros
  • Templates imposibles de leer
  • Mucho boilerplate


Ahora:

  • Metaprogramación más directa
  • Generación automática de código
  • Mejor tooling


Ejemplo conceptual:

enum Color { red, green, blue };

static_assert(enum_to_string(Color::red) == "red");



Esto antes era doloroso; ahora es natural.

Es compile-time es decir, no tiene costo en runtime


Impacto real:

  • Serialización automática
  • ORMs más simples
  • Validaciones generadas
  • DSLs internas más potentes


Seguridad de memoria (sin romper C++)


C++26 no intenta ser “safe by default” como Rust.

En cambio, introduce mejoras pragmáticas:

  • Librerías con chequeo de bounds
  • Mejor manejo de variables no inicializadas
  • Eliminación de ciertos comportamientos indefinidos
  • Opciones “hardened” del estándar


No requiere reescribir tu código existente


Esto es muy C++:

  • No rompe compatibilidad
  • Permite adopción gradual


Contracts: diseño por contrato (por fin)

Después de años de idas y vueltas, llegan los contracts:


[[pre: x > 0]]

[[post: result >= 0]]

int sqrt(int x);


También aparece:

contract_assert(...)


¿Qué aportan?

  • Validación de precondiciones
  • Validación de postcondiciones
  • Documentación ejecutable
  • Mejor debugging


Es básicamente traer ideas de:

  • Eiffel
  • Ada
  • .NET Code Contracts

Pero ahora en C++ estándar.


Nuevo modelo async: sender/receiver


C++ llevaba años con:

  • std::thread
  • std::future
  • async


Pero nada realmente composable.


Ahora aparece un modelo basado en sender / receiver


Características:

  • Composición funcional de tareas
  • Concurrencia estructurada
  • Mejor integración con coroutines
  • Pipeline de operaciones async


Esto unifica:

  • paralelismo
  • asincronía
  • ejecución


Similar conceptualmente a:

  • Reactive Streams
  • Rx
  • pipelines funcionales


C++26 no es una evolución incremental.

Es un intento claro de:

  • Modernizar el lenguaje
  • Mantener compatibilidad
  • Competir con Rust y lenguajes modernos