La reflexión permite a los programas inspeccionar y manipular su propia estructura en tiempo de ejecución o compilación. Este artículo técnico compara las capacidades de reflexión en tiempo de compilación de C++, Zig y C3, destacando que todos estos lenguajes permiten razonar sobre tipos, enumeradores y miembros de estructuras sin coste de rendimiento en tiempo de ejecución.
C3 es un lenguaje de programación relativamente nuevo que prioriza la legibilidad, el rendimiento y la familiaridad para programadores de C/C++. A diferencia de otros sistemas, C3 no incluye recolección de basura pesada, excepciones ni RAII, y ofrece compatibilidad nativa con la ABI de C. Utiliza una sintaxis especial para la ejecución en tiempo de compilación, donde variables y constructos de control se prefijan con '$', lo que facilita identificar explícitamente qué código se ejecuta en cada fase. Sus macros están diseñadas para reemplazar las macros del preprocesador de C, extendiéndolas con evaluación en tiempo de compilación mediante el plegado de constantes.
En la práctica, C3 ofrece ventajas significativas en la introspección de estructuras y la validación de entradas. Por ejemplo, permite asociar valores de cualquier tipo a enumeradores y utiliza 'contratos' opcionales para validar entradas en tiempo de compilación. En contraste, Zig no dispone de macros tradicionales, dependiendo en su lugar de funciones y bloques 'comptime', bucles en línea y funciones de introspección de tipos. C++, por su parte, utiliza maquinaria de plantillas verbosa y compleja para lograr lo mismo.
La conclusión técnica señala que, aunque todos los lenguajes pueden realizar reflexión en tiempo de compilación útil para serializadores y herramientas genéricas, la ergonomía varía. C3 destaca por su mayor legibilidad y expresividad a través de su sistema de macros y su sintaxis especial, facilitando la distinción clara entre código de compilación y ejecución en tiempo de ejecución. Además, C3 se presenta como una opción más estable que Zig, que aún se encuentra en versiones 0.1x tras más de una década de desarrollo, mientras que C3 está cerca de su versión 1.0.
