The APL Orchard
dyalog.com
dyalog.com
It is an array language, an image is worth a thousand words, and an array[3][2][500] is a square image.
It'd be fun to tinker with visual effects of an APL function, and fun is a great way to fuel learning?
I did search for something like this, but I guess my Google-fu is not the best!
http://beyondloom.com/blog/index.html
http://beyondloom.com/things/index.html
http://beyondloom.com/games/index.html
http://beyondloom.com/comic/page0.html
('RodgerTheGreat on HN)
BQN https://mlochbaum.github.io/BQN/
ngn/k https://git.sr.ht/~ngn/k/tree/master/item/readme.txt (Previous discussion: https://news.ycombinator.com/item?id=22009241)
aplette, which is a modernization of Ken Thompson's APL (with a LOT of projects in between them; Ken's APL interpreter -> ? -> OpenAPL -> aplette) https://github.com/gregfjohnson/aplette (Previous discussion: https://news.ycombinator.com/item?id=21740536)
I'd also recommend checking out J, which isn't a recent development, but has the best syntax out of all array languages, has the best development environments, is the easiest to learn (it has a way to learn it built into the language itself!), and is the only one that treats making GUIs as a first-class feature (and, also, critically, is not proprietary, unlike Dyalog):
https://jsoftware.com (Has so many previous discussions I just recommend using HN search to find them.)
The chat is biased in favor of Dyalog APL, but a lot of the modern additions Dyalog has made to the language make it (in my opinion) worse as a notation, so ideally don't let it turn you off of the concept of array languages entirely if Dyalog doesn't "click" with you.
If you haven't already, you should also check out Notation as a Tool of Thought, a paper so good it won Iverson the Turing Award:
https://www.eecg.utoronto.ca/~jzhu/csc326/readings/iverson.p...
And "a lot of the modern additions Dyalog has made to the language make it (in my opinion) worse as a notation" this one. I don't know when you mean modern but as a casual user, {} functions, trains, nest ⊆, rank adjustment ⍤ (like J), seem to make things more convenient?
Yes, absolutely. By a long shot. For starters, J can actually be parsed. (k can also be parsed, for what it's worth.)
"Easiest to learn"?
Spend ten minutes using J's built-in Labs feature. Or read J for C Programmers (also ships with the language), if you come from a non-array background. Iverson was able to teach this stuff to public school children in no time at all; modern array languages seem to deliberately make themselves obtuse to outside observers. APL was doomed to obscurity because the people making it decided to please existing customers rather than try and make it approachable.
I don't know when you mean modern
Pretty much every APL2 feature and everything that came after it that they didn't borrow from J.
While J has English control statements, they generally aren't used, but nearly every time I come across something written in Dyalog APL it's full of :If :EndIf and all sorts of atrocious English words which mock the ideal of a better notation than ALGOL.
Don't know where you got that one. J source can't even be tokenized except during execution!
NB. Compute n from reading a file of something
n : 0
Is this the source of a function, or a string?
)
Besides that, J has the same contextful issues as APL with regards to the value of variables determining how the syntax fits together. It's missing a few dark corners like niladic functions, but these are small differences; it's still fundamentally unparseable.Also, I'm mainly doing preparatory data wrangling with J (i.e. quick&dirty work) and not having to activate the APL keys everytime is a nice feature. The ability to write a simple #! script and dispensing with the 'APL machine' of workspaces also counts (a feature that just appeared in APL). As a data wrangler though, the true killer feature of J is Jd, the integrated columnar store. Of course you can mmap through it all in APL, but having a completely integrated solution does the trick for me! Actually, I find the concept of 'fetch your data SQLish and model it with J' such a good idea that I'm playing with the idea of extending the concept to the Racket data science world (which is mostly non-existant) :-)
So if you're doing serious programming as done in Fortune 500 companies I'm pretty sure APL wins due to consistency and tooling integration, but for one-off work J is a killer!
To clarify, that is ken thompson, not ken iverson.
It really kills me that I didn't save that talk. If I find it, I'll try to remember to update this comment with a link. It was kind of slick though.
maybe? from this thread: https://news.ycombinator.com/item?id=25090816
I do not actually have a personal need for APL or Dyalog's product, but nowadays it is pretty refreshing to see somebody who seems to deeply care about backwards compatibility.
https://chat.stackexchange.com/transcript/52405?m=56860424#5...
There are a few other companies with proprietary APL implementations that are also getting by really well.
k, which is pretty similar, is even more of a money-maker than Dyalog APL, having been responsible for a company worth a billion or more (Kx) and an entirely different company that also seems to be doing pretty well.
J also is used somewhat commonly, though less, and its users seem to be doing more than well, too (my current employer and most of my previous employers have been J shops, and none of them have gone under yet. I think a couple of them had record-breaking years in 2020). J is also free, libre software, so instead of paying for a Dyalog or K license, you should really just use it (or ngn/k, if k is more your thing).