Перетяжка, Премия ТПрогер, 13.11
Перетяжка, Премия ТПрогер, 13.11
Перетяжка, Премия ТПрогер, 13.11

В Python 3.17 предложили сделать Rust обязательным. CPython ждет крупнейшая реформа за 10 лет

Новости

Наконец-то Python станет еще безопаснее

16К открытий54К показов
В Python 3.17 предложили сделать Rust обязательным. CPython ждет крупнейшая реформа за 10 лет

Команда CPython обсуждает предложение (pre-PEP), которое может радикально изменить процесс сборки интерпретатора: Rust предлагают сделать обязательной зависимостью уже в Python 3.17.

Если PEP примут, Python впервые за историю станет «двуязычным» проектом — частично на C, частично на Rust.

Зачем Python нужен Rust

Разработчики приводят несколько причин:

  • Безопасность памяти. Rust устраняет категории ошибок, привычные для C: use-after-free, гонки, переполнения.
  • Подготовка к free-threaded Python. Переход к работе без GIL требует безопасных примитивов — Rust подходит идеально.
  • Производительность. Rust позволяет создавать быстрые структуры данных без ручного менеджмента памяти.
  • Современный стек. Linux, Android и Firefox уже используют Rust в системных компонентах — Python догоняет тренд.
  • Поддержка долгосрочного развития CPython. Сложность кода растет, а Rust упрощает сопровождение.

Что именно планируют делать

Стоит отметить, что Rust не планируют использовать в качестве полной замены C — появится возможность использовать оба языка. В идеале, должен получиться симбиоз:

  • Crate cpython-sys. Это набор автоматически сгенерированных привязок (FFI-слоя), которые позволяют Rust-коду безопасно «общаться» с внутренним API CPython.
  • Поддержка модулей на Rust. Некоторые части стандартной библиотеки можно будет писать и подключать так же, как C-модули — только на Rust.
  • Прозрачное разделение зон безопасности. «Безопасный» Rust будет использоваться по максимуму, а unsafe — только там, где нужно напрямую взаимодействовать с C-частями интерпретатора.

Уже есть рабочий пример — модуль _base64 на Rust, который оказался быстрее варианта на C.

Переходный план

Если PEP утвердят, переход займет три релиза:

  • Python 3.15 — предупреждение при сборке без Rust.
  • Python 3.16 — Rust остается опциональным, но его отключение потребует отдельного флага.
  • Python 3.17 — Rust становится обязательной частью сборки CPython.

То есть через два релиза Python не соберется там, где нет Rust.

Какие есть проблемы

В обсуждении упоминают несколько рисков. Например, циклическая зависимость при сборке — Rust требует Python, Python требует Rust.

Вместе с тем, внедрение нового языка приведет и к повышению порога входа для новых участников разработки CPython. Как минимум потому, что им придется изучить Rust.

Появятся и сложности со сборкой в ограниченных средах, например embedded-системах. При этом остается неясной судьба Rust-API для сторонних расширений — скорее всего, его не откроют.

Что это значит для сообщества

Для пользователей Python почти ничего не изменится. А вот для разработчиков интерпретатора это станет одним из самых крупных сдвигов в истории проекта.

Так, Python наконец-то станет сильно безопаснее. При этом CPython получит более надежный фундамент для будущих фич вроде полного отказа от GIL.

Следите за новыми постами
Следите за новыми постами по любимым темам
16К открытий54К показов