Historia y origen del tipo RangeFrom en Rust

Fuentes: RangeFrom, Part 1: History and background

Este artículo es la primera parte de una serie que reconstruye la historia y los antecedentes del tipo RangeFrom en Rust, un tipo que representa rangos sin límite superior, como n.. . Se explica qué es un rango en el lenguaje, qué variantes existen (RangeFull, RangeTo, RangeFrom, Range y sus versiones inclusivas) y para qué se utilizan, principalmente indexación de slices e iteración.

El recorrido comienza con el RFC 0198, que introdujo la notación de rangos para slicing, y continúa con el RFC 0439, que consolidó los traits que se usan hoy y propuso tratar los rangos como tipos de primera clase. El autor analiza el pull request rust#19858, que añadió los nuevos tipos de rango, y reproduce la implementación original de RangeFrom, en la que ya aparecía un desbordamiento deliberado para que el iterador no terminase nunca. También repasa la introducción simultánea del trait Step, todavía inestable.

Para explicar la decisión de permitir el desbordamiento, el autor contactó con @nrc, uno de los implementadores originales, quien recordó que el debate se centró en si n.. debía iterar de forma indefinida o detenerse en el valor máximo, y que se optó por la primera opción por analogía con el bucle for de estilo C. El texto detalla las discusiones posteriores en los issues rust#20249, rust#25696 y rust#25708, así como las notas añadidas en rust#32592 y la estabilización del comportamiento en rust#72368, que delega en la implementación de Step la decisión entre panic, wrap o saturación. La serie continuará en una segunda parte con las opiniones del autor sobre el diseño.