Bimetal: один Rust-код для Python и TypeScript-пакетов
В реестре crates.io появился инструмент Bimetal, который позволяет из одной библиотеки на Rust собрать готовые пакеты для Python и TypeScript. Оба пакета вызывают один и тот же скомпилированный код, а типы, ошибки и документация остаются синхронными на всех платформах.
Как это устроено
Разработчик помечает функции, типы и impl-блоки, которые должны быть доступны снаружи. Команда bimetal build компилирует библиотеку под каждую платформу, читает API из скомпилированного кода и генерирует типизированные пакеты в Python- и npm-проекты. Python-пакет представляет собой нативную расширение CPython, а TypeScript-пакет запускает Rust как WebAssembly — в Node.js и браузерах — либо как нативный аддон Node.js.
Сгенерированные файлы коммитятся в репозиторий, поэтому любое изменение API видно на код-ревью. Команда bimetal check в CI падает, если файлы не совпадают с Rust побайтово. Для сборки нужны Rust 1.94 с Wasm-таргетом, Python 3.11 и Node.js 20.16.
Что получает каждая платформа
Структуры и enum’ы с атрибутом Model превращаются в Pydantic-модели и StrEnum в Python, а в TypeScript — в интерфейсы и строковые объединения. Типы ошибок становятся исключениями со стабильным кодом в Python и объектами Error с кодом в TypeScript. Impl-блоки становятся классами с поддержкой with и for в Python и using и for…of в TypeScript. Асинхронные функции превращаются в корутины и Promise соответственно. Байтовые буферы отображаются на bytes и NumPy-массивы в Python и Uint8Array в TypeScript, а значения Arrow читаются через pyarrow, Polars или DuckDB без копирования и через apache-arrow.
Что это значит
Bimetal решает давнюю боль команд, которые пишут ядро на Rust и вынуждены поддерживать обёртки для разных языков вручную. Единый источник правды для типов, кодов ошибок и документации снижает риск рассинхронизации между платформами и упрощает релизы. Для IT-специалистов это ещё один аргумент в пользу Rust как языка для общих библиотек.
Подробности и примеры кода доступны на странице пакета.
Если вы хотите глубже разобраться в том, как Rust интегрируется с другими языками и какие подходы к общим библиотекам существуют сегодня, обратите внимание на материалы о кроссплатформенной разработке. Узнайте больше о технологиях, которые меняют работу разработчиков.
📌 Чтобы не пропустить новые публикации, подписывайтесь там, где вам удобнее: Дзен или MAX.
💛 Если статья оказалась полезной, поддержите автора донатом.
Материал подготовлен на основе информации из открытых источников. Все права на исходные материалы принадлежат их авторам. Если вы являетесь правообладателем и возражаете против использования, свяжитесь с нами по адресу info@11st.press.







