[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)