Python на стероидах Rust - Встречайте RustPython!

18 Feb, 2026
RustPython Logo

Знакомая ситуация: пишешь что-то на Python, радуешься скорости разработки и читабельности кода, но потом сталкиваешься с задачей, где нужна производительность на уровне нативных приложений или возможность запускать код в не самых стандартных средах. Что делать? Переписывать все на C++ или Rust? А что, если можно получить лучшее от обоих миров?

Именно эту дилемму призван решить проект RustPython — полноценный интерпретатор Python 3, написанный с нуля на Rust. И это не просто обертка над CPython, а независимая реализация, открывающая совершенно новые горизонты для вашего Python-кода. Забудьте о GIL в привычном смысле и приготовьтесь увидеть Python там, где его раньше было сложно представить.

Зачем нам Python, написанный на Rust?

На первый взгляд, идея переписать интерпретатор популярного языка на другом может показаться странной. Ведь у нас уже есть CPython, PyPy, Jython, IronPython... Но RustPython занимает уникальную нишу, предлагая ряд преимуществ, которые особенно ценны в современном мире разработки:

  • Производительность и безопасность Rust: Rust славится своей скоростью, безопасностью памяти и отсутствием сборщика мусора в традиционном понимании. Перенос интерпретатора на Rust позволяет потенциально избавиться от многих проблем, присущих C-реализациям, и получить выигрыш в скорости.
  • Встраиваемость: Rust-экосистема идеально подходит для создания легковесных, встраиваемых решений. RustPython позволяет интегрировать Python-скриптинг в любое Rust-приложение, открывая двери для кастомизации и расширения функциональности без перекомпиляции основного кода.
  • WebAssembly (WASM): Это, пожалуй, одна из самых захватывающих возможностей. Компиляция RustPython в WASM означает, что вы можете запускать Python-код прямо в браузере, на серверлесс-функциях или даже на IoT-устройствах, где традиционный Python был бы слишком тяжел.

Кому это будет интересно? В первую очередь, разработчикам на Rust, которые хотят добавить гибкости своим приложениям с помощью скриптов на Python. Во вторую — Python-разработчикам, ищущим способы расширить границы применения своего любимого языка, особенно в области WebAssembly или высокопроизводительных систем.

Ключевые возможности RustPython: Python без границ

Давайте углубимся в то, что именно предлагает RustPython и как это может пригодиться в вашей работе.

1. Python в браузере и за его пределами с WebAssembly

Представьте: вы пишете веб-приложение, и вам нужно выполнить какой-то сложный алгоритм или бизнес-логику на стороне клиента. Обычно это JavaScript. Но что, если у вас уже есть готовая библиотека на Python? RustPython позволяет скомпилировать интерпретатор в WebAssembly (WASM), а значит, вы можете запускать ваш Python-код прямо в браузере!

Проект предлагает онлайн-демо, где можно поиграться с Python прямо в браузере. Это не просто игрушка, а мощный инструмент для создания интерактивных веб-приложений, где Python может отвечать за логику, а JavaScript — за UI.

Чтобы собрать RustPython для WASI (WebAssembly System Interface), достаточно пары команд:

rustup target add wasm32-wasip1
cargo build --release --target wasm32-wasip1 --features="freeze-stdlib"

Флаг --features="freeze-stdlib" при этом включает стандартную библиотеку Python прямо в бинарник WASM, что очень удобно для создания самодостаточных модулей.

2. Встраивание Python-скриптов в Rust-приложения

Часто возникает потребность в гибкой конфигурации или возможности быстро изменять логику приложения без полной пересборки. Здесь на помощь приходит встраивание Python. RustPython позволяет легко интегрировать интерпретатор в ваши Rust-проекты.

Это идеальное решение для:

  • Игровых движков: Скрипты для поведения NPC, логики квестов или пользовательских модификаций.
  • Плагинов и расширений: Пользователи могут писать свои плагины на Python, расширяя функциональность вашего приложения.
  • Систем автоматизации: Гибкое управление рабочими процессами через Python-скрипты.

Посмотрите на пример из репозитория, как просто можно запустить Python-код из Rust:

// Пример из examples/hello_embed.rs
fn main() -> rustpython_vm::PyResult<()> {
    rustpython_vm::Interpreter::without_stdlib(Default::default()).enter(|vm| {
        let scope = vm.new_scope_with_builtins();
        vm.run_code_string(
            scope,
            "print('Hello from RustPython!')".to_owned(),
            "<embedded>".to_owned(),
        )?;
        Ok(())
    })
}

Это открывает огромные возможности для создания динамичных и расширяемых систем.

3. Экспериментальный JIT-компилятор для ускорения

RustPython не останавливается на интерпретации. В проекте активно разрабатывается экспериментальный JIT-компилятор, который позволяет компилировать Python-функции в нативный код прямо во время выполнения. Это может дать существенный прирост производительности для критически важных участков кода.

Конечно, это пока "экспериментально", но сам факт наличия такой возможности говорит о серьезных амбициях проекта. Для его активации достаточно собрать RustPython с фичей jit:

cargo run --features jit

А затем в Python-коде вызвать метод __jit__() у функции:

def calculate_heavy_stuff():
    # ... очень много вычислений ...
    pass

calculate_heavy_stuff.__jit__() # Компилируем функцию в нативный код
result = calculate_heavy_stuff() # Теперь она выполняется быстрее

Это направление обещает сделать RustPython еще более привлекательным для задач, требующих высокой производительности.

RustPython в деле: реальные кейсы использования

Проект, хоть и находится в активной разработке, уже нашел применение в довольно интересных проектах:

  • GreptimeDB: Облачная распределенная time-series база данных использует RustPython для встраиваемого скриптинга. Это позволяет пользователям писать кастомную логику обработки данных на Python, не затрагивая ядро базы.
  • Ruff: Сверхбыстрый Python-линтер, также написанный на Rust, использует некоторые идеи и компоненты из RustPython, демонстрируя, как Rust может ускорить инструменты для Python-разработки.
  • Игровые движки: Проекты вроде pyckitup (игровой движок на Rust) и Robot Rumble (платформа для AI-соревнований) используют RustPython для логики и скриптинга, что позволяет разработчикам игр и участникам соревнований легко создавать и модифицировать поведение.

Эти примеры показывают, что RustPython — это не просто академический проект, а инструмент с реальной практической ценностью.

Под капотом: чистый Rust и никаких компромиссов

Одной из главных целей RustPython является создание полноценной Python-3 среды полностью на Rust, без использования CPython-биндингов. Это означает, что проект не зависит от существующей C-реализации Python, что дает большую свободу в архитектуре и оптимизациях.

Разработчики стремятся к чистой реализации без "костылей" для совместимости, что в долгосрочной перспективе обещает более стабильный, безопасный и производительный интерпретатор. Конечно, это требует огромных усилий по воссозданию всей стандартной библиотеки и внутренних механизмов Python, но прогресс впечатляет.

Стоит ли попробовать RustPython?

Если вы:

  • Rust-разработчик, ищущий способ добавить скриптовые возможности на Python в свои приложения.
  • Python-разработчик, который хочет запускать свой код в браузере, на WASM-совместимых платформах или в высокопроизводительных Rust-системах.
  • Любитель экспериментов и новых технологий, интересующийся пересечением Rust и Python.

Тогда RustPython определенно стоит вашего внимания! Проект активно развивается, и хотя он еще не полностью "production-ready" для всех мыслимых сценариев, его потенциал огромен.

Сообщество проекта очень дружелюбное и открыто для новых контрибьюторов. Если вы хотите внести свой вклад в будущее Python и Rust, это отличная возможность. Загляните в их Discord или на GitHub-репозиторий, там всегда есть задачи для "хорошего первого вклада".

RustPython — это не просто альтернативный интерпретатор, это мост между двумя мирами: миром высокой производительности и безопасности Rust, и миром гибкости и удобства Python. И, кажется, этот мост ведет к очень интересному будущему!