Dioxus 0.5: シグナルの書き直し、ライフタイムの削除、CSSホットリロードなど
- Dioxus Labsには、年に一度だけ書き直しを許すという非公式ルールがある。
- DioxusはRustでGUIを構築するためのライブラリで、もともとはYewの書き直しとして始まった。
- Dioxus 0.5は、コミュニティの要望に応えて、よりシンプルで堅牢かつ洗練された方向へと変更された。
新機能
dioxus-coreの完全な書き直しにより、すべてのunsafeコードを削除。
use_stateやuse_refを使わず、コピー不要のSignalベースAPIへ移行。
- すべてのライフタイムと
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コマンドを使ってフルスタックアプリを提供できる。
LiveViewルーター対応
- LiveViewアプリでルーターがそのまま動作する。
カスタムアセットハンドラ
- デスクトップでカスタムアセットハンドラをサポートし、ブラウザへデータを効率よくストリーミングできる。
ネイティブなファイル処理
- デスクトップでファイルのドラッグ&ドロップを適切にサポートする。
エラー処理
- エラーバウンダリとthrowトレイトを使って、アプリ内のエラーを簡単に処理できる。
ホットリロードのデフォルト有効化とデスクトップ向け「開発」モード
- ホットリロードをデフォルトで有効にし、デスクトップアプリの開発体験を大幅に向上させた。
dioxusテンプレート更新
- 新しいコアチームメンバーのMilesがドキュメントとテンプレートを大幅に刷新した。
Dioxus-CommunityとDioxus-std
- Dioxus Communityは重要なエコシステムクレートを0.5リリースに合わせて更新した。
近日公開予定の機能
- アセットシステムの安定化と統合、
.wasmのバンドル分割、Islandsと再開可能なインタラクション、サーバーコンポーネント、改善された開発者ツール、モバイルおよびフルスタックの刷新など。
Dioxus-Blitz復活プレビュー
- 「Blitz 2.0」ではServoを統合し、WGPUを使ってFirefoxを動かしているのと同じCSSエンジンでネイティブレンダリングが可能になる。
貢献方法
- ドキュメント翻訳、「good first issue」への挑戦、ドキュメント改善、CLIへの貢献、Discordコミュニティでの質問回答などで貢献できる。
GN⁺の見解
- Dioxus 0.5は、RustベースのGUI開発にとって重要なアップデートであり、開発者により簡単で安全な開発環境を提供する。
- ライフタイムとスコープの削除はRust開発の複雑さを減らし、SignalベースAPIは状態管理をさらにシンプルにする。
- CSSホットリロードとイベントシステムの改善は、フロントエンド開発の生産性向上に寄与するだろう。
- ホットリロードとクロスプラットフォームのlaunch機能は、開発者がさまざまなプラットフォームで一貫した開発体験を得られるようにする。
- こうした変化はRustとWeb開発コミュニティに好影響を与えると見られ、特にRustを使ってWebおよびデスクトップアプリケーションを開発する人々に有用だろう。
1件のコメント
Hacker Newsの意見
Dioxus 0.5の変更に関する最初のユーザー体験
SVGサポートに関する質問
Rustプログラミングへの興味と
generational-boxクレートの動作に関する質問generational-boxクレートがどのようにコピーなしで値を保持するのか、そしてそれが安全なのかについて説明を求めている。Dioxusを使ったFreenetホームページ開発の経験
DioxusのReactの成功要素と革新に対する感想
SwiftUIと比較したRSXに関する意見
Dioxusのライフタイム除去に対する懸念
Web Componentsとの統合性に関する質問
ネイティブアプリのレンダリング方式に関する質問