Google и Mozilla уже перешли на Rust, теперь очередь за Python.

Два разработчика CPython предложили добавить язык программирования Rust в кодовую базу Python. Эмма Смит и её коллега опубликовали предварительное предложение по улучшению Python (Pre-PEP), в котором обосновали необходимость этого шага. Пока Rust планируется использовать только для написания опциональных модулей расширения, но в будущем он может стать обязательной зависимостью.
Главная причина внедрения Rust — повышение безопасности памяти. Язык предотвращает целые классы ошибок на уровне компиляции: выход за границы массива, обращение к освобождённой памяти и гонки данных в многопоточном коде. Это особенно актуально для free-threaded Python, где безопасность потоков критически важна. Проект RustBelt даже формально доказал корректность гарантий безопасности Rust для кода без использования небезопасных конструкций.
CPython регулярно сталкивается с багами из-за неправильной работы с памятью. Авторы предложения считают, что Rust радикально сократит число таких проблем. Даже если часть кода останется небезопасной из-за взаимодействия с C API, основная логика модулей будет написана на безопасном Rust.
Rust уже активно используется крупными проектами на C и C++. Ядро Linux, Android, Firefox и множество других систем внедряют этот язык для повышения надёжности. Google уже отчитался о позитивных результатах применения Rust в Android. Интересно, что от 25% до 33% новых расширений для Python пишутся именно на Rust — внедрение языка в сам CPython может дополнительно простимулировать это направление.
Помимо безопасности, Rust предлагает высокопроизводительные структуры данных из стандартной библиотеки. Векторы, хеш-таблицы, мьютексы — всё это реализовано с нулевыми накладными расходами и хорошо документировано. Система макросов Rust превосходит макросы C: декларативные макросы гигиеничны и не захватывают переменные случайно, а процедурные позволяют делать мощные трансформации кода. Библиотека PyO3 активно использует процедурные макросы для упрощения работы с Python API.
Разработчики уже создали прототип с модулем _base64, который демонстрирует ускорение работы при использовании Rust. Для интеграции понадобится новый крейт cpython-sys с FFI-определениями C API. Генерировать биндинги предлагается через bindgen — официальный инструмент Rust, который используют даже в проектах Linux и Android. Cargo умеет вендорить зависимости из коробки, так что загрузка пакетов во время сборки не будет обязательной.
Rust поддерживает все платформы из PEP 11 и даже больше. Все tier-1 платформы Python соответствуют tier-1 или tier-2 в Rust с полным набором инструментов разработчика. Кросс-компиляция настраивается легко — достаточно установить нужную цель и указать линкер.
Авторы отказались от идеи использовать готовую библиотеку PyO3 внутри CPython. Это создало бы лишний уровень абстракции и замедлило разработку: каждое новое API сначала добавлялось бы в PyO3, потом версия обновлялась бы в CPython. С bindgen новые API становятся доступны автоматически.
Существует проблема взаимной зависимости: компилятор Rust использует Python для бутстрэпа. Но решения есть. Можно собрать старую версию Python, затем Rust, потом новый CPython. Скрипты бутстрэпа Rust совместимы даже с Python 2, так что проблема решаема. Альтернативы — использование PyPy или отказ Rust от Python в процессе сборки.
Для текущих разработчиков CPython предусмотрены обучающие ресурсы. The Rust Book предлагает полное введение в язык, есть также Rust for C++ programmers и официальные обучающие материалы. Планируется создать команду экспертов по Rust и добавить туториал в devguide. Для работы с аргументами функций может понадобиться адаптация Argument Clinic или создание процедурного макроса на Rust.