Представьте: вы пишете код на Python, потом переключаетесь на JavaScript, затем вспоминаете, что надо проверить что-то на Go, а в конце дня ещё и Rust протестировать. Каждый раз — новый терминал, новые команды, разные окружения. Звучит знакомо? Разработчик Esubaalew решил эту головную боль одним инструментом и выложил его на GitHub под открытой лицензией Apache 2.0. Встречайте run — полиглотный командный раннер и умный REPL, написанный на Rust, который умеет запустить код на 25 языках программирования через один CLI-интерфейс. Не нужно держать в голове десятки команд и настраивать окружения для каждого языка. Достаточно одной утилиты, чтобы экспериментировать, прототипировать и учиться без лишних заморочек.
Что такое run и зачем он нужен разработчикам
Любой, кто занимается программированием, рано или поздно сталкивается с неприятной реальностью: языков много, а команд ещё больше. Хочешь запустить скрипт на Python — набираешь python script.py. Нужен JavaScript — пишешь node index.js. Go требует go run, Rust — cargo run, а C++ вообще заставляет сначала компилировать, потом запускать. Каждый раз приходится помнить синтаксис, держать в уме флаги и параметры, а если работаешь с несколькими проектами одновременно, то путаница гарантирована.
Почему переключаться между компиляторами неудобно
Проблема не только в командах. Каждый язык требует свой toolchain: компилятор, интерпретатор, менеджер пакетов, настройку переменных окружения. Для новичка это барьер на входе — установить всё правильно может занять часы. Для опытных разработчиков — лишняя когнитивная нагрузка, когда надо быстро проверить идею или показать студентам, как работает конструкция на разных языках. А ещё есть DevOps-инженеры, которым нужно тестировать скрипты в разных окружениях, не поднимая кучу контейнеров.
Run решает эти проблемы радикально: один инструмент, одна команда для всех языков. Написал код — запустил. Переключился на другой язык — запустил снова. Никаких дополнительных установок, никаких танцев с бубном. Утилита автоматически определяет язык по расширению файла или по содержимому кода, а если нужно, можно явно указать, что именно ты хочешь запустить. Это особенно удобно для тех, кто занимается обучением, экспериментами или прототипированием: не тратишь время на настройку, а сразу видишь результат.
Как работает многоязычный REPL на Rust
REPL — это такая штука, которая читает твой код, выполняет его и выдаёт результат прямо в терминале. Read-Eval-Print Loop, если расшифровывать. Классические REPL есть у многих языков: Python имеет свой интерактивный режим, JavaScript можно запустить через Node.js, Ruby тоже умеет работать в интерактиве. Но каждый из них живёт в своём мире, и переключиться между ними нельзя без выхода и перезапуска.
Run делает по-другому. Это stateful REPL, который не теряет состояние при переключении языков. То есть ты можешь написать переменную в Python, потом переключиться на JavaScript, вернуться обратно — и твоя переменная всё ещё на месте. Звучит как магия, но на самом деле это просто грамотная архитектура на Rust, который славится производительностью и безопасностью памяти. Благодаря этому run работает молниеносно: код выполняется за миллисекунды, без задержек и подвисаний.
Что умеет stateful REPL с автоопределением языков
Фишка в том, что инструмент умеет понимать, на каком языке ты пишешь, даже без явных указаний. Загрузил файл с расширением .py — автоматически определился Python. Написал что-то похожее на JavaScript — переключился сам. Если хочешь контролировать процесс, можно вручную задать язык командой :lang, и run переключится моментально. В REPL-режиме доступны команды вроде :reset для сброса состояния, :load для загрузки файла, :languages для просмотра всех поддерживаемых языков. Это удобно, когда тестируешь разные варианты кода или объясняешь что-то студентам: не нужно закрывать терминал и открывать новый, всё происходит в одном окне.
Кроме того, run поддерживает выполнение кода из файлов, из stdin и inline-режим, когда ты просто пишешь run python --code "print(2+2)" прямо в командной строке. Это делает его универсальным раннером для любых сценариев: хочешь быстро проверить математическую формулу — инлайн, нужно запустить скрипт — через файл, хочешь протестировать конвейер данных — через pipe. И всё это без установки отдельных интерпретаторов для каждого языка.
Какие языки поддерживает этот инструмент
Список впечатляет: Python, JavaScript, TypeScript, Rust, Go, C, C++, Java, Kotlin, C#, Swift, Ruby, PHP, Lua, Bash, Dart, R, Perl, Haskell, Elixir, Julia, Crystal, Zig и Nim. Всего 25 языков, и это не просто декларация — каждый из них действительно работает. Можешь запустить функциональный код на Haskell, проверить производительность скрипта на Go, написать что-то на низкоуровневом C++ и тут же протестировать аналогичную логику на высокоуровневом Python. Никаких ограничений, никаких компромиссов.
Python, JavaScript, Go и ещё 22 языка в одной команде
Особенно круто это работает для тех, кто изучает программирование или преподаёт. Студентам не нужно устанавливать десятки toolchain и разбираться, почему у одного Python работает через python, а у другого через python3. Достаточно установить run, и можно сразу показывать примеры на любом языке: вот так работает цикл в Python, а вот так — в JavaScript, а теперь посмотрим, как это выглядит на Rust. Переключение занимает секунды, и фокус остаётся на самом коде, а не на технических деталях окружения.
Для разработчиков, которые работают с микросервисами или полиглотными проектами, это тоже выход. Один инструмент вместо кучи отдельных компиляторов и интерпретаторов. Меньше памяти, меньше путаницы, меньше времени на переключение контекста. А для DevOps-инженеров, которые пишут скрипты автоматизации на разных языках, run становится единой точкой входа: не надо помнить, как запускается bash, как — perl, как — ruby. Просто run <файл> — и готово.
Установка и первый запуск через терминал
Инструмент распространяется как кроссплатформенный бинарник, и установить его можно на Windows, macOS и Linux. Самый простой способ — через Cargo, если у тебя уже стоит Rust toolchain. Открываешь терминал, пишешь cargo install run-kit, ждёшь пару минут — и всё, run готов к работе. Для пользователей Debian есть пакет в репозитории, а на Windows можно поставить через Scoop. Никаких сложных зависимостей, никаких конфликтов версий.
Установка через Cargo, Debian и Scoop
Если Rust у тебя не установлен, не проблема: достаточно зайти на официальный сайт Rust и запустить установщик, который сам всё настроит. После этого команда cargo install run-kit подтянет бинарник и прописывает его в PATH, так что можно сразу запускать run из любой директории. Для пользователей Linux, которые предпочитают apt, есть deb-пакет — ставится стандартно, без плясок. На Windows через Scoop установка выглядит так: scoop install run, и готово.
Первый запуск элементарный. Просто набираешь run в терминале — и попадаешь в интерактивный REPL с автоопределением языка. Хочешь сразу стартовать с конкретного языка? Пиши run python или run javascript, и получишь REPL для этого языка. Нужно выполнить файл? run script.py — и код запустится автоматически. Хочешь inline-код? run go --code "fmt.Println("Hello")" — и видишь результат мгновенно. Всё интуитивно, без чтения мануалов на сотню страниц.
Сценарии использования: от скриптов до обучения
Run создан для тех, кому нужна скорость и гибкость. Разработчики используют его для быстрого прототипирования: появилась идея — написал пару строк кода, запустил, посмотрел результат, подправил. Не нужно создавать полноценный проект, настраивать окружение, ждать компиляции. Особенно это актуально для экспериментов с алгоритмами, когда хочешь проверить, как работает та или иная конструкция на разных языках, и сравнить производительность.
Для кого этот инструмент: разработчики, преподаватели, DevOps
Преподаватели и менторы находят в run идеальный инструмент для обучения. Вместо того чтобы тратить первое занятие на установку окружений, можно сразу показывать код и объяснять логику. Студенты видят, как одна и та же задача решается на Python, JavaScript, Go или Haskell, и понимают разницу в подходах. Никаких технических барьеров, только чистое программирование.
DevOps-инженеры ценят run за универсальность в автоматизации. Написал bash-скрипт для развёртывания, добавил проверку на Python, интегрировал мониторинг на Go — и всё это можно запустить через один раннер, без переключения между окружениями. Это особенно удобно в CI/CD-пайплайнах, где важна скорость и предсказуемость. А кроссплатформенность позволяет использовать одни и те же скрипты на серверах с разными ОС.
Ещё один сценарий — обучение новому языку. Хочешь попробовать Rust, но не готов ставить весь toolchain? Запусти run, переключись на Rust командой :lang rust, и можешь экспериментировать прямо в терминале. То же с Haskell, Elixir, Crystal и другими нишевыми языками, которые обычно требуют танцев с установкой. Run снижает порог входа и позволяет просто пробовать, не боясь сломать систему.
Проект открыт на GitHub под лицензией Apache 2.0, так что можно не только использовать, но и дорабатывать под свои нужды. Сообщество активно, релизы выходят регулярно, баги фиксятся быстро. Если найдёшь проблему или захочешь добавить поддержку нового языка — пул-реквесты приветствуются. Это live-проект, а не заброшенный эксперимент.
Короче говоря, run — это ответ на вопрос "как перестать жонглировать компиляторами и начать просто писать код". Один терминал, одна команда, 25 языков. Быстро, удобно, без лишних заморочек. Если ты разработчик, преподаватель или DevOps-инженер, которому надоело переключаться между окружениями, попробуй. Скорее всего, больше не захочешь возвращаться к старым методам.
🔔 Если статья была полезной, жмите на колокольчик на главной странице канала, чтобы быть в курсе новых публикаций, и подпишитесь, если ещё не подписаны! 📰