3 ms·
I recently did a project using Dyalog APL. I really wanted to love it. On the pro side, the community was great and I loved the language, but only to a point.
by bwanab 4y ago
I recently did a project using Dyalog APL. I really wanted to love it.
On the pro side, the community was great and I loved the language, but only to a point. There are way too many instances of utter astonishment at behaviors that seemed to be just how the language works. I had a lot of trouble finding good, mature libraries for things I’ve taken for granted in other languages.
I’ve found that Julia provides 98% of the Array Programming value in a modern “batteries included” package.
- xelxebar 4y agoThis reminds me of what a BASIC programmer friend of mine said about C when he first tried it. After many (mostly senseless) debates, I eventually convinced him to try C after showing some bodged-together flashy graphics demo. He got me to teach him basic C syntax and then took off on his own, writing a game. After a few weeks of hacking, he presented me with a decent Asteroids clone, "I don't see the point of C." The funny thing is, when I looked at his main.c file, the entire code was written inside the main function, with copious use of gotos. He had essentially tried to speak BASIC using C. APL isn't an Algol-like, and you're probably going to have a bad time writing APL trying to use the cognitive tools and intuitions you have as a programmer of Algol-like or even functional languages. This includes the tendency to reach for libraries, when you can, for example, implement an entire U-Net CNN in 30 lines of APL and be competitive with PyTorch performance. In my (budding) experience, to "get" APL you have to laser-focus on writing beautiful, concise code from the onset. It feels painful as a student to spend weeks writing and re-writing just to produce 2 lines of code, but in the end those 2 lines will be doing the work of 20 lines of Julia, or 200 lines of C, and feel like a pure, direct mathematical expression of the algorithm you intend.
- throwaway17_17 4y agoI think this is the first comment I’ve seen that describes my general approach to learning and designing programming languages. The only other topics such statements are likely to be made are concerning Lisp (and it `mind expanding` properties). I really wish more people would focus on using/making languages that cater to a strict niche but compile to a sensible and readable common root language/IR.
- phantomics 4y agoAs an array language developer I may be a bit heretical in the community for my view that array languages are a domain-specific tool, not a general-purpose tool. They are the best by far in their niche of working with arrays, but they can be harder to fit to some other kinds of tasks, especially when it comes to more semantic programming. That's why my APL compiler, April (https://github.com/phantomics/april https://github.com/phantomics/april), can be called within Common Lisp with CL data structures as its input and output. It's also trivial to port functions from CL and its libraries into an April workspace. You can see an example on page 2 of this paper: https://zenodo.org/record/6381963 https://zenodo.org/record/6381963 In this way April puts the entire CL ecosystem at your fingertips. If you want to do something like making HTTP requests or ingesting XML files, you can write a function to do it and express the specific parameters for your use case in CL, and then have the function available within April using a simple monadic/dyadic argument API. This can sidestep the need to port every necessary library into APL itself.
- no-s 4y ago> my APL compiler, April Oh, I have to try this! APL is in the family tradition, I literally learned it from my mom. Probably the first programming language I sincerely enjoyed! I sure do miss the glyphs. Mom uses R now and often notes some things used to be easier with APL…