3 ポイント 投稿者 GN⁺ 2024-03-29 | 1件のコメント | WhatsAppで共有

Dioxus 0.5: シグナルの書き直し、ライフタイムの削除、CSSホットリロードなど

  • Dioxus Labsには、年に一度だけ書き直しを許すという非公式ルールがある。
  • DioxusはRustでGUIを構築するためのライブラリで、もともとはYewの書き直しとして始まった。
  • Dioxus 0.5は、コミュニティの要望に応えて、よりシンプルで堅牢かつ洗練された方向へと変更された。

新機能

  • dioxus-coreの完全な書き直しにより、すべてのunsafeコードを削除。
  • use_stateuse_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件のコメント

 
GN⁺ 2024-03-29
Hacker Newsの意見
  • Dioxus 0.5の変更に関する最初のユーザー体験

    • 昨年Dioxusを使ってMastodonクライアントを作ったが、全体としては良い体験だった一方で、まだ足りない部分も多かった。
    • Dioxus 0.5での変更により、開発者が直面していた複雑さの大半が取り除かれ、とくにライフタイムの除去と絶え間ないcloningの問題が解決され、より快適な開発体験が期待できる。
    • 新しいバージョンはまだ試していないが、チームの努力に祝意を伝えている。
  • SVGサポートに関する質問

    • ユーザーはSVGとやり取りできるのか、たとえば数独をSVGで描いて各セルをクリックできるのかを気にしている。
  • Rustプログラミングへの興味とgenerational-boxクレートの動作に関する質問

    • Rustプログラマーではないが、generational-boxクレートがどのようにコピーなしで値を保持するのか、そしてそれが安全なのかについて説明を求めている。
  • Dioxusを使ったFreenetホームページ開発の経験

    • ユーザーはDioxusを使ってFreenetの分散ホームページを開発中で、これは人々がFreenetをセットアップするときに最初に目にする分散Webサイトである。
    • KotlinのWebフレームワークであるKwebに似た状態管理と、コードからHTMLへのマッピングDSLの方式について好印象を持っている。
  • DioxusのReactの成功要素と革新に対する感想

    • ユーザーは、DioxusがReactの成功要素を捉え、その上に革新を加えて非常に速いペースでリリースしていることに大いに興奮している。
    • チームに祝意を伝え、このリリースでのsignals機能を試すことを楽しみにしている。
  • SwiftUIと比較したRSXに関する意見

    • ユーザーはRSXよりもSwiftUIに近いものを好み、React/JSXが2024年における「リアクティブUI」コードのあるべき姿についての自身のビジョンとは異なると述べている。
    • SwiftUIは完璧ではないが、Reactを使うときよりもコードがよりきれいに整理され、区分けされると感じている。
    • JSXを使う主な利点は、Web向けに作られた既存ライブラリを再利用できることだが、RSXは開発者がJSXに関する概念的知識をRSXへ移せること以外に、「移転可能な価値」がほとんどないと主張している。
    • ユーザーは「SwiftUI but cross-platform」のようなプロジェクトが存在しないことを残念に思っており、Tokamak/TokamakUIにも触れているが、まだ完成しておらず、活動も減っているように見えるとしている。
  • Dioxusのライフタイム除去に対する懸念

    • ユーザーはDioxusでライフタイムを除去したソリューションについて混乱しており、それが性能にどのような影響を与えたのかを気にしている。
  • Web Componentsとの統合性に関する質問

    • ユーザーはYewを使った際にShoelaceコンポーネントをうまく動かすのに苦労しており、別のRustフレームワークでプロジェクトを再挑戦したいと考えている。
  • ネイティブアプリのレンダリング方式に関する質問

    • ユーザーは、Dioxusがネイティブアプリをレンダリングする方法がブラウザインスタンス内で行われるのかどうかを気にしている。