helix

https://github.com/Lokeh/helix
alidlorenzo 2020-05-19T00:06:09.362100Z

github redirects might account for that, though not sure if that applies for git deps

alidlorenzo 2020-05-19T00:07:44.362500Z

an example @dominicm showed me was using helix git url

lilactown 2020-05-19T00:08:08.362900Z

I think it will redirect as long as someone doesn’t take my old name

Aron 2020-05-19T00:34:40.363300Z

probably easier to make a new account ; )

orestis 2020-05-19T06:31:36.364300Z

Haha I always search for lilactown hx and then I remember :)

dominicm 2020-05-19T06:40:38.364900Z

I think they stopped people from taking the new names.

dominicm 2020-05-19T06:40:49.365300Z

There was that controversy a while ago

Eliraz 2020-05-19T06:52:07.371700Z

@smt Thats a good question, I really adore functional programming and was looking for a more "suitable" world to work in, I mean, JavaScript is good, but it's not OOP nor FOP, it's somewhere in between, and that makes it inconsistent and having some weird quirks when attempting to extract the Functional side of it. I always was fascinated by LISP and wished to work with any LISP dialect full time, now, I can, thanks to ClojureScript. I'm just deeply in love with Functional Programming, I find it way stronger than OOP, much more sophisticated and requires more programming skills Per se.

👍 2
Eliraz 2020-05-19T07:45:01.372900Z

@lilactown Do you know how helix performs vs reagent ?

Aron 2020-05-19T08:40:37.373400Z

@eliraz.kedmi157 there are benchmarks but no follow up yet https://krausest.github.io/js-framework-benchmark/current.html

Eliraz 2020-05-19T08:54:51.375Z

that's rather surprising, I expected ClojureScript's output to be faster / same at least as React is

Aron 2020-05-19T08:55:12.375500Z

well, it's not quite conclusive

Eliraz 2020-05-19T08:55:21.375900Z

meaning?

Aron 2020-05-19T08:55:24.376Z

it's one benchmark with one implementation

Eliraz 2020-05-19T08:57:00.377600Z

true. it also depends on the implementation itself. I saw how core.async can be a beast of performance, while changing the call times can result awful results

Eliraz 2020-05-19T08:58:11.378500Z

however it seems like inferno is the winner by a large margin (of those React like libraries, including React itself)

Aron 2020-05-19T09:00:20.379500Z

personally, I don't find any useful information in that table, it's way too big, what are we actually comparing and for what purpose?

Eliraz 2020-05-19T09:00:58.380100Z

you can choose what to show in that table on the button WHICH FRAMEWORKS

Aron 2020-05-19T09:01:11.380500Z

that's not the issue

Aron 2020-05-19T09:01:28.381200Z

you took 'too big' too literally : )

Eliraz 2020-05-19T09:01:49.381700Z

that benchmark suggests that clojurescript is even slower than angular 1.7 .. that's a bit crazy

Aron 2020-05-19T09:02:22.382400Z

that's a strong word to use for an open source collaboration project, don't you think?

Eliraz 2020-05-19T09:04:54.382700Z

what? crazy?

Eliraz 2020-05-19T09:05:18.383200Z

BTW what's keyed and not keyed?

orestis 2020-05-19T11:08:23.383700Z

ClojureScript can never beat raw React in terms of performance.

orestis 2020-05-19T11:08:28.383900Z

It’s just doing more.

dominicm 2020-05-19T11:10:45.384400Z

Not true. The early om demonstrations were based around that.

dominicm 2020-05-19T11:12:55.384700Z

https://nitter.net/swannodette/status/430350898888724480?lang=en referenced here

orestis 2020-05-19T11:18:22.385400Z

6 years ago :)

orestis 2020-05-19T11:19:15.386300Z

In any case I would do my own benchmarks, and measure the feel of the app, not just some numbers.

👍 2
Eliraz 2020-05-19T14:46:49.386800Z

it depends on the implementation I guess

lilactown 2020-05-19T14:51:54.387600Z

IME CLJS is a bit slower compared to plain ReactJS

lilactown 2020-05-19T14:52:19.388400Z

However that helix benchmark hasn’t been tuned at all

lilactown 2020-05-19T14:52:28.388700Z

It’s on my list to go review it

lilactown 2020-05-19T15:18:50.391300Z

helix (in theory) should be just as fast as React

lilactown 2020-05-19T15:19:26.392Z

unfortunately, it’s rare for people to get paid to create good good benchmarks 😞 they’re quite labor intensive

Aron 2020-05-19T15:26:08.392500Z

it's extremely hard to benchmark anything reliably in any jit compiler without full scale application

Aron 2020-05-19T15:26:49.393200Z

and that usually means hardcore instrumentation of full browser environments, in the case of javascript, or at least some kind of v8 or d8 run

Aron 2020-05-19T15:27:39.394100Z

I used to do it for something much more simple, and it was very easy to get some result and it turns out that it's just an artifact of the setup

Aron 2020-05-19T15:30:03.396600Z

and this is before even actually talking about writing separate implementations for the things you are comparing to each other in a way that it's both idiomatic and not obviously wrong, but it does use available tools for performant code where a knowledgeable developer would do so - which means in depth knowledge of all the things you are measuring. which was still not too much, but then I got fed up with benchmark.js and its api

Eliraz 2020-05-19T15:49:40.397700Z

I think browsers should support clojure nativity. 🙂

lilactown 2020-05-19T21:55:32.398200Z

put some work in today to update the helix benchmark: https://github.com/krausest/js-framework-benchmark/pull/734

lilactown 2020-05-19T21:58:02.398700Z

let me know if y’all think I’m doing anything that’s cheating ;)

dominicm 2020-05-19T22:01:03.399100Z

How did the numbers look after?

dominicm 2020-05-19T22:02:29.400100Z

Not sure I would consider mutable state in build-data too idiomatic. Maybe go with a transient instead?

lilactown 2020-05-19T22:08:06.400200Z

lilactown 2020-05-19T22:09:05.401Z

I personally find transients less idiomatic than using JS arrays for perf-critical code but that’s probably just my experience

dominicm 2020-05-19T22:11:15.401900Z

Those are good numbers. 👍

dominicm 2020-05-19T22:11:51.402800Z

Your code is written in a way that would perfectly suit transients fwiw. It would drop in.

lilactown 2020-05-19T22:19:27.403Z

i’ll try it out

lilactown 2020-05-19T22:19:50.403600Z

I can’t imagine it will be faster than pushing an array

lilactown 2020-05-19T22:20:23.404100Z

I think there’s still room to optimize the partial update

lilactown 2020-05-19T22:22:23.405600Z

a lot of the optimizations are nothing to do with helix. it’s more about working around the cost of using immutable data

lilactown 2020-05-19T22:22:55.406400Z

I wonder how much room for optimization there is in CLJS’ data structures