[HN Gopher] Try APL ___________________________________________________________________ Try APL Author : tosh Score : 293 points Date : 2021-06-10 14:02 UTC (8 hours ago) (HTM) web link (tryapl.org) (TXT) w3m dump (tryapl.org) | JacobiX wrote: | I really like APL but I cannot imagine myself depending on a | closed source tool-chain. I've heard that the GNU APL is order of | magnitude slower than Dyalog APL, but I can't find a benchmark to | confirm that. | mlochbaum wrote: | Not to claim any are better than Dyalog, but there are options: | https://aplwiki.com/wiki/List_of_open-source_array_languages . | I think dzaima/APL and April are both all right. Personally, I | think GNU is not a good design: for example it has no lexical | scoping or even control structures, essentially requiring you | to use goto for program control. BQN is my own effort and I | would say it has more serious ambitions than these. If you're | not attached to the APL language specifically, I'd take a look. | andrewnc wrote: | I check back in on your BQN project every few months. I am an | anxious potential user and love the work you do. | JacobiX wrote: | Thank you for the comment, I wasn't aware of the BQN project, | sounds very interesting to me. | [deleted] | moonchild wrote: | Yes, GNU APL is quite slow. There was some primitive | implemented in GNU APL (as part of the interpreter, in c). A | pure-APL implementation running on dyalog outperformed it by a | considerable margin. | | If you're looking for a performance, opensource APL, try j. | Though if performance is not a priority then, as the sibling | says, dzaima/apl or april should be more than adequate. | IOT_Apprentice wrote: | I'm curious why there was not larger adoption of this language | and why it was lost by the wayside. One of the commenters | mentioned that the symbology made it alien to average folks who | did not have the background in that notation. That appears to | imply that the domain learning curve was too steep for the folks | who don't "think" in that fashion. Hmmm. | 7thaccount wrote: | I think some linear algebra knowledge certainly helps a lot, so | that's a good point. A lot of APL doc talks about concepts such | as "Rank" and "Inversion" and "Transpose". That is a little | math heavy. | | The other problem is that I would bet that a lot of the early | use for APL was done better by Excel spreadsheets on desktops. | By the time APL moved off the mainframe, it was too late. Of | course, I'd imagine as far as code maintenance goes, APL beats | a very large spreadsheet with a lot of VBA. Excel also has | built-in charts and other functionality that is far clunkier, | even in the best APLs. | truth_ wrote: | I recently listened to this podcast episode titled CORECURSIVE | #065 From Competitive Programming to APL With Conor Hoekstra[0]. | I learned a lot things there. I highly recommend it. | | [0]: https://corecursive.com/065-competitive-coding-with-conor- | ho... | lwhi wrote: | How do you key the [?] character easily? | Jtsummers wrote: | `i on this site. If you use another editor (including, I | believe, Dyalog's actual APL implementation, but I always used | emacs when I was playing with APL) you can change the prefix | character. I always preferred . because there is no reaching | for the character (on the Dvorak layout at least) and it | doesn't conflict with much other than decimal numbers (where | you may need to type .. to get the desired result). | mlochbaum wrote: | Use `i to get it. If you hover over the character in the | language bar at the top, the text shown has some indications of | how to type it. Here, "Prefix: <prefix> i", with the prefix | being a backtick. The version with a tab afterwards is longer | but could be easier to remember for some characters. | [deleted] | mlochbaum wrote: | Since this seems to have brought TryAPL down, there are other | options listed at [0]. In particular, ngn/apl[1] is a JavaScript | implementation and runs client-side. But it's limited relative to | Dyalog (used on TryAPL) and no longer under development. | | [0] https://aplwiki.com/wiki/Running_APL | | [1] https://abrudz.github.io/ngn-apl/web/ | dang wrote: | > Since this seems to have brought TryAPL down | | Apparently that always happens: | | _Try APL in your browser_ - | https://news.ycombinator.com/item?id=9774875 - June 2015 (27 | comments) | | _Try APL online_ - | https://news.ycombinator.com/item?id=4090097 - June 2012 (4 | comments) | cupofjoakim wrote: | hehe, just clicked "2 + 2" followed by pressing enter and got | SERVER ERROR. HN hug of death, I presume? Otherwise either me or | the tool is very bad at math. | TimTheTinker wrote: | I assure you, APL is not bad at math. It's been around almost | as long as COBOL. | | https://en.m.wikipedia.org/wiki/APL_(programming_language) | sondr3 wrote: | I had a blast learning to write and read APL for a course at my | university where we chose and presented the papers from HOPL IV. | If you want a fairly quick and easy read about the history of APL | I can heartily recommend the paper "APL Since 1978". A small | taste: `twoSum - {1|[?][?]=([?][?].+[?])}`, a dyadic function to | find the indicies of (the) two elements in an array that sum to | [?], for example: `9 twoSum 2 7 11 15` will return `0 1`. Though | I doubt I'll ever write any larger programs with it, I've had a | lot of fun with it. | tosh wrote: | > APL Since 1978 | | https://dl.acm.org/doi/10.1145/3386319 | dang wrote: | One past thread: | | _APL Since 1978 [pdf]_ - | https://news.ycombinator.com/item?id=23510433 - June 2020 (21 | comments) | hhyndman wrote: | Back in university (1974), I took a course in AI. The prof wanted | us to write a brute-force solution to solve the 8-queens problem | -- any language! | | I wrote the solution in APL in about an hour and it only had 3 | lines of code. The rest of the class spent days on their | terminals and keypunches trying to solve it. Most solutions took | hundreds of lines of code. | | I got a D from my professor. I questioned why and was told that | it was unreadable, and that the solution was inefficient. This | annoyed me because he didn't know APL, and I figured that since I | solved the problem in one hour, while the rest took days, it was | very efficient. | | I protested the result with the department head (who liked APL) | and ended up getting an A+. As you can imagine, all the rest of | my assignments, written in a variety of languages, were graded by | that AI prof with significant prejudice. | | I passed nonetheless. I loved APL and ended up working for one of | the major APL providers as my first job out of school. | shrubble wrote: | There is Aplette which supposedly integrates nicely with other | Unix tools. It's a port/update of the earlier openAPL source | code, which I think was done by Ken Thompson? Here: | | https://github.com/gregfjohnson/aplette | Heliosmaster wrote: | If you are interested in trying APL in an interactive notebook, | try it here: https://nextjournal.com/try/mk/dyalog-apl | Phiwise_ wrote: | Nice. Now one doesn't need to purchase a specialty keyboard to | write in APL. | cardanome wrote: | Does anyone know of an input method for APL that works similar to | an IME that you would use for Japanese? | | Basically you type the name of the operator in latin characters | and get the proper symbol autocompleted. | | I only see direct key to symbol mappings which might be fine for | a full time APL dev but offer a bit too much of a learning curve | for just trying it out. | Jtsummers wrote: | The linked site uses a couple methods: `i => | [?] (iota) ii<tab> => [?] | | In some editors you can change the prefix character (in emacs I | think the default is . or I changed it to . almost | immediately). Also in emacs (though I didn't try this with APL) | you can use an entry method based on TeX so if you type: | \iota | | You will get [?] | abrudz wrote: | The RIDE interface (https://github.com/dyalog/ride) allows you | to type double-backtick and then a search word. Screenshot: | https://i.imgur.com/kagYC73.png | WorldMaker wrote: | The Windows emoji keyboard (Win+. or Win+; whichever is more | comfortable for you) has a lot of the Unicode math symbols | under its Symbols tab (marked with an omega). It has a pretty | good IME-ish type to search experience for regular emoji, but | doesn't support type to search under the Symbols tab. (I wish | it did and hope it is something they consider adding.) | barbazoo wrote: | How practical is a language that uses all these non-ascii | symbols? Do developers remember the alt-codes or do they use | visual IDEs like the one OP linked or maybe even special | keyboards? | lanstin wrote: | Back in the day it was special keyboards. (Source I had an | internship in 1984 or so, and at night I could use the | mainframe for fun. I wrote a calculate digits of Pi with APL | program. I had a slowly converging algorithm and the machine | despite being bad ass was quite a lot smaller than my iPad, but | it was awesome. I did have a deep maths background so was used | to at least all the Greek letters). | naikrovek wrote: | There was an APL keyboard. | | And, the APL interpreter/compiler was weird. if you typed an F | followed by a backspace, followed by an L, it would merge those | into an E, as if they were typed on top of each other, like a | typewriter. | besnn00 wrote: | Makes sense because some special functions were meant to be | expressed as a combination of symbols. Natural logarithm was | *, backspace, star ; circle was used for logarithms and star | was used for both exponentiation and the constant e. | useful wrote: | As someone who has used APL professionally to maintain a legacy | codebase https://en.wikipedia.org/wiki/Write-only_language | | Anyway, I like reduce, shape, membership, find, and/or, and | ceiling/floor. I actually like dealing with arrays in this way. | | IMO, that is why numpy/matlab is so much better than APL. | sundarurfriend wrote: | A lot of people seem to have trouble with symbol-based | languages, for eg. regular expressions, some parts of Perl, or | APL in this case. That seems to be part of the appeal of Python | too, for a lot of people, that it's unusually low on non- | alphanumeric symbols. I wonder if it has something to do with | "Head-voice vs. quiet-mind" [1]. I'm generally on the non- | verbal quiet-mind side, and find APL-like languages very | intuitive and appealing. Debugging or maintaining them doesn't | feel any more difficult than more verbal languages either. | | [1] | http://web.archive.org/web/20210207121250/http://esr.ibiblio... | jacoblambda wrote: | I think that quiet vs verbal mind personality difference is | really what separates whether people like which languages. | | I personally can't stand languages that are "spoken | description". I understand the appeal to others but the | languages just don't mesh with my way of thought. When I'm | programming or building a system I'm thinking in the sense of | abstract transformations and structures not in any spoken | structure. Often times for me it's easier to draw out what | I'm thinking of rather than explain it since there's not | necessarily a verbal representation behind what I'm thinking | of until I sit down and try to come up with one. | jonstaab wrote: | What is your setup like? I was just messing around with it just | now using homebrew's gnu-apl package, and it just seems like a | toy language, for example scripting mode is sort of bolted on | top of interactive mode, since you have to add an ")OFF" | command at the end of your script. How do you handle modules? | mlochbaum wrote: | GNU APL is mostly a reimplementation of APL2 from the 80s, | with some additions that in my opinion do nothing to get it | out of the 80s. Dyalog has namespaces, but scripting support | is only due to be released in the next version, 18.1. | | So I don't know of any APL that allows module-defining | scripts. This is really unfortunate since there's no | technical reason to prevent it. With lexical scoping (Dyalog | has it, GNU doesn't), it's easy to define a module system and | I did this in my APL reboot called BQN: | https://mlochbaum.github.io/BQN/doc/namespace.html . | lokedhs wrote: | BQN is really impressive, and implements a language which | is similar to APL, but without a lot of the legacy baggage | that Dyalog has gathered over the years. | | For someone that wants to get started with array languages | and does not have any need to be compatible with APL, then | this is probably the best place to get started. | | It also has good documentation, unlike my array language. I | need to put a lot of effort into it to get even close to | what BQN did. | neolog wrote: | I see it's self-hosted. How much code needs to be written | in another language in order to bootstrap the whole thing? | mlochbaum wrote: | In Javascript it would be probably around 250 lines: the | current VM is 500 but that includes extra stuff for | performance, and system stuff like math and timers that | aren't part of the core language. | | This depends a lot on the host language. BQN requires | garbage collection because it has closures so an | implementation in a language without it needs to include | a GC. JS has a lot of conveniences like closures of its | own, and the ability to tack properties onto anything, so | even other high-level hosts would generally take more | code. | neolog wrote: | I'm thinking Julia could be a good fit. It's garbage | collected, pretty fast, and designed for numerical work. | zelphirkalt wrote: | Got a server error trying a few examples from the shown tutorial: | | ~~~~ TryAPL Version 3.4.5 (enter ]State for details) Thu Jun 10 | 2021 14:30:06 Copyright (c) Dyalog Limited 1982-2021 2 + 2 4 4 2 | 3 + 8 5 7 12 7 10 [?]100 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 !10 | 3628800 +/[?]10 55 +/[?]10 SERVER ERROR ~~~~ | SamBam wrote: | Yeah, I'm guessing Hug of Death. | Jtsummers wrote: | If APL interests you, I worked through (most of) _Mastering | Dyalog APL_ [0] a while back. It is very well paced and | organized. The vast majority of it also works with GNU APL, | though not all. | | [0] https://www.dyalog.com/mastering-dyalog-apl.htm | vlmutolo wrote: | Everything here is pretty easily accomplished using vanilla | Python (numpy counts as vanilla at this point). I'm having | trouble seeing what the advantage is of an "array-based" language | over a well-designed array library like numpy. | import numpy as np from collections import Counter | print(2+2) print(np.array([4,2,3]) + np.array([8,5,7])) | print(np.arange(1,11)) print(np.arange(1,100001).sum()) | print(np.arange(1,11).prod()) avg = lambda x: x.sum() | / x.shape[0] print(avg(np.array([1, 6, 3, 4]))) | throws = np.random.randint(1, 7, size=(10000,)) | print((throws == 1).sum()) print(Counter(throws)) | print(Counter("Mississippi")) | Grustaf wrote: | The point is not _what_ you can achieve, but _how_. You can | achieve almost anything in any language, but I bet you can't | implement Game of Life in 20 characters of Python! | skruger wrote: | What about 17? {[?][?][?]}[?]3 3[?]"3+0,"[?] | tzs wrote: | People like it for the same reason we like modern chess | notation over older more verbose notation. | | Consider a game that starts with white moving their king side | knight to the square in front of the pawn on the bishop's file. | Here is how that would have been written through the ages [1]. | | Early 1600s: The white king commands his owne knight into the | third house before his owne bishop. | | Mid-1700s: K. knight to His Bishop's 3d. | | Early 1800s: K.Kt. to B.third sq. | | Around 1850: K.Kt to B's 3rd. | | Around 1860: K.Kt to B. 3d. | | Around 1870: K.Kt to B3. | | Around 1890: KKt-B3. | | Early 1900s: Kt-KB3. | | Mid 1900s: N-KB3. | | Last quarter of 1900s to present: Nf3 or f3 if you want to | avoid language-specific piece names. | | Reading that numpy code compared to reading APL is like reading | a record of a chess game from around 1700. | | [1] | https://www.knightschessclub.org/the_history_of_notation.htm... | mamcx wrote: | Exist power in being fully immerse in a paradigm. You can do OO | on C, but still you are on C, that is not OO. | | You can do arrays on python, but python is _not_ an array | language. | | In other words, the moment you mix 2 paradigms, them will | mismatch in direction of the most dominant one. | busterarm wrote: | Terseness and composability. | | Here: https://medium.com/@jansson.sebastian/apl-in-the-eyes-of- | a-p... | bombcar wrote: | It's interesting how many programming languages seem to have | "accessible to those not trained in it" as a design goal | (offhand I can think of SQL and COBOL, but also BASIC and you | see it even in Python, etc). | | But there are trade-offs doing that, and "amount you can look | at at once" is a huge one. | yiyus wrote: | This. | | What I find really annoying is how many people confuse this | property ("accessible to those not trained in it") with | readability. | bombcar wrote: | It's a shame, too, as the most "dense" recent language we | had was perl and that got universally made fun of as | "line noise" - which I feel influences people more than | they think. | busterarm wrote: | "amount you can look at at once" is severely | underestimated. | patrickthebold wrote: | The main reason I want to learn APL is for the white-boarding | exercises during interviews. Most places will let you write in | your strongest language. | haskellandchill wrote: | Haha using APL in interviews (outside of finance) would be | legendary. | gaogao wrote: | Yes, but go with something too far off the beaten path and you | just get https://aphyr.com/posts/341-hexing-the-technical- | interview, which while really fun, doesn't get callbacks. | | (I've always wanted to try doing a white-boarding interview in | a visual language like Scratch) | patrickthebold wrote: | I've been meaning to write 'bullshitting the technical | interview' where I neither know how to solve the problem nor | APL but end up convincing the interviewer that I know both. | neopointer wrote: | I once used a (very bad) tool called Mediation Zone [0], and they | used APL as a scripting language inside of the tool. Worst | experience ever. | | [0] https://www.digitalroute.com/mediationzone/ | 7thaccount wrote: | It seems like they're very successful from their website. What | was bad about it? | | I would personally love to have a built-in APL scripting | language for interacting with data. | jacoblambda wrote: | Based on the other comment, it looks like it's another | language that happens to shorten down to APL in name rather | than APL "A Programming Language". It looks like some | internal Java derivative language which sounds like could be | rather painful if not done well. | abrudz wrote: | https://www.artinsolutions.com/competencies/mediationzone%C2... | says "Business logic of these agents is defined in APL - | Application Definition Language, which is based on Java | language." which doesn't sound like the APL I know. | | https://careers.digitalroute.com/jobs/98847-implementation-c... | has a code sample (https://stuffthatiliketoshare.files.wordpres | s.com/2014/07/no...) which does not look like APL at all. | haolez wrote: | I've heard that R is an array language. Can it compare with the | likes of APL? | gmfawcett wrote: | The closest language to APL/J/K is NumPy, the numerics library | for Python. It was deliberately designed in the spirit of an | APL, but without all the squiggly characters. | no-s wrote: | > but without all the squiggly characters | | I so liked the APL squiggly characters (mostly Greek letter | based glyphs). Made for very succinct code. Combined with | right-to-left precedence resulted in very low overhead to | write and read code. Most people who complained about it APL | as "write-only" seemed to be outside the community of serious | APL programmers. Once you learned to read the language it was | very easy to comprehend at regular reading speed... | | In contrast NumPy seems absurdly wordy, and waiting for the | completion menu in an IDE tends to derail my train of | thought. | | However I do tend to like NumPy for being APL-like, so it's | not a damning contrast as far as getting things done. | gmfawcett wrote: | I get it, and I wrote that even though I'm a fairly big J | enthusiast. It's fun to solve a tricky problem by cranking | out two or three rows of line noise. :) Numpy is wordy, but | you can still program in terms of arrays -- it might not | feel like quick symbolic magic, but the underlying paradigm | is (almost) the same. | agumonkey wrote: | I really don't understand why people dislike this. As long | as the domain and input/ouputs are clear.. having a D is | not worse than a `delta` or `computeDeltaOfPair` (actually | the shorter the better to me.. | gmfawcett wrote: | in fairness, a delta is far more discoverable to a casual | reader than, say the APL Grade Up symbol. :) | goatlover wrote: | Julia has builtin language support that kind of array | handling, including broadcasting. | leephillips wrote: | Yes, there are a handful of languages where you can operate | on arrays (without looping), including Fortran. But this | doesn't make them true array languages like APL. | mbauman wrote: | Note that Julia has explicitly[1] taken much inspiration from | APL to a further degree than NumPy does IMO. | | 1. | https://github.com/JuliaLang/julia/search?q=apl&type=issues | mamcx wrote: | This little thing caught my interest: APL takes | care of binary-vs-decimal inexactness too, so 3x(1/3) is really | 1: 3x(1/3) | | How is this done? How well it scale? I suppose well, because APL | is good for math, rigth? But then I remember that must be | slow...? | mlochbaum wrote: | That must be a reference to tolerant comparison, but the way | it's written is bizarre. Comparisons in APL are (optionally: | you can turn it off) subject to tolerance, meaning that numbers | with a small enough difference are treated as equal by | comparison or search functions. There are probably better | resources but I describe it at [0]. | | However, Dyalog just uses IEEE doubles (with an error in place | of infinities or NaNs; also you can configure to use higher- | precision decimal floats), no different from JavaScript. The | result of, say, 0.1+0.2, is not the same as 0.3, it's just | equal under tolerant comparison. | | [0] https://www.dyalog.com/blog/2018/11/tolerated-comparison- | par... | gugagore wrote: | To be honest, I don't know what that claim means, but know that | `(1 / 3) * 3` is exactly 1 under plain-old IEEE floats. | | The "fun" is with, e.g. `0.1 + 0.2`. I just tried on the | website 0.1 + 0.2 - 0.3 | 2.775557562E-17 | | which agrees: julia> 0.1 + (0.2 - 0.3) | 2.7755575615628914e-17 | [deleted] | bostonsre wrote: | It was used heavily for legacy trading and accounting | applications at a fortune 50 company that I worked at early in | my career. I don't recall any performance discussions at the | time, but we were processing a large chunk of money on a | handful of expensive ibm power pcs. | 7thaccount wrote: | It's still used at those companies. Arthur Whitney wrote an | APL variant called A+ still in-use at Morgan Stanley. He then | left and wrote the "k" language, which is just ASCII APL | (although definitely some major differences). K is the | language of the extremely expensive kdb+ time series database | (normally used for stock price data analysis I think). It's | all in-memory data on a giant SSD (very fast and elegant | design). He since left kx systems (company he made kdb+ with) | and has a new startup called Shakti. Finance are generally | the only folks that can afford the prices I believe. | bostonsre wrote: | Yea, I have no doubt that there are still a handful of | extremely well paid APL devs at the company I worked at | then (I wasn't at morgan stanley). I was part of a project | that helped put a webservice frontend in front of the app | so that non-power users didn't have to use a cli to | interact with the application if they didn't want to. I | don't think there was any appetite or desire to engage in a | re-write due to the risk involved when I was there then and | I would guess they have maintained that reasoning. I have a | vague recollection of some of the stories from the APL | devs, one of them was the first to get APL working on a | personal computer way back in the day. He carried the | computer into some APL conference and demo'd it and got a | massive ovation supposedly. | 7thaccount wrote: | That's a great story. I wish I could write modern APL at | work. Would be a lot of fun. | cochne wrote: | Seems nice in theory, though I'm immediately turned off by having | to reach for special characters not on my keyboard. | mirekrusin wrote: | Julia solves this very gracefully with LaTeX-like input, ie. | you type \lambda<TAB> which expands to l | Wezl wrote: | Some APL environments such as ngn/apl[0] allow tab completion | like |o<tab> results in [?]. This is probably available on | tryapl.org too, but I can't test it when it's down :/. It may | also be available in the full dyalog apl product and IDE. | | _EDIT_ : see https://news.ycombinator.com/item?id=27462828 | too | | [0]: https://github.com/abrudz/ngn-apl | augustk wrote: | To avoid this you typically use a character keymap with APL | characters accessible with AltGr and Shift+AltGr, for instance | AltGr+i for iota and AltGr+r for rho etc. After a while you | learn the keystrokes and if you need a less frequently used | character you can click on it in the language bar. | melling wrote: | someday soon we'll be able to use voice input to say these | characters. | | Of course, I've been wrong for about a decade. but we have to | be getting close | leephillips wrote: | I'm glad I work at home. | detritus wrote: | [?] | tosh wrote: | If you want to learn more about array programming languages there | is a new podcast series at https://www.arraycast.com with some | banter, philosophy, history and a collection of related resources | https://www.arraycast.com/resources | olodus wrote: | Found it when their first ep was posted here on HN a few months | ago. Had seen array langs before but never dared to sit down | with them. Their pod made me take the plunge. These langs are | fascinating. As someone who likes func programming normally it | feels related but with reduce on steroids. | NextHendrix wrote: | Are there companies still producing modern keyboards with APL in | mind? I like the idea but can't see how it would be practical | with a normal keyboard. | sidpatil wrote: | Unicomp was selling them for a while, if I remember correctly. | I don't see them on their website anymore though (but maybe I | didn't look hard enough.) | bombcar wrote: | https://www.pckeyboard.com/page/product/USAPLSET - they seem | to still have it - or at least a keyset. | | You can order it custom also: | https://www.pckeyboard.com/page/product/KBDCFG - US APL. | the_only_law wrote: | You can still get them, only on certain keyboard though. I | want to say you can purchase the individual key caps as well. | the_only_law wrote: | This was initially downvoted, perhaps because I didn't post | confirmation , so in case no one believes me: | | https://www.pckeyboard.com/page/product/KBDCFG - choose a | color and than select _Language - > US APL_ | | https://www.pckeyboard.com/page/product/USAPLSET - keycaps | | https://www.pckeyboard.com/page/product/00UA41P4A - premade | yesenadam wrote: | (Well, it wasn't me, the comment I'm replying to now says | 37 minutes ago. I did downvote your first comment just | now, before seeing your self-reply. Sorry. I upvoted your | second, to reimburse you.) | | When I saw "I want to say" I stared at it for a minute.. | | I've been hearing it for a while from Yasser Seirawan (US | grandmaster) doing chess commentary on major tournaments, | on the St Louis chess youtube channel. He's a great | storyteller and commentator, seems a wonderful guy, but a | kind of walking verbal accident-waiting-to-happen. Like | he seems incapable of pronouncing about 50% of names. He | started saying "I want to say" frequently in the last | couple of years. Lately one or two of his co-commentators | starting saying it too. It seems to just mean "I think"-- | i.e. not "I think it was 1987" but "I wanna say it was | 1987"--for no apparent reason except it's more words. | (Maybe because no-one can say "You're wrong" to "I want | to say"?) I really loathe it. Why tell me you want to say | something, why not just say it?! Uh but it doesn't mean | that apparently, it just means "I think". That was a | perfectly good expression. "I want to say" makes me feel | like going into a forest where I never have to hear | humans speak again. (Related: I downvote any comment I | see starting "Fun fact:"--that should be most strongly | discouraged, I believe, being similarly barbarous.) | | This is the first time I've seen it in print. I | considered replying with a strong objection, imagined | whether that could change the expression's course of | popularity in English. Was considering favouriting or | screenshotting it for further reference when I saw the | comment I'm now replying to. Where does it "I want to | say" (meaning "I think") come from?! | | Apologies for long rant, but I felt I owed you an | explanation! Maybe your other downvoter was also trying | to nip "I want to say" in the bud on here, before it | becomes another "literally" or "fun fact". | mikelevins wrote: | It's a venerable idiom that means something like "I think | X, but am more uncertain than 'I think' normally | implies." | bombcar wrote: | This is now an aside, but I suspect it comes from this | progression: | | "I say that" -> "I want to say that" | | It's a verbal form of softening what you're saying and | indicating you're not sure. The "online text" version | would be to use "IIRC". | yesenadam wrote: | Oh thank you, fascinating. Hmm I notice now that "I | think" is similar to "I want to say" in literal meaning-- | not stating the uncertainty, but they're both like | "Warning, about to report on what my brain is doing, | don't blame me!" | bombcar wrote: | It's similar to the third-personing we do when we have to | enforce a rule: "I'm sorry but I have to ..." or "I'm | afraid I'm going to ...". | | In both cases we're trying to downplay our involvement a | bit. | fortran77 wrote: | There are many custom keyboard companies who will put anything | you want on a keyboard. It shouldn't be a problem to get APL | | I've had keyboards made by "WASD" with Yiddish keycaps (which | are slightly different from Hebrew -- there's a double-vov, | double-yud, kometz aleph -- here's an online version if you're | curious https://keymanweb.com/#ydd-hebr,Keyboard_yiddish_pasekh | ) Just upload your graphics and they'll make it. | tosh wrote: | It looks like Dyalog are selling keyboards | | > A different keyboard is not required to enter Dyalog glyphs. | However, if you would like one, Black Cherry G80-3000 keyboards | with Dyalog glyphs engraved are available in UK, US, DE and DK | layouts. USB and PS2 adapters are included. The keyboards have | been tested using both Microsoft Windows and Linux | | https://www.dyalog.com/apl-font-keyboard.htm | | I wonder if there are keyboard sticker sets available | somewhere. I think I've seen some in the past for video editing | software. | papito wrote: | Topical! One of the most recent Corecursive episodes has a guest | with a fascinating take on APL, while the episode is completely | unrelated. | | https://corecursive.com/065-competitive-coding-with-conor-ho... | | Get yo actuary tables on. | agbell wrote: | Thanks for sharing! | | A question I had with APL was how do you actually type it in, | and it turns out you just use a back-tick as a prefix, like a | leader key in vim. Conor walked my through solving something | with TryAPL in this video: | | https://www.youtube.com/watch?v=lG-CcPb7ggU | Avshalom wrote: | You can also set it as an altlayout on your keyboard. I'm on | linux so I set it to holding Winkey switches to APL. | BiteCode_dev wrote: | I suppose if arrays language get popular enough, we will get a | module to use them as a DSL for libs like numpy, just like we | have regex for strings, instead of a whole language dedicated for | them. | | It would be a win / win, you gain the strength of J, K and APL | for array processing, without the weakness of them for anything | else. | | And just like with regex, you'll get fat disclaimers in doc | telling you to not get carried away too much as it can quickly | become unreadable. | gugagore wrote: | The regex DSL only works for strings. I lament that I cannot | use something regex-like to match general sequences, e.g. a | sequence of tokens, instead of only strings (sequence of | characters). | | The operations could be the same. There are classes, and | operators for matching 0, 1, or more repetitions, etc. | | Array languages are powerful especially when you have arrays | with arbitrary elements, including arrays themselves. Good luck | using a regex DSL to match a sequence of strings, where you | might want to define a string class (analogous to a character | class) as a regex itself. | mumblemumble wrote: | > I lament that I cannot use something regex-like to match | general sequences, e.g. a sequence of tokens | | You can. It's not typically built into a programming | language's standard library. But there are plenty of general- | purpose automata-building libraries out there, and some of | them do provide DSLs. At least to the extent that the regular | expressions you're using are actually regular (many aren't), | all a regex is is a domain-specific specialization of | nondeterministic finite automata. | | I sometimes lament that I don't see them, or hand-coded | automata, more often. This was CS101-level stuff when I was | in college, and it's pretty easy to code your own even if you | don't have a good library available in your language. And, | for problems where they're appropriate, using them typically | yields a result that's simpler and easier to maintain than | whatever ad-hoc alternative you might see instead. | hcarvalhoalves wrote: | There are a few, here's one: | https://clojure.org/guides/spec#_sequences | bmn__ wrote: | > using a regex DSL to match a sequence of strings, where you | might want to define a string class (analogous to a character | class) as a regex itself. | | http://p3rl.org/retut#Defining-named-patterns | | https://docs.raku.org/language/grammar_tutorial#The_technica. | .. | | If you want a demo, reply with a concrete example I can | implement. | jasonwatkinspdx wrote: | The now defunct Viewpoints Research org chased an idea | similar to this. It was a meta language that was based around | PEGs, intended to allow the easy creation of DSLs. I imagine | the papers are still up somewhere. It was called OMeta. | robomartin wrote: | APL is not unreadable any more than mathematical or musical | notation are. Sure, to someone who doesn't know the notation it | looks like an incomprehensible mess. So does math, music, | greek, chinese, arabic, hebrew, etc. | | I used APL professionally every day for ten years. I can read | it. I can touch-type it. And I don't need a specially-labelled | keyboard (even thirty years later). | | This should not be surprising at all. A pianist does not need | labeled keys and people familiar enough with the above-listed | spoken languages can touch-type them without much effort. | | While, sadly, APL has no practical application in modern | software engineering (it stagnated and became irrelevant and | impractical) it is wrong to look at the brilliant use of | notation as a tool for the concise communication and expression | of ideas and list it as a negative. Not being able to speak, | read or write Chinese does not make it a bad language. | 0xdeadbeefbabe wrote: | > Not being able to speak, read or write Chinese does not | make it a bad language. | | Well that's the problem. Not being able to read or write APL | makes it more fun to learn. | O_H_E wrote: | In Julia: https://github.com/shashi/APL.jl | snicker7 wrote: | What an incredibly concise, elegant implementation. | bluenose69 wrote: | Thanks for posting this intriguing link. A glance at the | Jupyter notebook on this site will bring a smile to a Julia | user who grew up on (or has somehow encountered) APL. | RyanHamilton wrote: | I've written an open source version of q: | http://www.timestored.com/jq/ It's implemented in java. You | idea is interesting. Allowing q and java intermixed... | combining it inside java like linq and C# would be interesting. | elwell wrote: | Has anyone used APL to implement web frontend? In the GOL example | it shows how to use [?] to reshape into a matrix and then use | | to pad it out, and then the structure is displayed in the | console. I'm imagining some kind of declarative JS+CSS frontend | framework where the APL-ish source code maps intuitively to the | visual representation in the DOM (or canvas). | lokedhs wrote: | I'm taking the opportunity to mention my project that implements | a language that is inspired by, and is mostly compatible with | APL. It has some major differences, such as being lazy evaluated | and providing support for first-class functions. | | It also supports defining syntax extensions which is used by the | standard library to provide imperative syntax, which means you | can mix traditional APL together with your familiar if/else | statements, etc. | | At this point there isn't much documentation, and the | implementation isn't complete, so I'm not actually suggesting | that people run out to try it unless they are really interested | in APL. I just took this opportunity since APL is mentioned so | rarely here. | | https://github.com/lokedhs/array | | There is an example of a graphical mandelbrot implementation in | the demo directory, that may be interesting. | einpoklum wrote: | It's not the same without a decent APL keyboard :-( | | Even for the on-screen keyboard - at least make it have a few | rows, not everything on a single row. Jeez. | zwieback wrote: | In the 90s I installed an optical CMM at an IBM plant and they | had PCs with APL keyboards sitting in the clean room. I was | impressed that they would use something like that in a production | area, not really sure what they did with it but the keyboard | looked very impressive. | | I think without the special keyboard APL is a no-go these days. | TacticalCoder wrote: | > I think without the special keyboard APL is a no-go these | days. | | Unicomp, the company who bought the rights and tools for the | venerable IBM Model M keyboards, do still sell to this day both | IBM Model M keyboards and sets of APL keys (!). | | https://www.pckeyboard.com/page/product/USAPLSET | [deleted] | pradn wrote: | Would APL work as well with the unusual symbols replaced by | keywords? Any with APL experience know? | Jhsto wrote: | > Would APL work as well with the unusual symbols replaced by | keywords? | | Hot take: take a look at numpy. | | In general, I would say no. One of the main points is that the | notation is terse so that the experienced readers can at a | glance see what is going on. Notation as a tool of thought, and | all that. | Avshalom wrote: | not in the way you'd hope. | | due to the way APL is written and it's sort of philosophy of | computation if you tried to be literal about you'd end up with | a bunch of inscrutable nonsense anyways | | consider | https://www.aplwiki.com/wiki/FinnAPL_idiom_library#Inner_Pro... | ([?][?]\[?]' '[?].[?]X)/X would be (reverse or scan | reverse ' ' or prod = X) reduce X | | or that infamous Game of Life one liner | life-{[?]1 [?] [?].[?] 3 4 = +/ +/ 1 0 -1 [?].[?] 1 0 -1 [?]" | [?][?]} life set {disclose 1 X or prod and 3 4 = + reduce | + reduce 1 0 -1 bind prod rotf 1 0 -1 rot each enclose X} | | Still just nonsense right? You'd end up writing very different | code. | skruger wrote: | Try Rob Pike's (yes, that Rob Pike) APL-with-keywords, ivy: | https://pkg.go.dev/robpike.io/ivy?utm_source=godoc | robomartin wrote: | No. The power of notation is significant enough that you would | lose a lot. Someone mentioned J. It's an abomination. Iverson | made a huge mistake taking that path and likely contributed to | APL's trip into becoming a curiosity. I have written about this | before on HN. | | Context: I used APL professionally every day for about ten | years and was quite active in the community at the time. | sswezey wrote: | It what ways is J an abomination? APL (and to a degree J) are | on my bucket list of languages to learn. I'd always read that | J was a sort of spiritual successor to APL. | mlochbaum wrote: | I think my reasons are very different from robomartin's but | I share the opinion that J has some pretty serious flaws. | Some are brought forward from APL, some are not. | | It has no context-free grammar (but neither does APL). | Scoping is local or global: if a variable in a function is | local, even inner functions can't access it. It has | namespaces (locales), but they are not first-class and are | instead referenced by numbers or strings, so they can't be | garbage collected. Until this year, there was no syntax to | defined a function--even though control structures had | dedicated syntax! System functionality has no syntactic | support, so it's provided by passing a numeric code to the | "foreign" operator. To enable recursive tacit functions, | functions are passed by name. Not just as arguments, | anywhere. The name is just a string with no context | information, so if you pass a function to an explicit | modifier and the name means something different in that | scope it will do something different (probably a value | error, fortunately). Oh, also these names store function | ranks, and if you define the function later it won't pick | it up, so even the tacit recursion thing is broken. | | The designers of J weren't familiar with design principles | that are common knowledge outside the APL world, and it | really shows. J was my first programming language (well, | except TI basic) and while I'm still a big fan of array | programming it really held me back from learning these | things as well. | rscho wrote: | He holds a grudge against J, but not everyone does. I write | research code in J and it's a very good little language. | For instance, scripting is much easier in J. (Dyalog) APL | is much more like an APL machine (in the sense of the LISP | machine). | 0xdeadbeefbabe wrote: | I believe he prefers one fancy character to two ugly | characters. | robomartin wrote: | I'll reply to all comments here. | | No, I don't hold a grudge against J. That's preposterous. | Silly, really. These are tools. | | No. I don't prefer one symbol to two characters. That is | also silly. | | You have to understand the HISTORY in order to understand | my statement. | | APL was, at the time, brilliant. Remember that it started | in the 60's. Way ahead of its time. I learned and worked | with it professionally in the 80's and early 90's. | | Ken Iverson, the creator of APL, understood the power of | notation as a tool for thought. In fact, he famously | authored a paper with exactly that title [0]. | | I had the pleasure of being at an APL conference where | Iverson himself presented and discussed this paper. I also | took advantage of tutorials and sessions by Iverson and | many of the early APL luminaries of the time. | | The power of notation might not be easy to understand | without truly internalizing APL or having good command of a | reasonable analog. For example, a classically trained | musician appreciates the value of musical notation. While | not perfect, the alternatives have failed to deliver | equivalent results, power, expression, etc. The day | something else is used to score and perform orchestral | performances we might have something to consider. | | There are other examples of the power of notation and the | paper covers the subject well. | | So, why is it I say J is an abomination? | | History. | | Why does J exist? Why did Iverson go this way after | correctly noting and promoting the idea that notation was a | powerful tool? | | He made a mistake, likely driven by a failed attempt to | improve business outcomes. | | Here's the history part. | | Back in the '80's doing APL characters was not easy. On | mainframe based systems we either had to use specialized | IBM or Tektronix terminals and printers. When the IBM PC | came out we had to physically replace the video card's | character ROM (not sure most people know what this is these | days) in order to get APL characters. | | A common hack was to install a kludgy setup with a toggle | switch so you could switch between APL and standard | characters. The keyboard, for the most part, got stickers | glued to it on the front face of the keycaps. You could, | eventually, buy new keycaps for the IBM PC standard | keyboard. | | Printers suffered a similar fate. You had to reprogram and | hack Epson and other printers in order to be able to print | the characters. | | Incidentally, if you wanted to use a PC for, say, Japanese | and English back then you had to resort to the same kinds | of hacks or buy specialized video cards and software. | | I could go on. The point is that you had to be truly | determined to do APL back then and it was a pain in the | ass. Convincing an employer to hack 500 PC's so you could | migrate to APL was an exercise in futility. Financials and | other industries where the power of APL could be put to | good use took the plunge, nobody else did. I did an APL- | based DNA sequencing tool for a pharmaceutical company back | in the 80's. | | APL wasn't going to go very far beyond academic and corner- | case circles under those conditions. | | That's when Iverson came up with the J concept of | transliterating APL characters to combinations of standard | ASCII characters. It was hard to impossible to sell APL to | the masses given the issues of the time. Iverson thought | the transliteration would open the doors to the wider | audience. Well, it did not. Among other things, notation, | believe it or not, is much more practical and easier to | learn than a seemingly random mish-mash of ASCII | characters. | | From my perspective Iverson suffered from a lack of | conviction based on likely business pressure. The hardware | of the day was conspiring against being able to push APL | out to the masses. He did not have visibility into what was | coming. Shortly after he took the J trip, the IBM PC went | fully graphical and universal multi language (spoken) | characters could be rendered without hardware hacks. Except | that now Iverson, the creator of APL, had his business | interests firmly attached to J. Here we had a situation | where the creator of APL pretty much abandoned the language | he brilliantly developed, taught and promoted for over | twenty years. | | The J enterprise, as a business, deviated his path and | likely seriously damaged APL. And it failed. It absolutely | failed. Nobody who used APL for any non-trivial application | was going to consider J. Not due to some test of purity. | No, it was because the power of notation is such that J | was, in fact, a complete abomination. The only way anyone I | knew would consider it was if by force. I can't think of | any APL-ers of note of the era that truly jumped on the J | bandwagon. The proof that J failed is simple. It's just as | dead as APL. Corner case use, sure. Just like APL. I used | APL professionally for ten years and I would not touch it | at all for any real application today. Anyone doing so | would be crazy to make that choice. The only exception | would be in maintaining or extending an existing system. | Even then, you have to very seriously consider porting it | to a modern language. | | Notation isn't "funny characters". It's a powerful tool of | both expression and thought. If notation is "funny | characters" what do we say about every written human | language with "funny characters" (Chinese, japanese, greek, | arabic, hebrew, etc.). Do we convert every word in Chinese | into ASCII transliterations of the symbols just do it | doesn't look "funny" and to make Chinese more popular? No, | this would be an abomination. Chinese is a rich and | expressive language, complex, yes, of course. And yet the | power of this language, among other things, in the notation | used to put it to paper. | | Imagine converting every "funny character" human language | to a mish-mash of ASCII just because the IBM PC could not | display them in the early days. Imagine then saying that | someone calls these abominations because "he prefers one | fancy character to two ugly characters" or "He holds a | grudge against <language>". The first thing that comes to | mind is "ignorant", followed by "misplaced". Learning about | and understanding history and context is very important. | | Can J be used for useful applications? Of course. So can | COBOL, FORTH and LISP. Yet this does not mean it is a good | idea. And using J to write research code (which I did with | APL in school as well) is nowhere near the realities of | real code in real life at scale and maintainable over time | and hardware evolution. Extending this to mean that | abandoning the power of APL notation due to hardware issues | was a good long-term idea is, in my opinion very wrong. J | has no future. Neither does APL in its current form. I | still think everyone should be exposed to languages like | FORTH, LISP and APL in school. There's a lot of value in | this. | | EDIT: Imagine if Guido had abandoned Python just before it | started to become popular and went in a different | direction. The language would have stagnated and likely | become irrelevant. That's what happened to APL. And J went | nowhere as well. Iverson confused and antagonized the APL | community to go after perceived business opportunities. In | doing so he pretty much destroyed APL and J. | | [0] https://www.eecg.utoronto.ca/~jzhu/csc326/readings/iver | son.p... | 3wayMerger wrote: | Maybe I'm missing the point but could you clarify a bit | more on APL's notation vs J's notation? | | Speaking as someone who is not very well math inclined | and as someone who was born in an Asian country, both | APL's special characters for verbs and J's alphabetical | characters for verbs are similar enough for me. Both | languages use symbols for verbs, it's just that J's | symbols happens to very closely resemble the characters | of the English alphabet. | | Although, due to the familiarity of the English alphabet, | J's symbols might intuitively bring up ideas of the | alphabet character, is it not possible to just think of | it as a new mathematical symbol? For example, instead of | seeing "o." as the alphabet character 'o' followed by a | period, couldn't it be seen as a circle followed by a | dot? Or if we lived in a world where the alphabetical | characters of the English were swapped with the special | characters of APL, would J's notation still be broken? | Does familiarity of the symbols used in a notation make | it any less powerful? | | Maybe the reason why I don't understand is because I | haven't tried APL and only tried J. And I eventually | ended up quitting on learning J because it was starting | to get too difficult for me. Would it be possible to | explain the differences in APL's notation and J's | notation is an easier or simpler fashion? | neolog wrote: | The only explanation I see here for what's wrong with J | is | | > Among other things, notation, believe it or not, is | much more practical and easier to learn than a seemingly | random mish-mash of ASCII characters. | | Is that your main problem with J? | jpf0 wrote: | Congrats on your work with APL. Please do not engage in | flaming on obsolete business concerns from 30 years past, on | a repeated basis. | | J is fine, great, easier license, has a larger and more | powerful set of primatives. | mlochbaum wrote: | It wouldn't work _the same_ , that's for sure. And APL | experience isn't enough to know, because you only see one side | of the comparison! Here are some notes from that side. | | The advantage of using symbols for array operations is the same | as the advantage in math of using them for arithmetic. A symbol | can be read much faster than a word, and it makes syntax | easier, not harder, to discern. This is because you only have | to mentally group symbols into expressions instead of grouping | characters into words and words into expressions. When | programming with keywords you'd probably mitigate this by | writing shorter lines in order to move some of the structure to | a higher level. | | Keywords have the advantage that the ones the user writes | aren't any different than the ones the language provides. This | can be nice, although I find that distinguishing user-defined | words from symbols can also be helpful: those words tend to | give a good summary of what's going on, while the primitives | around them just do all the data-shuffling detail work required | to make it happen. So it's easier to ignore those details and | quickly get the bigger picture. | tazjin wrote: | There's J, which doesn't use the random Unicode things: | https://en.wikipedia.org/wiki/J_(programming_language) | he0001 wrote: | APL is something that has been on my TODO list for a long time. | To me it's tantalizing to express a problem with pure symbols | instead of a mix of it. While APL is cool I've always felt that | coding languages are mostly wrong. Also natural languages also | feels blocky, inefficient and sometimes alien. | jpmattia wrote: | Last used APL in 1981; We had keyboards specialized for the APL | char set. | | IMO Its pithy syntax was just not worth it, even back then, so | haven't returned since and don't see any reason to break my 40 | year hiatus. | beagle3 wrote: | APL's greatest contribution is its semantics, not its syntax. | | (Some parts of the syntax are brilliant and would be awesome if | adopted by modern languages. Others ..... not so much). | throwaway17_17 wrote: | Which pieces of APL would you see fitting in a modern | language? Simply curious about preferences of people who | already enjoy the semantics and would find the APL syntax | ideal. | Wezl wrote: | (not parent) personally I would like to see | [trains](https://aplwiki.com/wiki/Tacit_programming#Trains) | in more languages, though the way they are implemented in | APL is pretty spotty (e.g. the length of a train changes | its semantics) | Syzygies wrote: | In the mid-seventies at Swarthmore College, we were mired in | punched card Fortran programming on a single IBM 1130. The | horror, a machine less powerful than the first Apple II. My job | six hours a week was to reboot after each crash. People waited | hours for their turn to crash the machine. I let a line form once | people had their printouts. I'd find the single pair of brackets | in a ten line listing, and I'd explain how their index was out of | bounds. They thought I was a genius. Late one Saturday night, I | made a misguided visit to the computer center while high, smelled | sweat and fear, and spun to leave. Too late, a woman's voice: | "Dave! I told Professor Pryor he needed you!" We didn't know that | Fred Pryor was the economics graduate student freed in the 1962 | "Bridge of Spies" prisoner exchange. Later he'd learn that I was | his beagle's favorite human, and I'd dog-sit to find steaks for | me I couldn't afford, but for now I feared him. So busted! Then I | heard this voice "See these square brackets? See where you | initialize this index?" He was spectacularly grateful. | | One cannot overstate the rend in the universe that an APL | terminal presented, catapulting me decades into the future. I | quickly dreamed in APL. For $3 an hour for ten hours (a massive | overcharge) I took a professor's 300 line APL program translated | literally from BASIC, and wrote a ten line APL program that was | much faster. One line was classic APL, swapping + and * in an | iterated matrix product for max and min. The other nine lines | were input, output. The professor took years to realize I wasn't | also calling his code, then published my program. | | Summer of 1977 I worked as a commercial APL programmer. Normally | one never hires college students for the summer and expects them | to be productive. The New York-based vice president was taking | the train every day to Philadelphia because the Philly office was | so far underwater, and desperate to try anything to save himself | the commute. He knew Swarthmore had a terminal, and heard about | me. At my interview I made a home-run derby of the questions from | the Philly boss. The VP kept trying to intervene so he could put | me in my place before hiring me. The tough questions were "dead | key problems". How do you write the following program, if the | following keys are broken? | | Our client was a mineral mining company, our task a reporting | system. The reports were 2-dimensional projections of a | 9-dimensional database. The accountants wanted all totals to be | consistent across reports, and to be exactly the sums of their | rounded components. I broke the news to our team that we needed | to start over, rounding the 9-dimensional database once and for | all, before generating each report. This took a few weeks; I | wrote plenty of report generation helper routines. My coworkers | overheard me say on a phone call that I was being paid $5 an | hour, and at the time I didn't understand which way they were | shocked. I didn't have much to do, the rest of the summer. | | The mining company VP found me one morning, to ask for a | different report, a few pages. He sketched it for me. He found me | a few hours later to update his spec. He loved the printout he | saw, imagining it was a prototype. "It's done. I can make your | changes in half an hour." | | At a later meeting he explained his own background in computing, | how it had been key to his corporate rise. Their Fortran shop | would take a month to even begin a project like I had knocked off | in a morning, then weeks to finish it. He pleaded with me to pass | on Harvard grad school and become his protege. | | Some Lisp programmers had similar experiences, back in the day. | Today, APL just sounds like another exotic language. In its | heyday it was radical. | retzkek wrote: | Thanks for sharing, I love these types of stories. Really makes | me pine for the "old" days, and wonder if there's a parallel | universe where technology took a very different route such that | languages like APL, Lisp, and Smalltalk are used instead of | JavaScript, Java, and C#, and what that world looks like. | | > Some Lisp programmers had similar experiences, back in the | day. | | About 20 years ago (so not quite so far back) I was an | engineering intern in an industry (nuclear energy) with two | main tools: heavy number crunching software in Fortran, and | Excel for everything else. The plant I was working at had just | gotten some software for managing and tracking fuel movement | (reactor cores are comprised of several hundred fuel bundles, | which are re-arranged every 1-2 years), and my task was to set | it up and migrate historical data from Excel spreadsheets, | either by entering data manually with the GUI (which wasn't | really that good) or using the primitive built-in import/export | functions (CSV-based probably). Good intern task, right? | | At some point I noticed this odd window running in the | background whenever I started the program: "Gold Hill Common | Lisp". Hm, what's this, it seems to have some kind of command | line... and so I dived down the rabbit hole of the CL REPL and | live image manipulation. I discovered the apropos command (or | maybe GHCL had an actual UI for it?), which let me learn about | all the internal data structures and methods, which I was able | to use to quickly configure the plant specifics and import | data. | | "Oh, you're done already? OK next we need to get these custom | reports out, talk to the vendor about implementing them. And | see if you can now export data into our old report generator" | (another spreadsheet of course). So I dutifully started the | requisition process to get custom reports added, but while that | was working through the system, I was stretching my new-found | Lisp knowledge to not just dump out report data, but add the | functionality to the UI. Coming from a background in C and | Fortran I was fully ingrained with "write, compile, run" being | how things worked. Image how much it blew my mind when I found | out I could call a function in the REPL and actually _add a | menu to the running program_! | | One feature of the software was it could be used for "online" | fuel movement tracking, which was traditionally done on paper, | in duplicate. It's probably still done that way for good | reasons, but still nice to have that electronic tracking. I was | so proud when we were demonstrating it to the reactor | operators, and they asked if we could add some little | functionality (the details escape me), and I was able to say | "yep no problem!" No requisitions, then back-and-forth with the | vendor, eventually getting the feature in a year maybe. Really | wish all software was so powerful (although admittedly my | hijinks were a bit of a QA nightmare, but the software wasn't | considered safety-related since there were many checks and | paper records). | | Fast-forward a couple years, after much coursework in Fortran | and Matlab, I'm about to graduate and am now interviewing with | the vendor. Question comes up "so what would you change about | our software?" "Well, the interface is a bit clunky, I'd | probably want to re-write it in a modern language like C++" | :facepalm:. | | Only years later, re-discovering CL, along with Racket and | Clojure, did it occur to me how much was wrong with that | response, and how sad that the key lesson of that semester | internship had gone over my head. | Syzygies wrote: | I love Lisp and Scheme too. Though like sex at 19, nothing | has ever felt quite like the first months with APL. | | For "production" math research, nothing comes close to | Haskell for me. Every time I consider straying, the ease of | parallelism draws me back. | | I have written a fair bit of Scheme, using my own | preprocessor that avoids most parentheses. I stay clear of | that loaded debate, this is for personal use. The code is | poetic, though not as dense as APL or Haskell. As Bill Joy | once opined, what you can fit on a screen matters. | | My own favorite Haskell code is a very terse implementation | of monadic parsing. Typed trees are not far off from strings, | and then one has algebraic data types as parsing. (Pattern | matching is parsing a bit at a time, without reifying the | activity for program control.) | | APL gets unexpected mileage from a core of array handling. I | dream of a Lisp-like language tuned to parse algebraic data | types as its core activity, with macros as its "middle of the | plate" pitch rather than as a strapped-on afterthought. (I'm | not trolling here, this is my honest opinion. In 10,000 runs | of the simulation, I doubt Lisp macros would be this clumsy | in most runs.) | | Ultimately we all long for better language tools to express | pattern as code. My electric guitar never sounded like what's | in my head, and for code I'm still reaching too. Though APL | was wonderful in its day. | FullyFunctional wrote: | Playing with J (~ APL) certainly feels magical (though I | can never remember the syntax a day later) and APL like | Lisp gets a lot of leverage from a powerful vocabulary on a | rich data structure (arrays and lists respectively). | However the "One Great Datastructure" flattens the domain | and doesn't self-document, nor constrain you from | unintended uses, the way a rich type system does, so I find | reading and maintaining Lisp (and I assume the same applies | to APL) to be frustrating and tedious. | | Writing this, I'm reminded how J felt full of "tricks" much | like using Perl: there are these tricks you can use to get | the result you wanted that isn't necessarily the most | faithful expression of the problem. | agumonkey wrote: | So we can expect ecmascript 7 to include some dyadic operators | ? :) | | thanks for this story btw | crooked-v wrote: | If the dang pipeline operator will ever actually get to Stage | 2/3, it should be straightforward to invent a lot of | arbitrary operator-like behavior using composition and | pipelines. | agumonkey wrote: | |> | | this ? | crooked-v wrote: | Yeah. With that, you can easily do a lot of quasi- | operator functionality with things like: | 3 |> add(5) |> mult(7) | | Not as good as "real" custom operators, but it still | fills a lot of gaps. | GordonS wrote: | Also just wanted to say thanks for sharing! | | I grew up with PCs and a Commodore 64 in the 80's, which I | think was the golden era of personal computing, but I | absolutely love stories from earlier! | Syzygies wrote: | My grandfather had to drop out of high school, after his dad | died from an infection. He unloaded trains for the A&P | grocery chain, and proposed that they reorder shipments to | save money. He retired in charge of half of New England. His | computer center was a bank of women at fancy adding machines. | | Fresh out of college, my father helped a senior programmer at | Kodak automate testing for their film developing chemical | baths. This replaced dozens of people. Kodak found them other | positions, and moved my dad to the research labs. He used | computers from the beginning, and told me many stories. On a | family night in the 1960's I got to play the original "space | wars". | | In 1974 he came up with the color sensor pattern now used in | nearly all digital cameras. | jasonwatkinspdx wrote: | Years ago I talked to an older APL pro, that got lucky enough | to work on a project where he wrote APL interactively on a | Cray. I can't remember most of the details, but holy cow, that | must have been like being handed a fighter jet in the biplane | era. | drno123 wrote: | This, sir, is why I read HN comments. Thank you. | rattray wrote: | Very fun story, thank you for sharing! Small question of | clarification: | | > I took a professor's 300 line APL program translated | literally from BASIC, and wrote a ten line program that was | much faster. | | The professor translated BASIC->APL, and you translated | APL->more concise APL? | Syzygies wrote: | Yes [fixed]. And in an interpreted language, moving the work | to a single operation was a big win. | pattisapu wrote: | This post is almost Pynchonesque! Great story and thanks for | sharing! | armonge wrote: | I can't be the only who though Alexa Presentation Language ___________________________________________________________________ (page generated 2021-06-10 23:01 UTC)