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/viewsrc/cli.rs— CLI команды compile/runsrc/renderer.rs— Iced-виджеты: преобразование Element → iced::Elementsrc/perf.rs— PerfScope: замер производительности по фазамsrc/interpreter/mod.rs— Interpreter: загрузка bytecode, VDOM evalsrc/interpreter/types.rs— Element, VNode, FlatVDom, Value, InternedStr, Documentsrc/interpreter/style.rs— StyleSheet, StyleRule, StyleIndex, StyleCache, ComputedStylesrc/interpreter/reactive.rs— ReactiveTracker: граф зависимостейsrc/interpreter/rhei.rs— RheiContext: интеграция Rhai скриптовsrc/interpreter/reader.rs— Reader: чтение .glbc bytecodesrc/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.
Реализовано: фазы 3–8, 10, 9.1–9.2 (content_hash, стабильные Iced widget ID).
Осталось:
| Фаза | Описание | Оценка ускорения |
|---|---|---|
| 0 | Профилирование (bench, flamegraph) | — |
| 1 | Типизированные Value в стилях вместо HashMap<String, String> | 2–3× |
| 2 | String interning для горячих путей | 1.5–2× |
| 9.3 | Кэш Iced-виджетов по content_hash | 1.5–2× (render) |