프로젝트 소개

Druid는 Linebender에서 개발한 실험적인 Rust 네이티브 UI 툴킷으로, 세련된 데스크톱 애플리케이션을 구축하기 위한 데이터 중심 접근 방식을 취했습니다. 이 프로젝트는 성능, 풍부한 상호작용, 네이티브 플랫폼 통합을 강조하며 모든 일반적인 플랫폼에서 원활한 사용자 경험을 제공하는 것을 목표로 했습니다. 현재 이 툴킷은 공식적으로 개발이 중단되었으며 유지보수되지 않습니다. 새로운 개발 노력은 Druid의 설계를 상당 부분 계승하면서도 성능 향상과 더 넓은 애플리케이션 지원을 위해 근본적인 변화를 도입한 Xilem으로 이전되었습니다. Druid는 여전히 일부 애플리케이션에서 사용할 수 있고 상당한 테스트 이력을 보유하고 있지만, 새로운 기능 추가나 버그 수정은 계획되어 있지 않습니다. 주요 아키텍처 구성 요소는 다음과 같습니다: - druid-shell: 네이티브 플랫폼 런루프를 시작하고 이벤트를 수신하여 플랫폼 독립적인 표현으로 변환하는 플랫폼 추상화 애플리케이션 셸입니다. - Piet: 그리기 및 텍스트 레이아웃을 위해 여러 백엔드(Windows용 Direct2D, macOS용 CoreGraphics, Linux용 Cairo, 웹 타겟용 Web)를 지원하는 2D 그래픽 추상화 라이브러리입니다. - 위젯 시스템: 위젯은 데이터 유형으로 매개변수화된 Widget 트레이트를 구현하며, 이벤트 처리, 수명 주기 관리, 업데이트, 레이아웃 및 페인팅을 위한 메서드를 포함합니다. 각 메서드는 해당 컨텍스트 객체와 테마 매개변수가 포함된 환경을 전달받습니다. - 레이아웃: Flutter의 박스 레이아웃 모델에서 영감을 받았으며, 위젯은 최소 및 최대 크기를 제공하는 BoxConstraints를 전달받습니다. - Data 트레이트: 비교와 복제가 저렴한 값 유형을 나타내며, 일반적으로 애플리케이션 상태 구조를 위해 파생됩니다. - Lens: 더 큰 데이터 구조의 일부에 대한 접근을 제공하여 위젯이 애플리케이션 상태의 특정 필드와 함께 작동할 수 있도록 합니다. Druid는 crates.io에서 제공되었으며 macOS, Linux(GTK+3 필요), Windows 및 OpenBSD를 지원했습니다. 이 프로젝트는 기본적인 유틸리티 및 레이아웃 위젯을 제공하고 사용자 정의 위젯을 구성할 수 있는 기능을 갖추었습니다. 툴킷은 쉬운 빌드 및 패키징, 플랫폼 관례 준수, 안정적인 디스플레이 스케일링, 국제화 지원, 접근성, 작고 빠른 바이너리, 작은 의존성 트리를 목표로 했습니다. 플랫폼 네이티브 위젯 사용, 사용자 정의 렌더 파이프라인에 임베딩, Elm과 같은 특정 아키텍처 스타일 준수, 웹 타겟을 위한 HTML 렌더링 지원 등은 목표에 포함되지 않았습니다. 이러한 사용 사례에 대한 대안으로는 Relm, Slint, Conrod, Iced, Moxie 등이 있습니다.