10 ポイント 投稿者 GN⁺ 2024-12-27 | 1件のコメント | WhatsAppで共有
  • eguiはRustで書かれたイミディエイトモードGUIライブラリで、Webおよびネイティブ環境で動作
  • WebではWebAssemblyにコンパイルされ、WebGLを通じてレンダリングされ、ネイティブ環境ではMac、Linux、Windowsなどさまざまなプラットフォームをサポート
  • DOM、HTML、JS、CSSなしで、純粋なRustだけで実装
  • 使いやすく移植性に優れ高速な性能を提供するよう設計

主な特徴

1. イミディエイトモード (Immediate Mode)

  • GUI作成が簡素化され、コードフローが簡潔になる方式
  • 例:
    if ui.button("Save").clicked() {  
        my_state.save();  
    }  
    
  • ボタン状態を保存したりコールバックを使ったりする必要がない
  • イミディエイトモードは使いやすさを高め、複雑さを減らす一方で、レイアウトと性能にやや制限がある

2. プラットフォーム互換性

  • Web: WebAssemblyとWebGLを通じて動作
  • ネイティブ: Mac、Linux、Windows、Androidなどをサポート
  • ゲームエンジンと統合可能(例: Bevyとの統合)

3. Rustエコシステムとの統合

  • 公式フレームワーク eframe を提供:
  • 同じコードでWebおよびネイティブアプリケーションを作成可能
  • 軽量な依存関係:
  • eguiはRustのab_glyph、ahashなど最小限の依存関係のみを使用
  • 重い依存関係は別のcrateに分離(egui_extras など)

主な機能

  • ウィジェット: ボタン、スライダー、チェックボックス、ラジオボタン、テキスト編集、カラーピッカーなど
  • レイアウト: 水平、垂直、列ベース、自動改行をサポート
  • テキスト編集: マルチライン、コピー/貼り付け、絵文字をサポート
  • ウィンドウ: 移動、サイズ変更、最小化/閉じる
  • レンダリング: アンチエイリアス適用済みのテキスト、図形レンダリング
  • アクセシビリティ: AccessKit統合によりスクリーンリーダーをサポート

長所と短所

  • 長所
    • 単純さ: コールバックなしで簡潔なコードでGUIを作成可能
    • 移植性: 同じコードでWebおよびネイティブ環境で実行可能
    • 使いやすさ: アプリケーション状態とGUI状態の間の同期問題がない
  • 短所
    • レイアウトの複雑さ: イミディエイトモードの特性上、複雑なレイアウトには追加作業が必要
    • CPU使用量: 毎フレーム全体のレイアウト計算が必要なため、大規模UIでは性能低下の可能性

対象ユーザー

  • シンプルなGUIを素早く作成したい開発者
  • RustベースのゲームエンジンやプロジェクトにGUIを追加したいユーザー
  • Webおよびネイティブ環境の両方をサポートするアプリケーション作成者

イミディエイトモードに関する追加説明

  • イミディエイトモードは、コールバックベースの**保持モード (retained mode)**とは異なり、フレームごとに状態を即座に処理
  • 例: if ui.button("Save").clicked() { save(); }
  • 長所: コードフローが単純になり、状態同期の問題がない
  • 短所: レイアウト計算が複雑であり、大規模UIでは性能に影響する可能性がある

1件のコメント

 
GN⁺ 2024-12-27
Hacker Newsの意見
  • Rustフレームワークを使って数学の問題を理解しようとしたが、edit-compile-runサイクルが長すぎて苦労した。プロジェクトをモジュールに分ければ改善するのか気になっている

  • ブラウザがサブピクセルレンダリングをサポートしていない場合、canvasベースのUIレンダリングライブラリは高解像度デバイスを除いてDOMベースに比べて不利になる。eguiライブラリもこの問題を認識している

  • ブラウザ環境でコンパイルされたデモページは技術的には印象的だが、eguiを使ったアプリの可能性を想像しにくい。eguiを活用した面白い例があるのか気になっている

  • クリスマスにnaughtyな振る舞いとして、Optionをパターンマッチングの代わりに無理やりunwrapしてエラーが発生した。Braveモバイル版で起きる

  • 国際化サポートが限定的だ。たとえば、アラビア語の"hello"を貼り付けると四角い箱で表示される

  • "即時モード"とは何なのか気になる。ウィジェットをUIに追加する方法として.add()を使っている。こうしたウィジェット向けの流れるようなビルダーAPIが"即時モード"にしているのか気になっている

  • Webブラウザでこうしたインターフェースをどうデバッグするのか気になる。JavaScriptやC++のWebAssemblyのようにデバッグできるのだろうか

  • ウィンドウのサイズ変更に問題がある。"Highlighting"の例で右下隅のつかみ領域をクリックすると、斜め矢印が縦矢印に変わって垂直方向にしかサイズ変更できない。ほかの基本例でも垂直と水平方向に同時にサイズ変更できそうだが、垂直に調整できない

  • 入力への反応がとても遅い。速くタイピングすると入力が追いつかない。テキストの選択やコピーもできず、カスタムGUI実装では大きな問題だ。皆さんに良い年末を願う