rust - ¿Por qué io:: copy requiere que el lector y el escritor sean referencias mutables?
immutability traits (1)
¿Por qué std::io::copy
requiere que los argumentos del lector y del escritor se pasen como referencias mutables?
Puedo entender por qué el escritor necesita ser mutado para acomodar los datos que se le escriben, cambiando su estado interno.
Sin embargo, ¿por qué un lector también debe estar marcado como una referencia mutable? Si solo estoy leyendo datos, ¿no necesitaría simplemente una referencia a un tipo dado y no una referencia mutable?
Debido a que los tipos de Read
son, en general, one-shot: al leerlos, los estás mutando.
Considere la entrada estándar: solo se puede leer una vez, así que algo debe estar cambiando. Cuando lees desde un socket, es casi seguro que estás mutando un búfer interno que se usa para explicar las diferencias entre los paquetes de red que obtienes y la cantidad de datos que deseas leer en un momento dado. ¿Qué tal la lectura de una Chain
, que se utiliza para concatenar cosas legibles juntas? sin mutación, no puede hacer un seguimiento de cuál se supone que debe leer.
Claro, es posible tener un tipo de Read
que no necesite acceso mutable para realizar una lectura, pero eso no es universalmente cierto y, como no lo es universalmente, el rasgo de Read
exige un acceso mutable.