3P by neo 6달전 | favorite | 댓글 1개

Dioxus 0.5: 신호 재작성, 수명 제거, CSS 핫리로딩 등

  • Dioxus Labs에서는 연간 한 번의 재작성만 허용하는 비공식 규칙이 있음.
  • Dioxus는 Rust로 GUI를 구축하기 위한 라이브러리로, 원래 Yew의 재작성으로 시작됨.
  • Dioxus 0.5는 커뮤니티의 요청에 따라 더 단순하고 견고하며 세련된 방향으로 변경됨.

새로운 기능들

  • dioxus-core의 완전한 재작성으로 모든 unsafe 코드 제거.
  • use_stateuse_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 크레이트가 어떻게 복사 없이 값을 유지하는지, 그리고 이것이 안전한지에 대해 설명을 요청함.
  • 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가 네이티브 앱을 렌더링하는 방식이 브라우저 인스턴스 내에서 이루어지는지 여부에 대해 궁금해함.