I made a little conference schedule app a few weeks ago for a conference I was at. I used my own rust UI toolkit, which calls in to cocoa to make use of native UI components. The resulting binary is about 500kb and it uses a couple megs of ram while running. It looks and feels like a totally native iOS app. As far as the OS is concerned, it is.
Even 500kb feels too big for what it is. I’m rewriting the core at the moment, and I think it’ll be more efficient as a result. But I’m still pretty happy with it.
The program that I use to manage my small business, basically a GUI wrapper on an sql DB is a total delight to use, because everything happens instantly. Even opening it is instantaneous.
Modern software is such a bloated mess that you kind of get used to a 20 second start-up and a .25-1 second delay on every action. Then you use something that isn't bloated junk and it feels like actual magic.
I'm curious if you use winit for windowing, or something lower level that's just mac specific.
UI library is here: https://github.com/josephg/leptos-native
And here's the schedule viewer app I made with it. It runs silky smooth on device: https://github.com/josephg/dweb-sched
The whole project is currently experimental & vibe coded. It's missing a lot of components, and it has bugs. I'm currently rewriting it by hand to do it properly.
I tried to learn SwiftUI a few years ago. XCode was horribly slow, and it would hang and crash all the time, even when working on small example projects. I'm excited by the thought that I can use any rust IDE to write UI code. Rust's compiler, toolchain and IDEs seem way more reliable.
The view! builder macro at the moment is designed to look like JSX, since it was ported directly from leptos. But I'm considering dropping the jsx and using a fluent API. Something like this:
let count = RwSignal::new(0u32);
let view = vstack().padding(16.0).gap(12.0)
.child(label().text(move || format!("Count: {}", count.get())))
.child(
hstack().gap(8.0)
.child(button()
.on_click(move |_| count.update(|c| *c = 0))
.text("Clear"))
.child(button()
.on_click(move |_| count.update(|c| *c -= 1))
.text("-1"))
.child(button()
.on_click(move |_| count.update(|c| *c += 1))
.text("+1"))
);
Code is a bit less readable like this, but autocomplete and cmd+click all works out of the box in your IDE.https://en.wikipedia.org/wiki/Dennis_Fong#/media/File:John_C...
Fortnite, PUBG, COD, all are disgraceful in comparison.
I disagree with Fortnite and PUBG, whilst PUBG is a little clunky it did usher in a completely new game style AND importantly introduced much better situational audio which other games didn't have.
In fact, that seems a lot. Back in ~1996 I was running one of the EFnet servers on a Compaq with 8MB of RAM.