Об этом проекте
Druid был экспериментальным нативным Rust-инструментарием для создания пользовательских интерфейсов, разработанным компанией Linebender. Он проектировался с упором на работу с данными для создания качественных настольных приложений. Целью проекта было обеспечение плавного пользовательского опыта на всех распространенных платформах с акцентом на производительность, богатые возможности взаимодействия и интеграцию с нативными функциями ОС.
В настоящее время проект официально закрыт и не поддерживается. Основные усилия по разработке перенесены на Xilem, который во многом опирается на наработки Druid, но вносит фундаментальные изменения для повышения производительности и расширения поддержки приложений. Хотя Druid все еще может использоваться для некоторых задач и обладает значительной историей тестирования, новые функции и исправления ошибок больше не планируются.
Основные архитектурные компоненты:
- druid-shell: оболочка приложения, абстрагирующая платформу, отвечающая за запуск нативных циклов событий, их прослушивание и преобразование в платформонезависимые представления.
- Piet: библиотека абстракции 2D-графики с несколькими бэкендами (Direct2D для Windows, CoreGraphics для macOS, Cairo для Linux и Web для веб-целей), используемая для рисования и верстки текста.
- Система виджетов: виджеты реализуют трейт Widget, параметризованный типом данных, с методами для обработки событий, управления жизненным циклом, обновлений, компоновки и отрисовки. Каждый метод получает соответствующий объект контекста и среду, содержащую параметры темы.
- Компоновка (Layout): вдохновлена моделью блочной верстки Flutter, где виджеты получают BoxConstraints, определяющие минимальные и максимальные размеры.
- Трейт Data: представляет типы значений, которые дешевы в сравнении и клонировании, обычно автоматически реализуется для структур состояния приложения.
- Lens: обеспечивает доступ к частям более крупных структур данных, позволяя виджетам работать с конкретными полями состояния приложения.
Druid был доступен на crates.io и поддерживал macOS, Linux (требовался GTK+3), Windows и OpenBSD. Проект предоставлял базовые утилиты и виджеты компоновки с возможностью создания пользовательских виджетов. Инструментарий стремился к простоте сборки и упаковки, соблюдению соглашений платформы, надежному масштабированию дисплея, поддержке интернационализации, доступности, созданию компактных и быстрых бинарных файлов, а также минимальному дереву зависимостей.
В число целей не входили использование нативных виджетов платформы, встраивание в пользовательские конвейеры рендеринга, следование специфическим архитектурным стилям, таким как Elm, и поддержка рендеринга HTML для веб-целей. Альтернативами для подобных задач выступали Relm, Slint, Conrod, Iced и Moxie.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.