3 ms·
I am very wary of taking too much from (python, js, et al). Referential transparency is of great value, and it is a shame to lose it. As a colleague is fond o
by moonchild 5y ago
I am very wary of taking too much from (python, js, et al). Referential transparency is of great value, and it is a shame to lose it. As a colleague is fond of saying, mutation (et al) is an implementation issue, not a language issue.
Also: python does not scale well. If you pursue python (or its ilk), you will converge on common lisp (or similar), which is, ideologically, diametrically opposed to apl. The conflict should be clear. Conceptual integrity and coherence will be lost at any point in between (this is not to imply that common lisp is a bad thing).
And, by nature, common lisp can subsume apl (see april), but the reverse is not true.
- mlochbaum 5y agoStories please! What did the closures do to you? Hopefully this won't be seen as too combative, but I feel like there are a few people in the array community giving me some pretty strong conclusions that they don't really have the experience to back up (Aaron wrote[0] 17 lines of array compiler, and says the low-abstraction approach he used is the only way to develop sustainably. Cool. I wrote[1] 350 lines of array compiler following his style, and I disagree[2]). At the same time, my experience only goes so far (there's no way I would have invented the array style compiler!), and clearly you arrived at these conclusions somehow. So is there a chance you'd share the observations that led you that way? On my end, I was actually introduced to a little object-oriented programming in J when Henry suggested using it for a simulation project. I used it, but I don't think I really got it—just a weird way to organize data. And then in college I had to learn objects-only Java. Not good. But later I worked some with Node.js, and its module system was pretty nice: no name conflicts, easy to share code! Some way into BQN development, I figured out (with some help from a Common Lisp programmer) a way to add modules with an APL-y syntax, and something magic happened. I got objects[3] too! I think I've done about as much OOP in BQN as anywhere else, and I feel like I understand it a lot better now. So, this is my experience with Lisp-family features and APL. Fits like a glove, programming is easier and more fun. I mix and match array, functional, and object-oriented styles however I want. Did I lose coherence? When I translate my old J code it comes out shorter and cleaner and without exec (".) everywhere. But I still don't get why I should want the language I use to not support mutability rather than just default to immutability. Did I fail to understand something in J when I had the chance? [0] https://github.com/Co-dfns/Co-dfns https://github.com/Co-dfns/Co-dfns [1] https://github.com/mlochbaum/BQN/blob/master/src/c.bqn https://github.com/mlochbaum/BQN/blob/master/src/c.bqn [2] https://mlochbaum.github.io/BQN/implementation/codfns.html https://mlochbaum.github.io/BQN/implementation/codfns.html [3] https://mlochbaum.github.io/BQN/doc/oop.html https://mlochbaum.github.io/BQN/doc/oop.html