GUIs mit Rust
Bei der Programmierung von GUIs im
Retained Mode
werden typischerweise Referenzen auf Datenstrukturen gehalten, die sowohl zum Lesen
als auch zum Verändern genutzt werden:
- zwischen GUI-Komponenten in Parent/Child-Hierarchien
- zwischen GUI-Komponenten einerseits, und Event-Behandlung sowie Datenmodell andererseits
In Safe Rust wird dies durch das Ownership-Modell und
den Borrow Checker verhindert.
Alternativen:
GUI-Libraries für Rust
Aktiv entwickelte, von Rust aus nutzbare GUI-Libraries sind:
- im Immediate Mode:
- im Retained Mode:
egui
Chancen:
- einfaches Programmier-/Datenmodell (Immediate Mode)
- im Reactive Mode wird UI Code dabei nur während Animationen oder User Events ausgeführt
- einfache Anbindung/Integration von/in Plattformen
- unterstützt WebAssembly
Risiken:
- der Busfaktor ist ungefähr 1. Der Hauptautor
verwendet es aber in seinem Startup Rerun, mit mehreren Mitarbeitern.
- es kann schwierig oder unmöglich sein, gewünschtes Verhalten oder Layout umzusetzen
- ruckeliges Layouting beim Ändern der Fenstergröße
- nur eingeschränktes bzw. umständliches Rendering:
- als Fill sind nur Farben möglich, keine Muster oder Gradienten
- Gradienten müssen als Mesh generiert werden
- als Stroke sind nur Farben möglich, keine
Muster oder Gradienten
- Line Cap, Line Join können nicht parametrisiert werden
- Dash Patterns müssen explizit
generiert werden
- es gibt keine Bezierkurvenzüge, sie müssen
stückweise in lineare PathShape
umgewandelt
werden
- die Widgets haben kein natives Aussehen und Verhalten
- insbesondere native Menüs werden nicht unterstützt
Iced
Iced wird von Kraken gesponsort, um damit
Cryptowatch Desktop zu entwickeln.
Chancen:
Risiken:
- keine Unterstützung für:
- Multiline Text Felder
- Tabellen Widget
- Tab Focussing
- mehrere Fenster
- Layers
- der Busfaktor ist ungefähr 1
- die Widgets haben kein natives Aussehen und Verhalten
Slint
Slint wird von 2 ehemaligen Qt-Entwicklern geschrieben.
Chancen:
Risiken:
- es steht unter GPL3 bzw. einer teuren kommerziellen Lizenz
- die Widgets haben kein natives Aussehen und Verhalten
GUI-Applikationen, die in Rust geschrieben sind
alert-after, Backup GUI, epilys/kitkat, HexoSynth, Inlyne, Rusty Shadertoy Browser, Servo, Way Cooler- mit Dioxus: Easy-Release, Ebou, rusl, TwitVault, Uplink
- mit Druid: arthmis/image-viewer, ASCII-d, Calenda.rs, cam, derekdreery/image-viewer, fragment, grpc-client, GTFS Manager, jack-mixer, Kielip, Kiro Synth, Kondo, Lapce, nonepad, Pando, Pollendina, Psst, Quantum Chess, Runebender, Scribl, solplan-rust, Sprite, sudoku_rust, Synthesizer IO, Xi Win, Zeitig
- mit egui: apt-decoder, binocle, Blackjack, canviewer-rs, CarTunes, carveout, ccaccounting, ChatGPT-rs, chip8_rust, claui, Companion of the Avatar, cowbump, dashboard, Dattorro reverb VST plugin, Deadliner, DeepGliss, DFU Buddy, dockeye, epick, epomo, Fearless-NES, FLP Abyss Player, Foresight Mining Software Corporation, funcially, FunUTD, GameGirl, GBemulator, Glyphana, Gossip, grapher, Hacker Newsfeed, harptabber, Headlines, Hexerator, Hobogo, Hyperspeedcube, keyboard-heatmap, KissCam, Klask, Loqui, Magnet Wallet, Malakal, mCubed, Minty, MITM Proxy, mqttV, NESImg, netstrat, Nodus, Nuance, oculante, Optical Flow Processing Stack, Pend, PickPicPack, pid-balancer, Postsack, Puffin, pw-viz, Rerun, rgis, rusl, Rusty AutoClicker, Rusty Hub, serial-monitor-rust, Silicate, Simp, SIMple-Electronics, Space Engineers Calculator, SPV, STOPER, sudoku-solver, SysEx Drop, Tarsila, tinyrss, Translator, vocode, YClass
- mit Electron: Ferrum, Finda
- mit GTK+: Amberol, Authenticator-rs, Blackbody, Czkawka, Done, Eww, Findex, Firmware Manager, Fractal, Fragments, gerb, Hotwire, keyboard-configurator, Kubernetes log viewer, NewsFlash, pinephone-gtk-rs-starter, Popsicle, Rnote, SongRec, Szyszka
- mit Iced: Airshipper, Ajour, Bathtub, Beacon, Borderlands 3 Save Editor, Cryptowatch Desktop, enclone visual, ENSnano, ESLauncher2, FastOTP, IceCHIP8, icy_term, Lembas, Linkage, Ludusavi, Neothesia, OctaSine, offline-chess-puzzles, Onagre, Open Vehicle Diagnostics, RAB, Range Trainer, rusl, SlimeVR Wrangler, SMMDB Client, Sniffnet, Spectrogram, StableView, TolStack, TypeTest, Töörö Editor, Universal Android Debloater GUI, ytdlp-gui
- mit imgui: glif, NDCell, nes-rust, Papercraft, Rustarok, Sailor, Search, xprite
- mit sciter: Calligrapher AI, Pippette, RenegadeX Launcher, temps-lite
- mit Slint: cargo-ui, Chiptrack, ImageSieve, Moiré, rusl, Viewer for Slint
- mit Tauri: BS Redis Desktop Client, Clash Verge, Fish Fight Launcher, Graviton, Just Run My Debugger!, Kadium, lencx/ChatGPT, Lodestone, mediarepo, Mr Tagger, N-Link, Orange, Piano Trainer, Pretty Clean, Recut, Spacedrive, Spaceman, Spyglass, SquirrelDisk, Tauri Yewprint desktop app, Tiger, Time Machine Inspector, Upscale-rs, Verve, Wikit, Wirefish, Xplorer, Yaki
Alle Angaben ohne Gewähr • Home • Kontakt