Добавить в корзинуПозвонить
Найти в Дзене
Цифровая Переплавка

🦀 Run: универсальный “компилятор на стероидах”, написанный на Rust

В мире, где разработчики постоянно прыгают между Python, Go, JavaScript и C++, инструмент Run выглядит как мечта любого полиглота. Это — универсальный CLI и REPL, написанный на Rust, который позволяет запускать код на 25+ языках без установки десятков отдельных инструментов и оболочек. Проект создан разработчиком Esubaalew во время изучения Rust, и, как это часто бывает, “учебная игрушка” неожиданно превратилась в мощный инженерный инструмент. По сути, Run — это единая оболочка, которая абстрагирует разрозненные компиляторы и интерпретаторы в один интерфейс.
Вы можете:
💡 Запустить любой файл по расширению: run examples/go/hello/main.go 💡 Выполнить однострочный код: run --lang python --code "print('Привет, мир!')" 💡 Открыть интерактивный REPL: run …и внутри него динамически переключаться между языками командой :lang js, :lang go, :lang py и т. д. Таким образом, Run — это не просто обёртка, а интерпретатор интерпретаторов — универсальный фронтенд для десятков рантаймов, собранный в од
Оглавление

В мире, где разработчики постоянно прыгают между Python, Go, JavaScript и C++, инструмент Run выглядит как мечта любого полиглота. Это — универсальный CLI и REPL, написанный на Rust, который позволяет запускать код на 25+ языках без установки десятков отдельных инструментов и оболочек.

Проект создан разработчиком Esubaalew во время изучения Rust, и, как это часто бывает, “учебная игрушка” неожиданно превратилась в мощный инженерный инструмент.

⚙️ Что делает Run особенным

По сути, Run — это единая оболочка, которая абстрагирует разрозненные компиляторы и интерпретаторы в один интерфейс.
Вы можете:
💡
Запустить любой файл по расширению:

run examples/go/hello/main.go

💡 Выполнить однострочный код:

run --lang python --code "print('Привет, мир!')"

💡 Открыть интерактивный REPL:

run

…и внутри него динамически переключаться между языками командой :lang js, :lang go, :lang py и т. д.

Таким образом, Run — это не просто обёртка, а интерпретатор интерпретаторов — универсальный фронтенд для десятков рантаймов, собранный в один бинарник.

🧠 Как это устроено под капотом

Архитектура Run элегантна и модульна — каждая поддерживаемая платформа реализует интерфейс LanguageEngine.

Каждый движок языка умеет:
🧩 Проверять наличие нужного компилятора (например, python3, rustc, go);
📦 Создавать временное рабочее окружение — для компиляции или исполнения;
💬 Выполнять фрагмент кода, файл или поток stdin;
🔁 Управлять состоянием интерактивной сессии (переменные, модули, результаты).

Run не включает самих компиляторов — он “шеллит” их под капотом, сохраняя единый интерфейс.
Это как если бы вы имели единый “мозг”, а под ним — армию рабочих инструментов, от Bash до Zig.

🧪 Технические детали и философия

Создатель проекта использовал Rust не случайно: язык идеально подходит для CLI-инструментов благодаря:
🦀
Статической типизации и нулевой стоимости абстракций;
⚙️
Безопасности в работе с процессами (std::process::Command используется для вызова внешних бинарников);
📦
Отличной экосистеме — включая clap для парсинга аргументов, tokio для асинхронного ввода-вывода и crossterm для интерактивного терминала.

Сам REPL написан поверх терминальной библиотеки с поддержкой истории команд, переключения языков и загрузки файлов “на лету”.
Всё это в рамках одного бинарника под лицензией
Apache 2.0, что делает Run готовым к интеграции в CI/CD или контейнерные среды.

🧩 Поддерживаемые языки

Run поддерживает три большие категории языков:

🪶 Скриптовые: Python, Ruby, PHP, Lua, R, Elixir
🌐
Веб и typed-сценарии: JavaScript, TypeScript, Dart, Swift, Kotlin
⚙️
Системные и компилируемые: C, C++, Rust, Go, Zig, Nim, Haskell, Crystal, C#, Java, Julia

То есть, вы можете протестировать фрагмент кода на Go, тут же перейти на Rust и проверить аналогичную функцию — всё в одном окне REPL.

🚀 Пример использования “на лету”

# Запуск Python-кода из stdin
echo '{"name":"Ada"}' | run js --code "
const data = JSON.parse(require('fs').readFileSync(0, 'utf8'));
console.log(`Hi ${data.name}`);
"

А вот как можно мгновенно скомпилировать и запустить Rust-файл:

run examples/rust/hello.rs

Run автоматически определит язык по расширению и вызовет нужный компилятор, а результат отобразит в едином формате stdout/stderr.

🧭 Почему это важно

Проект “Run” — это не просто хакатонная идея. Он решает реальную боль разработчиков, работающих в полиглотных системах.

💬 Тестирование инфраструктуры: можно проверять скрипты CI разных языков без установки отдельных сред.
📦
Образовательные цели: студенты и преподаватели могут использовать Run для демонстрации принципов работы языков в одном окне.
🧩
Мульти-языковая разработка: backend на Rust, утилиты на Python, фронтенд на TypeScript — и всё это можно запускать через один инструмент.

💡 Моё мнение

Run — это пример того, как из любопытства рождается инженерное изящество.
Создать CLI, который “понимает” 25 языков — задача, требующая продуманной архитектуры, особенно если учитывать REPL-состояния и кроссплатформенность.

Меня восхищает идея “единого входа в многоязычный мир” — ведь современный разработчик всё реже пишет на одном языке.
Rust здесь играет роль “оркестратора” — он не соревнуется с Python или Go, а даёт им
возможность говорить на одном терминальном диалекте.

🔗 Источники

  • 🦀 Репозиторий проекта: github.com/Esubaalew/run
  • 📘 Лицензия: Apache 2.0
  • 💾 Установка: через Cargo, Homebrew, Scoop или .deb-пакеты
  • 🌐 Официальная страница: run.esubalew.et

🧠 “Run” — это не просто инструмент, а способ посмотреть на программирование как на единый язык мышления. Ведь главное — не синтаксис, а идея, которую ты запускаешь.