A List of companies that use Array Languages (J, K, APL, q)
github.com
github.com
https://www.youtube.com/watch?v=EE2yz0ptSzQ
I don't think he keeps any old code lying around, but in the past I've tried reading it without success. That makes me a DSF— a Domain Specific Failson :[
But perhaps another failing of the current array languages is that they are sort of walled gardens. Not as easy to integrate or modularise as something like JS/Python (on the other end of the PL spectrum.
Syntax doesn’t exist in a vacuum. There is a significant adoption advantage that can be gained by reusing popular idioms. This is why QWERTY is more popular than Dvorak long after mechanical typewriter arms or even permanently marked mechanical keys! I’m pecking this out on a phone keyboard which is just software.
ps: thanks a lot
may i ask why?
ps: oh, and commercial APL/j/k engines are said to be extremely optimized
Lisps and Smalltalk also have repl-oriented development, but they're verbose. Even tab-selecting a Copilot generated autocomplete takes more keystrokes than some array language programs.
At this point it's just a parser and a dream, so don't expect much.
The problem is that most people who are unfamiliar with APL usually don't see the larger picture, and you need to learn the language before understanding the reasoning. But once you understand it, you don't really need to hear the arguments anymore.
One argument that may be easier to digest is that the very optimised syntax allows you to easily work with the data in an interactive fashion. This is similar to how a calculator that forced you to write 1.add(2) would be rather painful to use, even if it functionally is the same as 1+2.
In programs that you save to a file and is part of a larger project, this benefit is of course less relevant.
e.g. nested iterators/loops instead of ∀x,y ∈ ℝxℝ etc.
For a startup "using the language you know" is good advice. To be at the top of a specialist field, there are better ones.
For me, the feeling of being well-designed or expertly crafted is what sets the array languages apart. Learning one concept often (intuitively, for me at least) extends to many other parts of the language.
For example, in Q the comma operator concatenates arrays:
q) 1 2 , 3 4 5 // returns 1 2 3 4 5
...but it also merges dictionaries (duplicated key `x gets the new value): q) (`a`b`c!1 2 3),`c`d!4 5
a| 1
b| 2
c| 4
d| 5
...and also joins tables by row. Sure this is "just" operator overloading, but it's so deeply ingrained in the language it doesn't feel jarring or bolted-on like in other languages.Building a program is less about crafting bespoke abstractions and more about using the existing building blocks, which leads to a semantic uniformity that's rare to find in other languages. Or at least, it's easier to get your job done using only built-in features and not have to resort to custom abstractions.
All the companies I see listed with these actually mostly use Q, which is a superset of K.
Q is a different language to K, implemented in K. There are more versions of K than Q- kdb+ is the only Q implementation, but there are others like shakti, ngn/k, and kona that implement K.
Kx is the company behind kdb+
kdb+ is the database engine that K/Q can use to persist data. It’s literally as if all your code is executed inside the database engine (because it is), you can access all data by memory and variables, and it periodically synced to disk (using mmap iirc).