I am amazed how quickly APL changed the way I think.
Also strongly recommend watching Aaron Hsu on youtube.
There is no better time to re-learn programming, try APL, Forth, LISP, z80 machine code, UXN TAL, just try new things.
"Men are born soft and supple; dead they are stiff and hard. Plants are born tender and pliant; dead, they are brittle and dry. Thus whoever is stiff and inflexible is a disciple of death. Whoever is soft and yielding is a disciple of life. The hard and stiff will be broken. The soft and supple will prevail."
[1]: https://github.com/jackdoe/gnu-apl-wasm source of the repl and learn playground and also how to compile gnu apl to wasm (vibecoded)
If anyone is curious how queries in this language look, you can see it here: https://github.com/ClickHouse/ClickBench/pull/939/changes#di...
The default CBQN "make o3" on x86-64 also results in it only using SSE2 (utilizing function multiversioning is on the ever-infinite TODO list, though somewhat-low on it considering it's strictly-unnecessary in any specific situation; there's also AVX-512 usage on a branch, but mostly only AVX2 on mainline; and no arm SVE)
That all said, CBQN doesn't currently do any loop fusion, so being significantly-slower for sequences of operations over larger-than-cache arrays would kinda just be expected. BQN also just isn't particularly intended for database work anyway.
(didn't look much at the specific query impls, though "Pair" in utils.bqn is at least an overlong version of "Pair ← ⋈¨"; and some if not all of those Pairs would be better as "≍˘" to avoid nested arrays and ensuing pointer chasing; and, of course, if some of the columns are bools/int8/int16/int32, it'd be beneficial to store & load them as such instead of float64)
"Site by Claude. Runtime by hand"
I think that's completely acceptable.
We are used to this, hence why folks here point it out.
https://github.com/l-labs/master-benchmark
Which can also be run with minimal modifications on ngn and others.
For database the h2o.ai for duckDB really is a solid hard bench IMHO:
https://github.com/l-labs/rust_ipc/blob/master/tests/ipc_tes...
Which is ~6k tests (Rust is actually what I use to drive release testing)
Unknown quality is the absence of information, you can’t have a signal for it.
If you are using “unknown” as a euphemism for “poor”, which is the most obvious thing that makes the signal meaningful in the direction that seems apparent from context, why?.
That's also why "closed-source" was mentioned in the same sentence. Two missing signals.
That's also why the author keeps pointing to the benchmarks and test suite, which is the signal they'd like us to judge by. Seems entirely reasonable to me!
Typically if a site is well designed, that used to be a signal that a lot of resources had been invested into the project. Now that signal is rather noisy.
Here, is particularly bad, as the main page is just complete slop bullet points. What does 'end-to-end column compression' mean? or 'uniform bytes at every layer'?
It's difficult to understand at a glance now, if this project is going to be abandonware in a week or if someone actually spending time on this. If the creator can't be bothered to read it, why should I?
Personally, I'm also very weary of Claude design-isms. Once you learn them, you see them everywhere.
That said the mail group has more details and the blog posts are effectively internal posts turned into shorter (less code) versions. The binary itself is years of effort - with small improvements over many years and shaving a few kb each time ... 'built the old way' like amish furniture :)
[1] https://web.archive.org/web/20160306154854/http://kx.com/q/d...
Columnar databases are array languages, after all.