what k got right
summary: three months in. why arity-classed vector evaluation still gives modern systems a useful design challenge.
Core idea: K's lasting lesson was that arity and value shape can move complexity out of call sites and into a compact, optimizable runtime table.
K's compactness is a software-engineering story, not a hardware one. The decisions live in the operator table, not at the call site.
Three months in. Most of my time has gone into reading kdb+'s footprints. The thing I keep coming back to is that the same symbol means different things at one and two arguments, and that sounds like a parser trick until you build a runtime around it. Then it is the only sensible way to schedule work. A monadic primitive is a kernel over a column. A dyadic primitive is a kernel over two columns. A triadic primitive is a join. The query plan writes itself, because the language has very few decisions left to make at the call site - they were made in the table.
Everything else in K - the closed atom-vector-dictionary shape, the absence of loops as a syntactic form, the explicit reduce-and-scan adverbs - falls out of that. Once you have committed to a table that does the choosing, you have committed to the rest.
I will not write K. I will write something that owes K a debt.