El artículo de Yoshua Wuyts describe su visión a largo plazo para Rust, centrándose en tres áreas clave de desarrollo que buscan mejorar significativamente la seguridad y la expresividad del lenguaje. Rust ya es conocido por su sistema de borrow checker, que garantiza la seguridad de la memoria en tiempo de compilación, pero Wuyts cree que hay margen para mejoras sustanciales.
Efectos: Actualmente, Rust soporta 'function colors' como async fn y try fn, que son una forma de 'tipos de efectos'. Wuyts propone extender esto para proporcionar garantías más fuertes sobre el comportamiento de las funciones, como asegurar que no provoquen 'unwinding' (pánico), que terminen, que sean deterministas o que no llamen a APIs del sistema operativo. Esto permitiría crear funciones más predecibles y seguras, especialmente en sistemas críticos.
Tipos Subestructurales: El sistema de tipos de Rust es 'affine', lo que significa que cada valor se usa una sola vez. Wuyts explora tipos 'lineales' (usados exactamente una vez) y 'ordenados' (usados exactamente una vez en un orden específico). Los tipos lineales previenen fugas de memoria, mientras que los tipos ordenados garantizan direcciones de memoria estables. El trabajo actual en traits como Move y Forget busca desbloquear estas capacidades, aunque requiere mejoras adicionales en el lenguaje.
Tipos de Refinamiento: Rust utiliza verificaciones de límites en tiempo de ejecución para detectar errores de acceso fuera de rango. Los tipos de refinamiento permitirían realizar estas verificaciones en tiempo de compilación, a cambio de un mayor tiempo de compilación, eliminando la necesidad de verificaciones en tiempo de ejecución. 'Pattern types' y 'view types' son ejemplos de cómo se podría implementar esto, permitiendo, por ejemplo, tener múltiples referencias mutables a un mismo tipo, siempre y cuando no accedan a los mismos campos.
En resumen, la visión de Wuyts para Rust implica una evolución hacia un lenguaje aún más seguro y expresivo, aprovechando conceptos avanzados de la teoría de tipos para proporcionar garantías más fuertes y permitir un control más preciso sobre el comportamiento del código. Esto no es un cambio inmediato, sino un esfuerzo a largo plazo que busca convertir a Rust en el lenguaje de producción más seguro disponible, aunque reconoce que aún hay camino por recorrer antes de alcanzar el nivel de seguridad de lenguajes como Ada/SPARK.
