Un Zero Sized Type (ZST) es un tipo de dato que, por diseño, no tiene un tamaño de memoria asignado en tiempo de ejecución. Esto significa que las instancias de un ZST no consumen bytes en la pila (stack) ni en el montículo (heap). Su propósito principal es transmitir información a nivel de sistema de tipos (type system) o para representar conceptos abstractos que no requieren almacenamiento de datos, como marcadores de propiedad, permisos, o la ausencia de un valor concreto. El compilador optimiza completamente su almacenamiento, eliminando cualquier referencia a su espacio de memoria.
Los ZSTs son una característica fundamental en lenguajes de programación de sistemas como Rust. Ejemplos comunes incluyen la unidad tipo `()` (unit type), que representa la ausencia de un valor significativo (similar a `void` en C/C++ pero como un tipo concreto), y marcadores de trait como `PhantomData<T>`. En Rust, estructuras vacías como `struct MyMarker;` también son ZSTs. Se utilizan extensivamente en bibliotecas para implementar patrones como 'newtypes' sin overhead, para indicar la propiedad de datos en estructuras de concurrencia, o para definir tipos que solo existen para satisfacer requisitos de tipo genérico sin añadir datos.
Para un arquitecto, los ZSTs son importantes porque permiten diseñar APIs y estructuras de datos más expresivas y seguras sin penalización de rendimiento o memoria. Facilitan la implementación de patrones de diseño como 'type-state programming' o 'marker traits', donde el compilador puede verificar propiedades en tiempo de compilación. Al no consumir memoria, los ZSTs son ideales para representar conceptos puramente lógicos o de control, optimizando el uso de recursos. La comprensión de los ZSTs es crucial para construir sistemas de alto rendimiento y bajo nivel, especialmente en contextos donde la eficiencia de memoria es crítica, como sistemas embebidos, sistemas operativos o bibliotecas de infraestructura.