GPUI und egui sind Sackgassen für komplexe Desktop-Apps
A Critique of GPUI

Immer mehr Desktop-Apps setzen auf native Rust-GUI-Frameworks wie GPUI oder egui – sogar Discord kündigte einen Rewrite mit GPUI an. Der Autor argumentiert, dass beide Zustandsmodelle für komplexe Anwendungen nicht skalieren: GPUI zwingt Entwickler, Änderungen manuell per notify zu melden, was bei 3.000 Zeilen bereits 8,4 ms pro Label-Update kostet. Wer Präzision will, muss auf ein Signal-Modell wechseln – und verliert dabei genau die einfache API, die GPUI attraktiv macht.
Behalte die angenehme API und du bekommst Updates in der Größe von Views. Nimm die Präzision und du verlierst die angenehme API.
- virtualritz
Das zentrale Argument, das im Beitrag unzählige Male wiederholt wird, lautet "It does not scale".
Worauf ich antworte: "Wen kümmert's, die überwältigende Mehrheit der Apps hat keine komplexen UIs".
Und wenn doch, kann man sich einen Workaround einfallen lassen, wie es zum Beispiel rerun für egui gemacht hat (im Artikel beschrieben).
Ein passendes Beispiel: mein größtes in der Freizeit "angestoßenes" Projekt ist eine inzwischen 500k LOC große hybride 3D-Modellierungs-App. Sie verwendet egui.
Ich würde sagen, was die Modellierungsfunktionalität angeht, liegt sie irgendwo zwischen Grasshopper/Houdini, knapp 200 Nodes out of the box + beliebig viele eigene.
Das gibt dir eine Vorstellung von der UI: Node-Graph, Parameter-Editing, Widget-Overlays, Gizmos. Viele Nodes haben eigene Widgets, Ramp- oder Curve-Editoren usw.
Das ist überhaupt keine einfache UI.
Aber ich habe keine Sekunde damit verbracht, mir über die Performance von eguis Ansatz Gedanken zu machen. Und obwohl die UI in meinen Per-Frame-Statistiken auftaucht, ist sie vernachlässigbar.
- x-complexity
Das ist eine Werbeanzeige für zgui, verkleidet als kritischer Beitrag.
Aus dem Artikel selbst:
> Disclosure: I ported GPUI’s current Linux renderer to wgpu2, I built the benchmark harness used below, and I work on zgui, a signal-based Rust framework that appears in the charts.
https://github.com/zortax/zgui
zgui hat erst letzten Monat Version 0.1.0 veröffentlicht, mit einer 3-monatigen Entwicklungsgeschichte. Und es ist ihre einzige Version.
https://github.com/zed-industries/zed/tree/main/crates/gpui
https://crates.io/crates/gpui/versions
GPUIs letztes Release war 0.2.2, vor 1 Jahr.
Die Reife eines Frameworks ist ein unvermeidlicher Faktor, wenn man entscheidet, wohin man seine Anwendung portiert.
Heißt das, dass sie nur 10 Jahre alte Frameworks wählen dürfen? Nein, aber sie sollten auch nicht Projekten hinterherjagen, die 1 Monat alt sind.
Es gibt Minimums & Maximums, und das Minimum liegt bei "definitiv keine 1 Monat alten Projekte mit nur 1 öffentlichen Release".
- jharsman
Das Thema ist interessant, aber der KI-generierte Text ist sehr schwer zu lesen und lässt mich bezweifeln, ob der Autor überhaupt über das Problem nachgedacht hat.
Wenn du darüber nachgedacht hast, schreib es selbst.
- faangguyindia
Also, welche sind die fortgeschrittensten GUI-Frameworks, die je existiert haben, und warum sind sie GPUI oder egui überlegen?
Welches Unternehmen in der Vergangenheit brauchte eine GUI mehr als Microsoft? Vielleicht haben sie die Antwort? Oder Apple?
Ich glaube nicht, dass Social-Media-Apps GUI-lastig genug sind, um in diesem Bereich etwas Fortschrittliches entwickelt zu haben.
GUI-Komplexität und Anwendungskomplexität sind zwei verschiedene Dinge
Die Argumente im Beitrag klingen vernünftig, aber die Schlussfolgerung ist daneben.
- bluegatty
Sieht nach Spaß aus, aber Rust eignet sich weniger gut für UX als andere Sprachen – baumbasierte Datenstrukturen, viel hässlicher State, eventgetrieben, stark async, und natürlich haben all das JSON und die anderen Dinge, die auf dieser Ebene hereinkommen, keine 'sehr schönen' Libraries.
Es nutzt die Vorteile von Rust überhaupt nicht gut aus, und deshalb ist der zusätzliche Overhead schwer zu rechtfertigen.
Ich denke, es gibt definitiv einige zentrale Libs, die gut mit Rust funktionieren würden (wgpu ist schön!), aber die Kernsprache selbst wäre idealerweise nicht Rust.
Natürlich – es geht – und ich bin sicher, es macht einigen Devs viel Spaß – aber ich denke, das ist das Runde ins eckige Loch stecken. (Edit – es ist lustig, das zu sagen, weil 'das Runde ins eckige Loch stecken' buchstäblich wie 'walkies?' zu einem Hund ist, also 'auf – ein Problem, das gelöst werden will!' aber ich glaube, darauf will ich hinaus, so wie das, was mit dem Schwanz wedelt, nicht unbedingt die beste Option ist)