# Glint Runtime — документация (да, пока-что написанное нейросетью. Её объяснений достаточно) Бэкенд для исполнения скомпилированного байткода (.glbc) Glint UI-фреймворка. Загружает байткод, интерпретирует VDOM, применяет CSS-подобные стили, выполняет Rhai-скрипты и рендерит результат через Iced (native GPU-ускоренный GUI). ## Структура проекта - `src/main.rs` — точка входа, CLI парсинг - `src/lib.rs` — публичное API crate'а - `src/app.rs` — GlintApp: Iced-приложение, update/view - `src/cli.rs` — CLI команды compile/run - `src/renderer.rs` — Iced-виджеты: преобразование Element → iced::Element - `src/perf.rs` — PerfScope: замер производительности по фазам - `src/interpreter/mod.rs` — Interpreter: загрузка bytecode, VDOM eval - `src/interpreter/types.rs` — Element, VNode, FlatVDom, Value, InternedStr, Document - `src/interpreter/style.rs` — StyleSheet, StyleRule, StyleIndex, StyleCache, ComputedStyle - `src/interpreter/reactive.rs` — ReactiveTracker: граф зависимостей - `src/interpreter/rhei.rs` — RheiContext: интеграция Rhai скриптов - `src/interpreter/reader.rs` — Reader: чтение .glbc bytecode - `src/interpreter/opcodes.rs` — OP_* константы байткода ## Связанные репозитории - `glt` (компилятор .gltm/.glts → .glbc) ## Ключевые концепции - **Document** — загруженный .glbc файл: дерево Element'ов, таблица стилей, переменные - **Element** — узел VDOM: type_name, properties, children, computed_style, element_id, content_hash - **VDOM** — виртуальное дерево, результат интерпретации байткода - **StyleSheet** — таблица стилей с индексированным поиском и кэшем computed style - **ReactiveTracker** — отслеживает зависимости element → variable, dirty_set - **RheiContext** — компилирует и выполняет Rhai-скрипты, кэширует AST - **ComputedStyle** — результат применения CSS-правил: ~40 полей (color, padding, font-size, etc.) ## Фазы оптимизации См. [ARCHITECTURE-IMPROVEMENT-PLAN.md](../ARCHITECTURE-IMPROVEMENT-PLAN.md). **Реализовано:** фазы 3–8, 10, 9.1–9.2 (content_hash, стабильные Iced widget ID). **Осталось:** | Фаза | Описание | Оценка ускорения | |------|----------|-----------------| | 0 | Профилирование (bench, flamegraph) | — | | 1 | Типизированные Value в стилях вместо HashMap | 2–3× | | 2 | String interning для горячих путей | 1.5–2× | | 9.3 | Кэш Iced-виджетов по content_hash | 1.5–2× (render) |