GN⁺: Dioxus 0.5: 러스트로 개발하는 웹, 데스크톱, 모바일 앱
(dioxuslabs.com)Dioxus 0.5: 신호 재작성, 수명 제거, CSS 핫리로딩 등
- Dioxus Labs에서는 연간 한 번의 재작성만 허용하는 비공식 규칙이 있음.
- Dioxus는 Rust로 GUI를 구축하기 위한 라이브러리로, 원래 Yew의 재작성으로 시작됨.
- Dioxus 0.5는 커뮤니티의 요청에 따라 더 단순하고 견고하며 세련된 방향으로 변경됨.
새로운 기능들
-
dioxus-core
의 완전한 재작성으로 모든 unsafe 코드 제거. -
use_state
와use_ref
를 사용하지 않고 복제 없는Signal
기반 API로 전환. - 모든 수명(lifetimes)과
cx: Scope
상태 제거. - 모든 플랫폼을 위한 앱 시작을 위한 단일
launch
함수 도입. - Tailwind와 Vanilla CSS를 지원하는 자산 핫리로딩.
- 이벤트 재작성으로 각 플랫폼의 기본
WebSys
이벤트 유형에 접근 가능. - 컴포넌트 확장으로 요소 속성 추가(예: Link가
<a/>
속성을 모두 받음). - 통합된 오류 경계 및 서버 퓨처와 Suspense 통합.
- 데스크탑 조정 속도 5배 향상 및 바이트 스트리밍을 위한 사용자 정의 자산 핸들러.
- 서버 함수 스트리밍 및 전체 스택 핫리로딩.
- 많은 QoL 개선, 버그 수정 등.
수명 문제
- Dioxus를 더 단순하게 만들기 위해 모든 수명을 제거함.
- 수명 문제는 Rust 초보자를 쉽게 겁먹게 하고, 경험 많은 Rust 개발자들도 혼란스러워함.
- Dioxus 0.5는 수명과
Scope
를 제거하고Copy
상태 관리 솔루션인 신호를 도입함.
스코프와 수명 제거
- 새 버전에서는 스코프와
'bump
수명이 제거됨. - 컴포넌트 선언과 컴포넌트 내 런타임 함수 사용이 훨씬 쉬워짐.
모든 Unsafe 코드 제거
-
'bump
수명과 스코프 제거로 많은 unsafe 코드를 제거함. - dioxus-core 0.5에는 unsafe 코드가 없음.
신호(Signals)
- 컴포넌트의 핵심 상태 기본 요소로서 신호 도입.
-
Signal<T>
는 내부T
값이 아니더라도Copy
임. - 신호는 더 똑똑한 구독을 제공하여, 신호를 읽는 컴포넌트만 재렌더링됨.
CSS 핫 리로딩
- CSS 파일의 핫리로딩 지원으로,
dx
CLI가 파일을 감시하고 앱에 즉시 업데이트를 스트리밍함.
이벤트 시스템 재작성
- dioxus 0.5는 각 플랫폼의 기본 이벤트 유형을 노출하고, 플랫폼 간 API를 제공하는 트레이트를 도입함.
크로스 플랫폼 출시
- 새로운 크로스 플랫폼 API를 통해 동일한 애플리케이션으로 여러 플랫폼을 쉽게 대상으로 삼을 수 있음.
자산 시스템 베타
- 새로운 자산 시스템인 manganis는 CLI와 통합되어 애플리케이션 내의 자산을 확인, 번들링 및 최적화함.
데스크탑 렌더링 속도 5배 향상
- 렌더링 속도 향상을 위한 여러 최적화를 구현함.
속성 확장
- 특정 요소에 추가 기능을 제공할 때 유용함.
속성 축약
- 속성을 요소와 컴포넌트에 전달할 때 속성 축약 구문 사용 가능.
다중 줄 속성 병합
- 조건부 속성을 쉽게 만들 수 있도록 속성 병합 기능 추가.
서버 함수 스트리밍
- 서버 함수가 클라이언트와 데이터를 스트리밍할 수 있도록 지원함.
풀스택 CLI 플랫폼
-
dx
명령을 사용하여 풀스택 앱을 서비스할 수 있음.
라이브뷰 라우터 지원
- 라이브뷰 앱에서 라우터가 바로 작동함.
사용자 정의 자산 핸들러
- 데스크탑에서 사용자 정의 자산 핸들러를 지원하여 브라우저로 데이터를 효율적으로 스트리밍할 수 있음.
네이티브 파일 처리
- 데스크탑에서 파일 드롭을 제대로 지원함.
오류 처리
- 오류 경계와 throw 트레이트를 사용하여 앱에서 오류를 쉽게 처리할 수 있음.
핫리로딩 기본값 및 데스크탑용 "개발" 모드
- 핫리로딩을 기본적으로 활성화하고, 데스크탑 앱 개발 경험을 크게 향상함.
dioxus 템플릿 업데이트
- 새로운 코어 팀 멤버 Miles가 문서와 템플릿을 대대적으로 개편함.
Dioxus-Community 및 Dioxus-std
- Dioxus Community는 중요한 생태계 크레이트를 0.5 릴리스에 맞게 업데이트함.
곧 출시될 기능들
- 자산 시스템의 안정화 및 통합,
.wasm
의 번들 분할, 섬(Islands) 및 재개 가능한 상호작용, 서버 컴포넌트, 개선된 개발자 도구, 모바일 및 풀스택 개편 등.
Dioxus-Blitz 부활 미리보기
- "Blitz 2.0"으로 Servo를 통합하여 WGPU를 사용하여 Firefox를 구동하는 동일한 CSS 엔진으로 네이티브 렌더링을 할 수 있음.
기여 방법
- 문서 번역, "좋은 첫 이슈" 시도, 문서 개선, CLI 기여, 디스코드 커뮤니티 질문 답변 등에 기여할 수 있음.
GN⁺의 의견
- Dioxus 0.5는 Rust 기반의 GUI 개발을 위한 중요한 업데이트로, 개발자들에게 더 쉽고 안전한 개발 환경을 제공함.
- 수명과 스코프의 제거는 Rust 개발의 복잡성을 줄이고, 신호(Signal) 기반 API는 상태 관리를 더욱 간단하게 만듦.
- CSS 핫리로딩과 이벤트 시스템의 개선은 프론트엔드 개발의 생산성을 높이는 데 기여할 것임.
- 핫리로딩과 크로스 플랫폼 런치 기능은 개발자들이 다양한 플랫폼에서 일관된 개발 경험을 가질 수 있도록 함.
- 이러한 변화는 Rust와 웹 개발 커뮤니티에 긍정적인 영향을 미칠 것으로 예상되며, 특히 Rust를 사용하여 웹 및 데스크탑 애플리케이션을 개발하는 사람들에게 유용할 것임.
Hacker News 의견
-
Dioxus 0.5 버전의 변화에 대한 첫 번째 사용자의 경험
- 작년에 Dioxus를 사용하여 Mastodon 클라이언트를 만들었는데, 전반적으로 좋은 경험이었지만 여전히 빠진 부분이 많았음.
- Dioxus 0.5 버전의 변화로 인해 개발자가 직면했던 복잡성이 대부분 제거되었으며, 특히 생명주기(lifetimes) 제거와 끊임없는 복제(cloning) 문제가 해결되어 더 쾌적한 개발 경험을 기대함.
- 새로운 버전을 시도해보지는 않았지만, 팀의 노력에 축하를 전함.
-
SVG 지원에 대한 질문
- 사용자는 SVG와 상호작용할 수 있는지, 예를 들어 스도쿠를 SVG로 그리고 각 셀을 클릭할 수 있는지 궁금해함.
-
Rust 프로그래밍에 대한 호기심과
generational-box
크레이트의 작동 방식에 대한 질문- Rust 프로그래머는 아니지만,
generational-box
크레이트가 어떻게 복사 없이 값을 유지하는지, 그리고 이것이 안전한지에 대해 설명을 요청함.
- Rust 프로그래머는 아니지만,
-
Dioxus를 사용한 Freenet 홈페이지 개발 경험
- 사용자는 Dioxus를 사용하여 Freenet의 분산 홈페이지를 개발 중이며, 이는 사람들이 Freenet을 설정할 때 처음 보게 될 분산 웹사이트임.
- Kotlin 웹 프레임워크인 Kweb과 유사한 상태 관리와 코드에서 HTML로의 매핑 DSL 방식에 대해 긍정적인 인상을 받음.
-
Dioxus의 React 성공 요소와 혁신에 대한 감상
- 사용자는 Dioxus가 React의 성공 요소를 포착하고 그 위에 혁신을 더해 매우 빠른 속도로 출시하는 것에 대해 매우 흥분함.
- 팀에 축하를 전하며, 이번 릴리스에서의 신호(signals) 기능을 시도해보는 것을 기대함.
-
SwiftUI와 비교한 RSX에 대한 의견
- 사용자는 RSX 대신 SwiftUI에 더 가까운 것을 선호하며, React/JSX가 2024년에 "반응형 UI" 코드로 어떻게 보일지에 대한 자신의 비전과 다름을 표현함.
- SwiftUI가 완벽하지는 않지만, React를 사용할 때보다 코드가 더 깔끔하게 조직되고 구획화된다고 느낌.
- JSX를 사용하는 주된 이점은 웹을 위해 만들어진 기존 라이브러리를 재사용할 수 있다는 것이지만, RSX는 개발자가 JSX에 대한 개념적 지식을 RSX로 옮길 수 있게 하는 것 외에는 "전이 가능한 가치"가 거의 없다고 주장함.
- 사용자는 "SwiftUI but cross-platform" 프로젝트가 존재하지 않는 것에 대해 아쉬워하며, Tokamak/TokamakUI에 대해 언급하지만 아직 완성되지 않았고 활동이 줄어든 것으로 보임.
-
Dioxus의 생명주기(lifetimes) 제거에 대한 우려
- 사용자는 Dioxus에서 생명주기를 제거한 솔루션에 대해 혼란스러워하며, 이것이 성능에 어떤 영향을 미쳤는지 궁금해함.
-
웹 컴포넌트와의 통합성에 대한 질문
- 사용자는 Yew를 사용할 때 Shoelace 컴포넌트를 잘 작동시키는 데 어려움을 겪었으며, 다른 Rust 프레임워크로 프로젝트를 다시 시도해보고 싶어함.
-
네이티브 앱 렌더링 방식에 대한 질문
- 사용자는 Dioxus가 네이티브 앱을 렌더링하는 방식이 브라우저 인스턴스 내에서 이루어지는지 여부에 대해 궁금해함.