RangeFrom es un tipo iterador de Rust que representa un rango no acotado a partir de un valor (p. ej., 5..) y se extiende teóricamente infinitamente. Su diseño ha sido controvertido durante más de una década.
El tipo fue introducido en 2014 en la RFC 198 (notación de slice) y formalizado como tipo mediante la RFC 439, que proponía ranges como construcciones genuinas del lenguaje en lugar de azúcar sintáctico para slicing. La implementación original de diciembre de 2014 (pull request 19858) incluía inmediatamente manejo deliberado de desbordamiento: cuando la iteración alcanza el valor máximo del tipo entero, el iterador se envuelve o entra en pánico en lugar de terminar. Esta decisión de diseño coincidía con bucles for de estilo C y reflejaba discusiones en IRC (en gran medida perdidas hoy) que favorecían intervalos abiertos infinitos sobre los acotados.
El comportamiento de desbordamiento creó fricción persistente. Dos días después de la fusión, se abrió un issue cuestionando el enfoque. Entre 2015 y 2016, surgieron múltiples reportes de errores de usuarios sorprendidos de que 1.. entrara en pánico en u8::MAX o creara un bucle infinito en compilación release. Un post de Reddit de 2016 resaltó la confusión; el parche de documentación posterior reconoció el comportamiento indefinido pero no cambió código alguno. En 2020, el comportamiento fue formalmente documentado y estabilizado, estipulando que el desbordamiento "puede entrar en pánico, envolver o saturar" según la implementación del trait Step y el perfil de verificaciones de desbordamiento.
En noviembre de 2023, la semántica de desbordamiento fue revisada mediante ACP #304. El mismo mes, una pre-RFC titulada "Fixing Range by 2027" propuso cambios más profundos: hacer que los tipos range sean Copy y desacoplar la implementación Iterator de los tipos Range*. La RFC 3550 (abierta diciembre 2025, fusionada mayo 2026) estandarizó nuevos tipos de range pero dejó el comportamiento de desbordamiento como pregunta sin resolver para el equipo libs-api.
El 4 de junio de 2024, el equipo libs-api decidió modificar el comportamiento actual: el valor final (T::MAX) ahora debería ser emitido incluso con verificaciones de desbordamiento habilitadas, y sin ellas simplemente se envuelve. Rust 1.96.0 (28 de mayo de 2026) estabilizó los nuevos tipos, cerrando un capítulo de diseño que se extendió durante doce años.
El autor enmarca esta historia como contexto para un artículo de seguimiento que expresa reservas sobre el diseño actual.
Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
¿No llega nada? Mira en la carpeta de spam — y marca el correo como «No es spam» para que la próxima vez llegue directo.