Error en compilador Rust al emular tipos avanzados

Fuentes: Torturing rustc by Emulating HKTs, Causing an Inductive Cycle and Borking the Compiler — ramblings of @harudagondi

Este artículo técnico explora una peculiaridad en el sistema de tipos de Rust y cómo un intento de emular tipos de orden superior (HKTs) llevó a un error de desbordamiento en la evaluación de requisitos de traits, causando que el compilador fallara. El autor, en su intento de crear un lenguaje de scripting funcional, se encontró con la limitación de Rust en cuanto a la manipulación de tipos como constructores de tipos. Para entender el problema, el artículo profundiza en conceptos de teoría de tipos, comparando valores con tipos, funciones con constructores de tipos, y explicando la distinción entre tipos y constructores de tipos (como Vec, que no es un tipo en sí mismo, sino un constructor de tipos que toma un tipo y devuelve otro). Se introducen los conceptos de 'kinds' (tipos de tipos) y type operators, culminando en la explicación de por qué Rust, aunque con Generic Associated Types (GATs), no implementa completamente HKTs.

La raíz del problema surge al intentar crear un wrapper que abstrae entre tipos simples y tipos con información de 'span'. Al intentar implementar esto, el compilador se topa con un bucle inductivo, un ciclo en la lógica de evaluación de traits, que resulta en el error de desbordamiento. El artículo ilustra esto con un ejemplo mínimo reproducible, demostrando que el error no es específico de una implementación particular, sino inherente a la forma en que Rust maneja los tipos y traits en este escenario. La solución, aunque no se presenta explícitamente, implica una comprensión más profunda de las limitaciones del sistema de tipos de Rust y cómo las GATs, aunque útiles, no pueden compensar completamente la falta de HKTs. En esencia, el artículo es una exploración de los límites del sistema de tipos de Rust, revelando cómo incluso los intentos aparentemente simples de extender su funcionalidad pueden desencadenar problemas inesperados y complejos.