GUIs mit Rust
In anderen Programmiersprachen werden im
Retained Mode üblicherweise mehrere Referenzen auf
die selben Datenstrukturen gehalten (z.T. sogar wechselseitig), und sowohl zum Lesen, als auch zum
Verändern genutzt:
- zwischen Parent- und Child-Widgets
- zwischen Widgets und Datenmodell
In (Safe) Rust wird dies durch das Ownership-Modell bzw.
den Borrow Checker verhindert.
Alternativen:
GUI-Libraries für Rust
Aktiv entwickelte, mit Rust nutzbare GUI-Libraries sind:
- im Immediate Mode:
- im Retained Mode:
egui
Chancen:
- Funktionalität:
- Accessibility
- Multiline Text Input
- Tab Focussing
- Table Widgets
- Text-Selektion von Input-Feldern mit Ctrl/Cmd-A
- Text-Selektion von Labels
- WebAssembly Unterstützung
- Die Integration mit neuen Plattformen ist einfach.
- Das Programmiermodell ist einfach (Immediate Mode).
- Im Reactive Mode wird UI-Code nur während Animationen oder User-Events ausgeführt.
Risiken:
- fehlende Funktionalität:
- Die Widgets haben kein natives Aussehen und Verhalten. Insbesondere werden native Menüs nicht
unterstützt.
- Das Relayouting beim Ändern der Fenstergröße ist ruckelig.
- Es gibt nur ein 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
- Es kann schwierig oder unmöglich sein, gewünschtes Verhalten oder Layout umzusetzen.
- Der Busfaktor ist ungefähr 1. Der Hauptautor
verwendet es aber in seinem Startup Rerun, mit mehreren Mitarbeitern.
Iced
Iced wurde von Kraken gesponsort, um damit
„Cryptowatch Desktop” zu entwickeln (inzwischen eingestellt).
Eine kommende Version von Pop!_OS's COSMIC Desktop soll
auf Iced basieren.
Chancen:
- Funktionalität:
- Multiline Text Input
- Multi Window
- WebAssembly Unterstützung
Risiken:
- Die Widgets haben kein natives Aussehen und Verhalten.
- Fehlende Funktionalität:
- Accessibility
- Autocorrect
- Layers
- Tab Focussing
- Table Widgets
- Text-Selektion von Input-Feldern mit Ctrl/Cmd-A
- Text-Selektion von Labels
- Der Busfaktor ist ungefähr 1.
Slint
Slint wird von 2 ehemaligen Qt-Entwicklern geschrieben.
Chancen:
- Funktionalität:
- Accessibility
- Multiline Text Input
- Tab Focussing
- Table Widgets
- Text-Selektion von Input-Feldern mit Ctrl-A
- Text-Selektion von Labels
- WebAssembly Unterstützung
Risiken:
- Fehlende Funktionalität:
- Autocorrect
- Text-Selektion von Input-Feldern mit Cmd-A
- Die Widgets haben kein natives Aussehen und Verhalten
- Die GUIs werden nicht in Rust, sondern in einer DSL entwickelt.
- Slint steht nur unter GPL3 oder einer teuren kommerziellen
Lizenz zur Verfügung.
GUI-Applikationen, die in Rust geschrieben sind
alert-after, Backup GUI, epilys/kitkat, HexoSynth, Inlyne, Rusty Shadertoy Browser, Servo, Sprite, Way Cooler
- mit Dioxus: Easy-Release, Ebou, Floneum, rusl, TwitVault, Uplink
- mit Druid: ASCII-d, Calenda.rs, cam, derekdreery/image-viewer, fragment, grpc-client, GTFS Manager, Kielip, Kiro Synth, Kondo, nonepad, Pando, Pollendina, Psst, Quantum Chess, Runebender, Scribl, solplan-rust
- mit egui: apt-decoder, binocle, Blackjack, canviewer-rs, Caricare, CarTunes, carveout, ccaccounting, ChatGPT-rs, chip8_rust, claui, Companion of the Avatar, cowbump, Cuprous Logic Simulator, dashboard, Dattorro reverb VST plugin, Deadliner, DeepGliss, DFU Buddy, dockeye, epick, epomo, Fearless-NES, Festival, FLP Abyss Player, Foresight Mining Software Corporation, funcially, FunUTD, Fuzzy Drone Controller, GameGirl, GBemulator, Glyphana, Gondola, Gossip, grapher, Hacker Newsfeed, harptabber, Headlines, Hexerator, Hobogo, Hyperspeedcube, keyboard-heatmap, KissCam, Klask, kmpeek, Ladder, Laser Simulator, Legion RGB Control, Liquid CAD, Loqui, Magnet Wallet, Malakal, mCubed, MFEKglif, Midi and Virtual Book jukebox Player, Minty, MITM Proxy, Mori, mqttV, NESImg, Netpurr, netstrat, Nodus, ntsc-rs, Nuance, oculante, Optical Flow Processing Stack, Pend, PickPicPack, pid-balancer, Postsack, PpdEditor, Puffin, pw-viz, Rerun, rgis, ruffle_desktop, rusl, Rust-vJoy-Manager, Rusty AutoClicker, Rusty Hub, serial-monitor-rust, Silicate, Simp, SIMple-Electronics, simplekanainput, Space Engineers Calculator, SPV, STOPER, STV, sudoku-solver, Symbiants, SysEx Drop, Tarsila, tinyrss, Translator, vocode, Walksnail OSD Tool, YClass
- mit Electron: Ferrum, Finda
- mit Floem: Lapce
- mit GPUI: Kallax, Loungy, Zed
- mit GTK+: Amberol, Authenticator-rs, Blackbody, Czkawka, Done, Eww, Findex, Firmware Manager, Fractal, Fragments, gerb, Hotwire, keyboard-configurator, NewsFlash, pinephone-gtk-rs-starter, Popsicle, Rnote, Shortwave, Solanum, SongRec, Szyszka
- mit Iced: Airshipper, Ajour, Amphitheatre Desktop, Beacon, Borderlands 3 Save Editor, Corroded Monitor, Dynasty, enclone visual, ENSnano, ESLauncher2, fan-control, FastOTP, Gauntlet, Halloy, IceCHIP8, icy_term, Linkage, Ludusavi, Neothesia, OctaSine, offline-chess-puzzles, Onagre, Open Vehicle Diagnostics, PWDuck, RAB, Range Trainer, rusl, Series Troxide, SlimeVR Wrangler, SMMDB Client, Sniffnet, Spectrogram, StableView, tf2-launcher, TolStack, TypeTest, Töörö Editor, Universal Android Debloater GUI, ytdlp-gui
- mit imgui: NDCell, nes-rust, Papercraft, Rustarok, Sailor, Search, xprite
- mit Qt: LightkeeperRM
- mit Slint: cargo-ui, Chiptrack, codevis-gui, ImageSieve, Krokiet, Raccoin, rusl, Viewer for Slint
- mit Tauri: Alexandria, BS Redis Desktop Client, Collie, CRust, Flying Carpet, Graviton, Just Run My Debugger!, Kadium, lencx/ChatGPT, Lodestone, mdSilo, mediarepo, Mr Tagger, N-Link, NoFWL, Orange, Piano Trainer, Pointless, Pot, Pretty Clean, rdpFX, Recut, Spacedrive, Spaceman, Spicy Launcher, Spyglass, SquirrelDisk, Tauri Yewprint desktop app, Tiger, Time Machine Inspector, typstudio, Upscale-rs, Verve, Wikit, Wirefish, Xplorer, Yaki
Alle Angaben ohne Gewähr
• Home
• Kontakt