Об этом проекте

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. Исходный код репозитория, документация и примеры открыты.