Об этом проекте
Block — это локальный полиглот-язык программирования и исполнительный движок, позволяющий разработчикам составлять рабочие процессы из нескольких хост-рантаймов в одном читаемом документе. Вместо склейки Python, JavaScript, Lua, PHP, SQL, Ruby, PowerShell и других языков с помощью shell-скриптов или временных файлов Block использует синтаксис на основе тегов (py, js, sql и т.д.), где каждый языковой блок сохраняет свой родной синтаксис, а Block управляет последовательным выполнением, сериализацией и передачей состояния между границами процессов.
### Как это работает
Документ Block разбирается, проверяется, затем каждый языковой этап запускается как отдельный хост-процесс. Block передаёт подготовленное представление общего сериализуемого состояния от одного этапа к следующему. Это означает, что открытые файловые дескрипторы, сокеты, живые подключения к базам данных и циклические ссылки не могут передаваться между блоками — только простые типы данных: целые числа, числа с плавающей запятой, строки, логические значения, массивы и словари. Модель границ процессов делает рабочие процессы инспектируемыми и переносимыми, но требует продуманного проектирования состояния.
### Издания и форматы файлов
Доступны три издания:
- Lite (.blkl): лёгкие локальные полиглот-скрипты с базовыми языковыми блоками.
- Standard (.blk): общее использование в разработке, добавляет импорты, обнаружение проектов, нативное управление потоком и поддержку локального сервера.
- Plus (.blkp): полная поверхность функций, включая пользовательские определения рантаймов, форматирование, линтинг, генерацию документации и расширенные интеграции.
Исполняемые команды соответствуют изданиям: block-lite, block, block-plus.
### Поддерживаемые языки
Block делегирует хост-рантаймам, найденным в PATH. Распространённые теги: py для Python, js для JavaScript/Node.js, php, lua, ruby, ps для PowerShell, sql для SQLite, html и json для шаблонного вывода, а также go, rust, zig, ts, cs, kotlin, dart, perl, r, c и cpp при наличии компиляторов. Не все теги включены в каждом издании.
### Конвейер общего состояния
Центральная функция — сериализуемое состояние, передаваемое между блоками:
[py]
total = 40 + 2
[/py]
[js]
console.log(total);
[/js]
[html]
Total: {{total}}
[/html]
Значения, созданные в одном блоке, становятся доступны в следующем. Лучшая практика — создавать небольшой явный объект-результат, а не полагаться на экспорт каждой локальной переменной.
### Нативное управление потоком Block
Все издания включают детерминированное изолированное нативное ядро языка, поддерживающее присваивания, if/elif/else, циклы while и for, range(), функции, литералы списков и словарей, индексацию и встроенные функции вроде len, str, int, sum и keys. Это ядро намеренно не имеет API для файлов, сети, процессов или пакетов — используйте блок хост-рантайма, когда они нужны.
### Локальный HTTP-сервер
Издания Standard и Plus могут объявлять маршруты и раздачу статических файлов:
[server port="8080"]
[route path="/hello"]
[py]
message = "hello from Block"
[/py]
[json]
{"message": "{{message}}"}
[/json]
[/route]
[/server]
Маршруты по умолчанию требуют заголовок X-Api-Token. Этот сервер предназначен только для локальной разработки.
### Управление проектами
Проекты инициализируются командой block project init и управляются через block.project.json. Корень рабочей области можно настроить один раз для многопроектных конфигураций. Импорты используют относительные пути с ограничениями песочницы по каталогам, ограничениями глубины рекурсии и обнаружением циклических импортов.
### Команды CLI
Ключевые команды: block файл для выполнения, block check файл для разбора без запуска, block plan --json для предварительного просмотра выполнения только для чтения, block errors для кодов диагностики, block ast для структурированных синтаксических деревьев, block runtimes для обнаружения установленных хостов, block doctor для диагностики окружения, а также block-plus fmt/doc для форматирования и документации в Plus.
### Безопасность и песочница
Импорты ограничены каталогами песочницы с лимитами на количество и размер файлов. Обход каталогов через ../ за пределы корня проекта блокируется. Выполнение PowerShell по умолчанию отключено в новых конфигурациях. Нативное ядро управления потоком доступно только для чтения, без доступа к файлам и сети. Безопасный установщик проверяет SHA-256 контрольные суммы и никогда не вызывает Winget, Chocolatey или загруженные скрипты.
### Поддержка редакторов
Доступны расширение для VS Code и плагин Acode. Расширения редакторов распознают псевдонимы .block, .blocklite и .blockplus в дополнение к основным расширениям.
### Релиз и сборка
Текущий релиз — 2.7.5. Сборка Windows компилируется из исходного кода C# с использованием компилятора .NET Framework через build.ps1, создавая block.exe, block-lite.exe и block-plus.exe. Бесплатная подпись кода предоставлена SignPath.io; текущие релизы Windows ожидают проверки и не подписаны.
### Чем Block не является
Block не заменяет Python, JavaScript, Rust или любой зрелый язык. Он не эмулирует их синтаксис и не включает хост-рантаймы. Он координирует локальные рантаймы и делает границу данных между этапами видимой. Ошибки парсера относятся к Block; отсутствующие рантаймы, ошибки пакетов и специфические языковые проблемы относятся к хост-среде.
### Лицензия
Лицензия MIT. Исходный код репозитория, документация и примеры открыты.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.