Este artículo relata el proceso seguido por el autor para conseguir que el compilador de Rust rechace, en tiempo de compilación, una canalización de reductores paralelos susceptible de provocar carreras de datos. El trabajo se enmarca en ruxe, una biblioteca de aprendizaje inspirada en Redux que el autor desarrolla para Rust.
El texto parte de una necesidad profesional: en sistemas industriales de gestión energética, varios controladores concurrentes comparten el estado de la planta mediante un patrón tipo Redux en Python. Con telemetrías de hasta 50 ms por equipo y decenas de registros por lectura, la fase de reducción secuencial se convierte en el cuello de botella. La solución propuesta consiste en paralelizar los reductores de cada subsistema —solar, baterías, contadores, red— siempre que sus «slices» de estado sean disjuntas.
El núcleo del artículo es técnico. Tras definir Redux y sus tres reglas (fuente única de verdad, estado inmutable desde fuera y reductor puro), el autor introduce la noción de disyunción entre reductores: si cada uno solo escribe en su propio slice, la ejecución paralela es segura. La pregunta es cómo obligar al compilador a verificar esa propiedad.
El primer intento, un trait AllDistinct recursivo sobre tuplas, choca con una limitación del lenguaje: Rust estable no permite expresar desigualdad de tipos en los bounds (H != T), por lo que no se puede implementar NotIn. El artículo deja entrever un segundo enfoque, no mostrado en el fragmento, que sortea esa restricción.
