Ввод-вывод переехал из 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