I’ve been fascinated by languages like APL, J and BQN, and the succint expression of dense computation they allow.
Sure, I’ve always been fascinated by programming languages. But one constant bugbear has been just how much code it takes to express any significant computation. Array languages offer a set of primitives that operate and compose on much richer data sets (n-dimensional arrays) than the default in other languages, at the cost of looking quite… dissimilar to what programmers normally expect to see, code-wise.
I genuinely love that APL stands for “A Programming Language”. Iverson’s Notation as a Tool of Thought is eye-opening in its promise, no less so today then when it was written. BQN seems to be the best-available modern open-source implementation, but its documentation is still lacking, especially for programmers new to APL-derived languages. So I thought I’d start with J, especially as it doesn’t need the symbol set APL requires, and it has some interesting means of combining operators (hooks and forks) that looked fun to play with too. There’s also ngn/k, an open-source implementation of K that has an online playground if you just want to jump in and be bewildered.
That means that my total experience writing APL-style code to date amounts to some tentative J written while following their tutorial. I’ll publish some notes on the experience when I’ve completed it. It’s been fun so far, but not without its own warts & cruft. Host OS interactions look, well, absurd. But I’m still the neophyte here, so it’s their party.