Подтвердить что ты не робот

Почему io:: copy требует, чтобы читатель и писатель были взаимозаменяемыми ссылками?

Почему std::io::copy требует, чтобы как аргументы читателя, так и писателя были переданы как изменяемые ссылки?

Я могу понять, почему автор должен быть мутирован, чтобы записывать на него данные, изменяя его внутреннее состояние.

Однако почему читатель должен быть помечен как изменяемая ссылка? Если я только читаю данные, тогда мне бы просто не нужна ссылка на данный тип, а не изменяемая ссылка?

4b9b3361

Ответ 1

Поскольку типы Read, в общем, одноразовые: путем чтения из него вы мутируете его.

Рассмотрите стандартный ввод: вы можете только читать с него один раз, поэтому что-то должно меняться. Когда вы читаете сокет, вы почти наверняка мутируете внутренний буфер, используемый для учета различий между сетевыми пакетами, которые вы получаете, и сколько данных вы хотите читать в любой момент. Как насчет чтения из Chain, который используется для конкатенации читаемых вещей вместе; без мутации, он не может отслеживать, из какого из них он должен читать.

Конечно, возможно иметь тип Read, который не нуждается в изменяемом доступе для выполнения чтения, но это не универсально истинно, и поскольку это не универсально истинно, свойство Read требует изменчивого доступа.