Ввод-вывод переехал из std в core и alloc — код без стандартной библиотеки получил трейты
18.07.2026Трейты и функции ввода-вывода постепенно переносятся из std в core и alloc. Летом 2026 года завершалась самая объёмная часть — чтение, буферизованный ввод-вывод и связанные функции.
Зачем это делается
Стандартная библиотека не сводится к аллокатору и коллекциям. В ней есть функции, которые реализованы поверх системных вызовов, и те, что требуют её собственных механизмов. Код, работающий без неё, не может ни то, ни другое.
Перенос разделяет типы по тому, что им действительно нужно. Тем, кому нужен аллокатор, попадает в alloc; тем, кому не нужно ничего, — в core.
Что именно переехало и куда
В core отправились то, что не требует выделения памяти: вид ошибки ввода-вывода, ошибка как таковая, позиционирование в потоке и связанная с ним метка, счётчик элементов, примитив записи.
В alloc — то, что требует памяти: трейт чтения, буферизованное чтение, функция чтения строки, и наконец все буферизованные типы — чтение, запись, построчная запись.
Что это даёт коду без стандартной библиотеки
Появляется возможность читать файлы и работать с потоками там, где раньше этого сделать было нельзя. В встраиваемых конфигурациях это обычно означает, что не нужно тащить полную стандартную библиотеку только ради одного трейта.
Перенос оказался возможен не сам по себе: потребовалось обобщение трейтов ввода-вывода так, чтобы они не зависели от типов, которые считаются фундаментальными. Это подготовительные работы, видимые в предыдущих изменениях.
Совместимость
Прежние пути сохранены как переходники, то есть существующий код продолжает собираться. Переход можно делать постепенно, по одной операции за раз.
Оригинал
move std::io::Read to alloc::io; в том же месяце — read_to_string, BufRead и буферизованные типы; см. также перенос в core::io с апреля 2026 года
Упоминаний: 1 · Просмотров: 3