Для реализации трейта Read достаточно переопределить один метод из двух
02.08.2026При проверке реализации трейта чтения из потоков теперь достаточно переопределить один метод из пары, а не оба. Компилятор проверяет это отдельной аннотацией и сам выдаёт понятное сообщение, если не реализован ни один.
Какая пара
У трейта чтения есть два способа забрать данные. Первый — считать в переданный буфер заданного размера. Второй — читать в предоставленный буфер, который может быть больше, чем нужно, и сообщать, сколько использовано.
Почему нужны оба
Для большинства источников — файлов, сетевых соединений — второй способ эффективнее: не нужно знать размер заранее, и данные копируются один раз вместо двух.
Но для некоторых источников удобнее первый: он не требует поддержки второго способа на стороне источника. Обычно это простые типы — вектор байтов, тестовый источник.
Почему требование было избыточным
Когда появился второй метод, объявить его оказалось обязательным. То есть любой новый источник данных обязан был реализовать оба, даже если второй ему ничего не даёт. Для простых типов это была лишняя работа, а главное — лишний повод написать заглушку, которая молча ничего не делает.
Оригинал
allow only implementing Read::read_buf
Упоминаний: 1 · Просмотров: 2