A Letter from Dijkstra on APL (1982)
jsoftware.com
jsoftware.com
In other words, with many programming languages it's "the code is unreadable because it's not sufficiently English-like"; with APL, it's "the code is unreadable because you don't know the language."
RTL evaluation semantics aside, the argument I’ve heard for the terseness of the q language is that the interpreter is tiny so it fits inside a page. Okay, great, so use your words and kill the built-in webserver.
Ken Thompson wrote an APL interpreter for early Research UNIX.
source: http://www.cs.dartmouth.edu/~doug/reader.pdf
McIlroy:
"APL influenced the development of pipes. APL did not allow the use of operators with variants, which many utilities had at the time. It only took a willingness to throw in a new separator, the vertical bar. About four years passed, from the time they started talking about developing a new separator, to the time it happened."
source: https://www.princeton.edu/~hos/frs122/precis/mcilroy.htm
To that end, I'm not sure how to take some of this letter. I don't take the claim that tools shape the users as a criticism directly. Indeed, it seems to be somewhat favorable with the violin example there.
So, the question then, is in what way does APL shape its users? If it is to lament not being able to easily type and share their programs without a specialized terminal, it is hard to argue against the point. Indeed, that I had to be given a glossary to even attempt to read the program is baffling to me.
My guess is APL also helps build the mental muscles to shift things on a stack and compute on them. I recall having that ability from the early HP calculators did seem helpful in ways I couldn't express. Are there other benefits?
It could trivially be turned into the usual pseudo-English syntax by replacing all the single-character symbols with conventional ASCII keywords. (As in J, etc.)
Of course it wouldn't be as dense then, and the distance between the keywords and the mathematical notation they're based on would be greater.
If that's the only reason EWD didn't like APL, it's a rather silly reason.
It's also wrong. If anything, a couple of centuries of mathematical tradition suggest it's easier to reason about logic and formal correctness with terse arbitrary symbols than with English keywords, and that the terseness makes it easy to write down dense concepts that would be much less elegantly expressed in pseudo-prose.
You have to learn the symbols to do math at that level, and most people don't find the learning all that hard.
Given that you have to learn new keywords in every language anyway, it's not a huge stretch to learn some symbols instead.
And of course after you do that there is absolutely no reason not to write and check code on paper, if you happen to think that's important.
The argument isn't to be against notation. But the most common hurdle to apl that he saw was complaints on lacking a specific terminal. If that is truly needed, maybe a change to not need the terminal would have been a wiser choice?
But I see the point about the internals of a system (I assume this is the crux of Dijkstra's point) leaking into the process of teaching it, hence making it harder to form a coherent high level understanding. I continuously see the same problem with Git, which faces the same problems. It is a great system, but one that does not make it easy to form a generic overview without having to bombard the student with the lower level machinations.
Edit: grammar.
Is there some major “modern” language or library that I’m unaware is actually an APL in QWERTY clothing? I’d love to give it a try.
Which includes maybe the (greatest;worst;most horrifying) header file: https://github.com/PlanetAPL/a-plus/blob/master/src/a/arthur...
You can't be "constantly amazed" unless you have checked for those things -- because J (and other dialects) have been a thing for decades!
J supposedly supports English verbs as an alternate syntax - there's a library that purports to do this - but I have never managed to make it work in the interpreter at all. It's certainly a second class citizen, if not entirely broken.
The only APL dialect that uses English words I've ever found is QNial. It's a lot of fun to program in as a result (its syntax is also cleverly compatible with s-expressions), but it's hampered primarily by the ancient interpreter and lack of bignum support.
You've just replaced symbols, in that case, so to advocates it's a concession to typing, not expression or thinking.
Regarding J specificaly: Some words (sort, inverse, each, every) are in the standard library and loaded by default. What have you tried?
You can define your own cover words for the built-ins (here I've added a cap ([:) to signal a domain error if the word is used with 2 arguments when it expects 1, and vice versa):
times =: [: : *
signum =: * : [:
sum =: +/ : [:
count =: # : [:
J programmers don't do this for the same reason JavaScript programmers don't do this: var ArithmeticOperationsLibraryWhichIsIncludedByDefault = Math;
var TheLibraryRegardingTheBrowserWindow = window;I strongly suspect that the number of people who have modified their keyboards, fiddled with their keyboard layouts, or bought "programming keyboards" of one sort or another for working in the "curly brace languages" is an order of magnitude greater than the number of people who ever wanted an APL keyboard. Yet this is not seen as a problem with these languages, or a reason to abandon them. With the benefit of these additional decades of experience with languages, programmers, and keyboards the 1980s notion that the keyboard was the problem should be perhaps finally laid to rest; given the evidence of the intervening decades that programmers can and do adapt their keyboards to their languages.
The idea that APL wasn't adopted because programmers were stuck with keyboards that did not match it is 1980s received wisdom, recirculated in part because people look back at history such as this very item at hand. We have, however, over three decades' worth of experience of a world where programmers very much do change keyboards to suit their needs. The evidence of subsequent and even contemporary history shows that the received wisdom is wrong.
A case in point that is even contemporary to Dijkstra's letter: In the 1980s, the ZX80 and ZX81 came out, famously with keyboards that could directly enter tokenized BASIC, token by token. Yet the fact that one could not do this with (say) a PC/XT keyboard (or even a QL keyboard, for that matter) was not seen as a problem with BASIC, or a reason to abandon it.
Documentation & source code:
http://www.softwarepreservation.org/projects/apl/APLSoftware...