Hacker News new | ask | show | jobs
by jodrellblank 2500 days ago
having studied and interacted with many of the early APL pioneers, including Ken Iverson, [..] Why does something like J even exist? Do you know? I do.

From reading, because the glyphs were too hard to deal with in a pre-Unicode world. Too hard to type, to display and to print. J was intended to be ASCII based, column-first and play more with natural language grammar features. But I have wondered, was Ken Iverson happy with J? Did he like it? Regret it? Is there any record of anyone asking him or him discussing or writing about this?

Frankly, I have been wishing, for decades now, for someone to stand on the shoulders of APL and develop its successor. A rich SYMBOLIC language capable of allowing rich and effortless expression of ideas at an entirely different level of thought and abstraction than for-loops and indenting lines by four spaces.

What properties might this have?

A brief touch of APL has left me chiding mainstream languages for not having vector/collection oriented transforms, and for not having a core of carefully thought out compose-able symbols for common operations. But it has also shown me a view of people having to work around APL's limitations. The whole environment feels a little like watching Prof Kernighan demonstrating a Unix pipeline to spellcheck a document from a text file of known words in the 1970s, and being impressed that it happened, but comparing it to a probabalistic context-aware spelling and grammar checker today and thinking "you couldn't build that with a shell pipeline" - but with my dim view, I'm not able to see much room for a notation which is significantly better across (m)any domains without just being "build your own DSL". Even APL implementations don't agree on the exact behaviour of the core APL functions. I believe NARS2000 and Dyalog handle ⊆, ⊃, ↓, ↑ differently. How much room is there for a notation to be bigger and more capable but still agreeable to enough people?

What does "effortless expression of ideas at an entirely different level of thought" mean in concrete terms? What level? What ideas? I'm enticed, but unseeing.

Compilation and distribution through executable files

Dyalog APL can make executable files. The main catch is that you need a license to run them, as well as a license to develop them. There seems to be no way to buy a Dyalog APL license then distribute free (unpriced) executables. They have an object system, and .Net integration, and have been filling in some of the symbol combinations over the years - as a beginner I can't really comment on that except iota underbar is now a builtin function.

2 comments

One of core things (ideas, requirements) in APL is to make mathematical notation in one line.

Another thing (restriction) was to use available hardware. So some symbols were created in a way which was possible to achieve with teletypes of the days.

It's possible one should start with careful (re-)reading of "A programming language".

And maybe we should think once again about the power of the whiteboard and how we could express that into an executable language.

Right! Some of the characters were over-types! The teletype would print one standard character, advance to to the next position, then backup to the character it just printed and over-print it with a second. The quote-quad is an example of this. It would print a quote and then backup and print a rectangle standard drawing character over it.
> was Ken Iverson happy with J?

Hard to say. What does a person who devoted decades at IBM and around the world promoting and speaking about the idea of a symbolic language as a tool for thought think about abandoning that idea entirely? I actually heard him give this presentation in person way back when at an international ACM APL conference (I attended to a few of them).

> What does "effortless expression of ideas at an entirely different level of thought" mean in concrete terms? What level? What ideas? I'm enticed, but unseeing.

I understand. It's hard to communicate something like this. I sometimes equate it to a bird trying to explain to a human being what it feels like to fly. One can get to an approximation, but at some point the only way to see it is to become a bird.

The best explanation I have found requires the reader to have formal musical training. Far more people have this than the opportunity to use APL on a daily basis for a couple of years. Rather than repeat it here, I just offered the explanation to Volt. Here it is:

https://news.ycombinator.com/item?id=20770420

> Dyalog APL can make executable files. The main catch is that you need a license to run them, as well as a license to develop them.

Right. Because APL ended-up being used in the financial industry we have a situation where you have various versions of it offered as paid licenses rather than FOSS. This, right there, pretty much killed the language. There are interesting experiments out there, NARS2000 perhaps being the most accessible. However, this isn't going to bring the language to forefront in any imaginable way.

Put simply:

If you can't develop useful software solutions with APL better and faster than with other languages, well, it is useless.

For example, I can't build a website with APL. I can't build and deploy ML applications. I can't program an embedded system. I can't build a CAD program or a game. Etc.

What is it good for then?

Today? Not much. As much as I love what the language represents it is my opinion that the only reason it still exists is because there might be codebases in corners of financial institutions that rely on it. With time this too will evaporate. At that stage APL becomes a language of academic interest, and that's about it.

> Even APL implementations don't agree on the exact behaviour of the core APL functions.

Well, yeah, that's today. I'll call it "30 years after the start of the end". Back in the 80's, for the most part, you had the IBM APL/APL2 flavor and, at a popular level, STSC's PC implementation. There were others, but, for the most part, the APL core followed Iverson's original APL. IBM added such things as nested arrays and a few other nice improvements. In many ways IBM dropped the ball. I can't blame STSC, they did not have the staying power IBM has. IBM could have evolved, open sourced and popularized APL. They did not.

To add a little bit to the idea of notation and how, as one example, it enables the recognition of patterns, here's one of the most famous APL libraries.

They are called "idioms" precisely because these expressions can be like words once you internalize them (something that happens naturally to a professional user of the language). It's interesting to explore the library and maybe try a few of the idioms on something like NARS2000.

Finn APL Idiom Library:

https://aplwiki.com/FinnAplIdiomLibrary