5 ms·
Ribir: Non-intrusive GUI framework for Rust/WASM
- the__alchemist 11mo agoHow does this compare to EGUI, GPUI, and Slint? I like the idea of using macros to clean syntax; am writing some for EGUI right now to make colored text easier.
- mwcampbell 11mo agoThis may not be what you're after, but note that egui and Slint have accessibility support (at differing levels of completeness), e.g. for blind people using screen readers, while Ribir and GPUI do not.
- rubymamis 11mo ago> Unlike common object-oriented GUI frameworks, Ribir widgets do not need to inherit a base class or hold a base object. It is a pure composition model I'm really not sure how this "composition" is any different to the usual inheritance you see in frameworks like QML *in practice*. This in Ribir: ``` Column { align_items: Align::Center, item_gap: 12., @H1 { text: "Todo" } } ``` Would be this in QML: ``` ColumnLayout { spacing: 12 Text { Layout.alignment: Qt.AlignHCenter text: "Todo" font.pointSize: 17 } } ```
- Blackarea 11mo ago> You can choose to use it (macros) or not. Yet both examples use macros. I might still got ptsd from a job where literally all of the rust codebase was written as macros. Since then I avoid them at all costs. I find the route, that gleam took, way more elegant with squirrel (sqlx-ish) and lustre (elm-like) being examples of what we could have instead. Avoiding language mixing is so important for proper/clean lsp-support - yet macros are a different language as i see it. As for the rest of this: i also don't see how it's any different from iced, egui etc. but maybe I didn't take the time to check the details...
- iamsaitam 11mo agoIt seems Rust has now achieved the glorious status of JS's "there's a new UI framework coming out every day"
- swiftcoder 11mo agoAnd none of them really work for non-trivial apps! Welcome to hell
- mdhb 11mo agoIt’s just not actually a very good language for writing UIs in compared to say Dart, Swift or Kotlin.
- swiftcoder 11mo agoYeah, it turns out the popular UI paradigms rely on a lot of mutable state
- brabel 11mo agoA UI is by definition a view of some mutable state.
- galangalalgol 11mo agoRust is fine with mutable state, it just strongly encourages that it not be shared. Egui seems fine, we've used it to good effect.
- swiftcoder 11mo agoThe view part would be fine, the problem is updating the state. In a language which discourages shared mutability, most of the solutions are not terribly ergonomic. You either end up needing to: - handle all your state via interior mutability (i.e. Arc<RefCell<_>>) - use a reducer (i.e. the state blob is immutable during rendering, updates are deferred via events that are delivered between frames) - or invert the relationship between state and view (i.e. immediate-mode) which comes with it's own implementation challenges (caching immediate mode views is hard)