[HN Gopher] Kobold, a new web UI crate with zero-cost static DOM
___________________________________________________________________
Kobold, a new web UI crate with zero-cost static DOM
Author : mwfogleman
Score : 118 points
Date : 2023-03-24 13:35 UTC (9 hours ago)
(HTM) web link (maciej.codes)
(TXT) w3m dump (maciej.codes)
| chrsjxn wrote:
| I am very curious about "zero-cost" here? Is this some standard
| technical term in the rust space?
| boredumb wrote:
| Yes. It's highlighted a lot in rust to mean zero cost
| abstraction. Basically adding language features without a run
| time penalty.
| steveklabnik wrote:
| It's a term borrowed from C++, a "zero cost abstraction."
|
| Some folks use "zero overhead abstraction" to try and make the
| concept a bit more clear, since everything has some cost
| somewhere. "Zero cost" can feel incorrect.
| chrsjxn wrote:
| That makes more sense. Thanks!
|
| Creating and adding DOM nodes is definitely not free, but I
| can see how this is very low overhead compared to VDOM
| diffing.
| steveklabnik wrote:
| No problem. Here's the primary source, by the way:
| https://isocpp.org/wiki/faq/big-picture#zero-overhead-
| princi...
|
| > What you don't use, you don't pay for (in time or space)
| and further: What you do use, you couldn't hand code any
| better.
| twic wrote:
| The term comes from C++, where it does have a fairly rigorous
| definition:
|
| https://en.cppreference.com/w/cpp/language/Zero-overhead_pri...
|
| Although:
|
| https://www.youtube.com/watch?v=rHIkrotSwcc
|
| I'm not sure whether Rust people consistently use it with
| precisely the same sense.
| spankalee wrote:
| Only diffing data and not static portions of templates is exactly
| what lit-html does too: https://lit.dev/docs/templates/overview/
| kabes wrote:
| Isn't diffing of data exactly what angularjs (v1) used to do
| until that fell out of favor?
| illiarian wrote:
| Speaking of "dreaded diffing". It's now fashionable to bash React
| and VDOM and diffing, but... vdom libs are at the forefront of
| performance these days:
| https://twitter.com/RyanCarniato/status/1636120238638137344?...
|
| You need either granular reactivity or diffing (or perhaps both),
| or else your framework's performance will easily be trash
| eviks wrote:
| it seems that it's the manually manipulated ones that are at
| the forefront...
|
| > I need to look closer. It does appear that the Millions
| implementation will get flagged as manual manipulation. So that
| might get changed to one a bit slower. I can't imagine anyone
| writing this code
| illiarian wrote:
| There's also ivi and dioxus
| localvoid wrote:
| There was a bug in ivi 2.0.0 with `shouldComponentUpdate`
| optimization, it was completely ignored. This benchmark
| submission rerenders and diffs everything on each change,
| all other `f(state) => UI` libraries in this benchmark are
| implemented with `shouldComponentUpdate` optimization.
| Also, unlike majority of libraries on the left side of the
| table, ivi doesn't use any type of event
| delegation(implicit or explicit) to get better results,
| just plain old `addEventListener()` is used internally to
| attach event listeners.
| danielheath wrote:
| Honestly I was expecting preact to fare much worse given what
| you wrote.
|
| Those numbers aren't _the best_, but given the improvement in
| TTI from only needing 3kb of framework that seems like a pretty
| good tradeoff.
| sgt wrote:
| Very cool. I'd actually like to see something like this for Go as
| well due to the insanely fast compile times. Compiling into wasm
| of course.
| ChikkaChiChi wrote:
| https://wails.io/ is a good starting point for Go.
| idiomaticrust wrote:
| I sense some leptos inspirations ;)
| eatonphil wrote:
| Leptos is mentioned in the article:
|
| > Kobold does not have a concept of a stateful component. The
| view rendering part is relatively unopinionated about state
| management. It is entirely feasible to implement React-esque
| hooks like in Yew or Dioxus as a 3rd-party crate. Reactive
| signals like in Sycamore or Leptops should also interact nicely
| with the View trait.
| bilekas wrote:
| Actually a bit of the opposite, there doesn't appear to be any
| idea of state here and obviously no vDOM.
|
| In fact he mentions this at the end :
|
| > It is entirely feasible to implement React-esque hooks like
| in Yew or Dioxus as a 3rd-party crate.
|
| Looks like leptos could actually enhance this idea of `View`.
| dmonitor wrote:
| As a certified kobold enthusiast, I don't like the hideous
| creature they chose as their logo. I like cute kobolds more
| than... whatever that is.
| officeplant wrote:
| So many cute kobolds out there.
| rob74 wrote:
| Blame Gary Gygax for coming up with the strange concept that
| kobolds are these weird reptilian creatures. I like
| "traditional" kobolds (https://en.wikipedia.org/wiki/Kobold)
| more. The cutest is probably this one: https://en.wikipedia.o
| rg/wiki/Meister_Eder_und_sein_Pumuckl#... - mind you, I
| wouldn't trust him to handle my UI either, but at least I
| wouldn't have to worry that he wants to chew my face off...
| xiphias2 wrote:
| It's easy to compare and be better than yew, it just has network
| effects going for it.
|
| Sycamore is much closer to that 0 cost Rust frontend framework,
| but has gone through many improvements.
___________________________________________________________________
(page generated 2023-03-24 23:01 UTC)