Rust carece de herencia de clases al estilo de los lenguajes orientados a objetos: no existen clases, declaraciones de subclases ni campos heredados de una clase padre. Sin embargo, las necesidades que la mayoría de los programadores resuelve con herencia —interfaces compartidas, comportamiento reutilizable y, con menor frecuencia, almacenamiento compartido— se pueden cubrir en Rust con un conjunto variado de herramientas. El artículo presenta nueve rompecabezas de diseño con sus soluciones idiomáticas, que van desde métodos auxiliares compartidos en enteros hasta métodos orientados a bytes restringidos a parámetros genéricos concretos.
La primera técnica, los métodos por defecto en traits, define un trait Integer con dos métodos requeridos (min_value y max_value) y un método por defecto (exhausted_range) que comparten todos los tipos enteros que lo implementan, como se usa en el crate RangeSetBlaze. La segunda, los supertraits, se ilustra modelando un Servo y un ServoPlayer para aplicaciones en microcontroladores: el segundo requiere el primero como supertrait, lo que permite funciones genéricas que acepten cualquiera de los dos. La tercera, los extension traits, permite añadir métodos a tipos ya existentes —como usize— sin modificarlos, definiendo un trait propio e implementándolo para el tipo deseado. El artículo aclara la diferencia terminológica entre inherit (heredar) e inherent (propio del tipo en Rust).
El texto repasa además seis técnicas restantes, cada una vinculada a un problema concreto: dotar a un enum pequeño del conjunto estándar de comportamientos como Clone, Debug y Hash; conseguir que un wrapper se comporte como el tipo que envuelve mediante Deref; añadir union() a cualquier colección de conjuntos de rangos; tratar de forma uniforme quince tipos similares a enteros; restringir un método orientado a bytes únicamente a OutputArray<8>; y serializar solo valores serializables al persistir en memoria flash. Los ejemplos se inspiran en crates reales como device-envoy, orientado a los microcontroladores ESP32 y Raspberry Pi Pico.
El autor, Carl K., colaborador habitual del Seattle Rust User Group, acompaña el texto con un vídeo y un repositorio (CarlKCarlK/inherit) donde se puede consultar el código completo. La tesis central es que la ausencia de herencia en Rust es una decisión de diseño: obliga a separar la interfaz, el comportamiento y el almacenamiento en mecanismos distintos —traits, métodos por defecto, supertraits y newtypes— lo que produce APIs más explícitas y componibles que las jerarquías de clases tradicionales.
