Реальные истории:Как тренер футбольной школы создал приложения за 1 неделю скоро

Состав и архитектура le.codes

Инженерное описание среды разработки le.codes: из чего состоит среда выполнения (le.codes Runtime) и компилятор lecodes-cli, как они взаимодействуют, на каких платформах работают и какие компоненты входят в поставку. Документ подготовлен как техническое описание программного обеспечения.

1. Что такое le.codes

le.codes — среда разработки кроссплатформенных приложений на языке TypeScript. Разработчик описывает интерфейс и логику приложения с помощью le.codes SDK (декларативный UI, 2D- и 3D-сцены, анимации, физика), компилятор собирает проект в единый переносимый JS-бандл, а среда выполнения (Runtime) исполняет этот бандл нативно на каждой из поддерживаемых платформ — без встроенного браузера (WebView) и без установки Node.js на устройство пользователя.

Конвейер целиком:

text
Исходники проекта (TypeScript)
        │
        ▼
Компилятор lecodes-cli  ──►  app.js (единый бандл приложения)
        │
        ▼
le.codes Runtime (Windows / Linux / Astra Linux / macOS / iOS / Android / Web)

Один и тот же скомпилированный бандл исполняется на всех платформах: платформенно-зависимая часть полностью инкапсулирована в Runtime.

2. le.codes Runtime

Runtime — это нативная (C++) среда исполнения приложений le.codes. Она состоит из платформенно-независимого ядра и тонких платформенных «хостов», которые предоставляют ядру окно, графический контекст, ввод, звук и сеть.

2.1. Ядро исполнения — creator-pkg

Связывает JavaScript-код приложения с нативными подсистемами. Включает:

  • Движок JavaScript — QuickJS. Встраиваемый интерпретатор ECMAScript (поставляется в составе исходников, с собственными патчами обработки очереди микрозадач). Каждое приложение исполняется в изолированном JS-контексте; доступ к системе возможен только через API, явно предоставленные средой.
  • Мост JS ↔ натив. Биндинги нативных подсистем в JS-контекст (_creator — 3D, _creatorUI — интерфейс, _creator2d — 2D, _creatorUtils — служебные), диспетчеризация вызовов между потоками (JsDispatch / DispatchBridge).
  • Подсистема времени и анимаций. Таймеры (setTimeout/setInterval), покадровый планировщик, менеджер анимаций (твины, кривые сглаживания).
  • Загрузчик 3D-ресурсов. Разбор и загрузка моделей формата glTF/GLB.
  • Навигация и экраны. Стек экранов приложения, жизненный цикл, обработка касаний/указателя и передача событий в UI-подсистему.

2.2. UI-подсистема — creator-ui

Платформенно-независимое ядро пользовательского интерфейса:

  • раскладка элементов по модели flexbox;
  • стили: цвета, границы, скругления, градиенты, тени, трансформации;
  • анимируемые переходы свойств (transitions);
  • виртуализированные списки (отрисовка только видимых элементов);
  • вывод результата в виде списка команд отрисовки, которые исполняет платформенный рендерер (см. 2.4).

2.3. Графические движки

  • 3D — creator-gl. Построен на движке рендеринга Google Filament (физически корректный рендеринг, PBR): сцены, камеры, освещение, материалы, скелетная анимация и морфинг, текстуры (PNG/JPEG/KTX2), окружение (IBL). Графические API: OpenGL / OpenGL ES / WebGL (через WebAssembly-сборку), Metal (iOS/macOS). Опционально подключается физический движок Jolt Physics (твёрдые тела, коллизии, контроллер персонажа).
  • 2D — creator-2d. Лёгкий 2D-движок на графической библиотеке sokol (спрайты, атласы, слои) с 2D-физикой Box2D.

2.4. Платформенные хосты

ПлатформаХостРендеринг UIГрафикаОсобенности
Windows 10/11 x64le.codes Desktop (creator-desktop)tgfxOpenGLЗвук — miniaudio; видео — Media Foundation; SVG — nanosvg
Astra Linux / Ubuntu x64le.codes Desktop (creator-desktop)tgfxOpenGL ES 3 / X11glibc ≥ 2.24; звук — miniaudio
AndroidJNI-модуль creator-pkg + нативный рендерер (Kotlin)нативный рендерерOpenGL ESСборка NDK (clang, libc++)
iOS / macOSнативный хостнативный рендерерMetal / OpenGLСобирается отдельным проектом
WebWebAssembly-сборки creator-gl / creator-ui (Emscripten)canvas-рендерерWebGLИспользуется онлайн-редактором le.codes

Десктоп-хост дополнительно содержит:

  • запуск приложения из локального файла (creator-desktop app.js) или по URL опубликованного проекта (creator-desktop https://le.codes/qr/<id>);
  • WebSocket-клиент для режима разработки: горячая перезагрузка приложения при изменении исходников (lecodes dev), без перезапуска процесса;
  • подсистемы ввода-вывода: файлы приложения, сеть (fetch), медиа (аудио/видео).

2.5. Формат исполняемого приложения

Приложение le.codes — один JS-файл (бандл), содержащий весь код проекта и ссылки на ресурсы (модели, изображения, шрифты, звуки). Бандл не содержит нативного кода и одинаков для всех платформ; исполняется интерпретатором QuickJS внутри Runtime.

3. Компилятор lecodes-cli

lecodes-cli — консольная утилита разработчика: компилятор проектов и инструмент работы с платформой le.codes. Распространяется как автономный исполняемый файл (windows-x64, linux-x64 — статическая musl-сборка, один бинарник на все дистрибутивы Linux), не требует установленного Node.js, а также публикуется как npm-пакет lecodes-cli.

3.1. Компиляция

  • Сборщик chisel (собственная разработка, язык Rust) — пакетирование проекта с гранулярностью до отдельных методов: в итоговый бандл попадает только реально используемый код SDK и проекта (агрессивное удаление мёртвого кода).
  • Компилятор SDK — трансляция TypeScript-исходников проекта, разрешение модулей без внешних импортов, встраивание ресурсов (например, SVG-иконки разворачиваются в инлайн-источники на этапе сборки).
  • Результат — app.js, готовый к исполнению любым le.codes Runtime (lecodes compile -o app.js).

3.2. Команды

ГруппаКомандыНазначение
АутентификацияloginВход по персональному токену доступа
Работа с проектамиcreate, clone, pull, push, status, diffСоздание, клонирование и синхронизация проектов с платформой (модель, аналогичная системам контроля версий)
Сборка и запускcompile, renderЛокальная компиляция в бандл, рендеринг экранов
Режим разработкиdevЛокальный сервер в сети (LAN): QR-код для подключения устройства, горячая перезагрузка приложения при изменении файлов (WebSocket)
ПрототипированиеdesignИнтерактивная доска экранов для проектирования интерфейсов

3.3. Режим разработки (lecodes dev)

CLI поднимает локальный сервер, следит за исходниками, пересобирает бандл при изменениях и по WebSocket отправляет обновление подключённым Runtime (десктоп-приложение или мобильное устройство, подключённое по QR-коду). Обновление применяется без перезапуска: Runtime создаёт новый изолированный JS-контекст и сцену, освобождая ресурсы предыдущей версии.

4. Сборка и распространение

  • Версия Desktop-приложения фиксируется в файле VERSION, версия CLI — в пакете lecodes-cli; изменения ведутся в CHANGELOG.md.
  • Релизные сборки: Windows (MSVC + clang-cl для QuickJS), Ubuntu (GCC), Astra Linux (сборка в Docker-окружении целевой ОС).
  • Артефакты публикуются в неизменяемое хранилище releases/<продукт>/<версия>/<архив>; для каждого файла фиксируются размер и контрольная сумма SHA-256. Публичный манифест всех версий — versions.json.

5. Состав разработки и сторонние компоненты

Собственная разработка: ядро исполнения creator-pkg, UI-ядро creator-ui, 3D-обвязка creator-gl, 2D-движок creator-2d, десктоп-хосты Windows/Linux, мобильные хосты, le.codes SDK, компилятор/сборщик chisel, lecodes-cli, серверная платформа le.codes.

Сторонние компоненты встроены в поставку в виде исходного кода или статических библиотек (внешних загрузок во время работы не происходит) и распространяются под свободными разрешительными лицензиями:

КомпонентНазначениеЛицензия
QuickJSДвижок JavaScriptMIT
Google FilamentДвижок 3D-рендерингаApache-2.0
Jolt Physics3D-физикаMIT
tgfx2D-растеризация UI (десктоп): фигуры, текст, изображенияBSD-3-Clause
sokolГрафическая основа 2D-движкаzlib
Box2D2D-физикаMIT
miniaudioВоспроизведение звука (десктоп)MIT-0 / Public Domain
nanosvgРазбор SVG (десктоп)zlib
stb_imageДекодирование изображенийMIT / Public Domain

Инструменты сборки (в поставку конечных продуктов не входят): CMake, clang/GCC/MSVC, Emscripten (WebAssembly-сборки), Bun (упаковка автономного бинарника CLI).

6. Поддерживаемые платформы (сводно)

ПродуктПлатформы
le.codes Runtime (Desktop)Windows 10/11 x64; Astra Linux x64; Ubuntu/совместимые (glibc ≥ 2.24)
le.codes Runtime (мобильные)Android; iOS
le.codes Runtime (Web)Современные браузеры (WebAssembly + WebGL)
lecodes-cliWindows x64; Linux x64 (статическая сборка); macOS; любая ОС с Node.js ≥ 18 (npm-пакет)