6 ms·
In Praise of APL: A Language for Lyrical Programming (1977)
- ColanR 8y agoI can imagine that a fork of GNU APL, re-written in FORTRAN with multi-threaded and maybe distributed computing support, would be an amazing mathematical tool. Something that's super fast and scales really well, and makes mathematical operations really easy.
- patrickg_zill 8y agoGnu APL has multi core support for certain computations and you can fork APL child processes and interact with them. So not quite multi threaded but still very useful for heavy duty work where you want to have a great deal of concurrency.
- ColanR 8y agoYes! I'm imagining a value proposition where APL is as fast as C or Fortran, on distributed systems, because at that point it would probably evaporate most of Matlab, Mathematica, and probably TensorFlow's users. Can you imagine? APL is an amazingly powerful language. It's easy to write nearly any mathematical function in it. What if it was faster than every other mathematical language? It would probably dominate the market overnight.
- bladecatcher 8y agoAs mruts pointed out above, kdb+/q provides what you're imagining - it provides fantastic distributed computing support via its IPC protocol and also has multi-core support.
- ColanR 8y agoMulti-core is priced for big financial institutions, though. Only thing you or I could afford is the 32 bit single-core.
- bladecatcher 8y agoYou can start the 32 bit instance with the -s switch (for q to be started with multiple slaves) for parallel execution of a function over data using the "peach" command [0]. But yes, I do agree that the 32 bit instances have limited use, as they can't be used in for-profit projects. [0] https://code.kx.com/wiki/Reference/peach https://code.kx.com/wiki/Reference/peach
- pinewurst 8y agoThere is a free 64-bit version available with limits that don't seem harsh at all: The 64-bit kdb+ On-Demand Personal Edition is free for personal, non-commercial use. Currently it may be used on up to 2 computers, and up to a maximum of 16 cores per computer, but is not licensed for use on any cloud – only personal computers. It requires an always-on internet connection to operate, and a license key file, obtainable from ondemand.kx.com
- patrickg_zill 8y agoIs the pricing published? I haven't been able to find it on the website.
- mruts 8y agoIt’s definitely one of those “if you have to ask, you don’t need it” kind of things
- vmchale 8y agoSupposedly numpy was inspired in part by J. I don't think it will ever dominate the market - some things such as FFI remain weak points compared to C. Plus a lot of what makes Mathematica good is that they have specific algorithms that they've optimized quite a bit, for things like computer algebra &c.
- arcfide 8y agoYou mean Dyalog APL? It already regularly outperforms normal, handwritten C code. It also has support for distributed computing, multi-threading, and the Co-dfns compiler can be used to compile your APL code to the GPU. For example, consider the following talk, which discusses sub-nanosecond lookups/search using the Dyalog APL interpreter. https://dyalog.tv/Dyalog18/?v=paxIkKBzqBU https://dyalog.tv/Dyalog18/?v=paxIkKBzqBU
- mruts 8y agoI think KDB might be what you’re looking for. It’s very efficient and widely used in finance. It’s pretty expensive, but I believe you can use it for personal use for free (there might be a single core restriction I think). As an aside, KDB devs make bank, like salaries >500k
- pmoriarty 8y agoThere seem to be a couple of free versions, a 64-bit and a 32-bit version, with the latter being less restricted than the former.[1] I was curious about it, but they really don't make it easy to get started. There are no links to any documentation anywhere on their site. The download is hidden behind a licensing agreement and a form asking for the user's personal information. They mention GitHub (in the context of "community support") on their download page, but there are no links to any GitHub repos. [1] - https://kx.com/connect-with-us/download/ https://kx.com/connect-with-us/download/
- bladecatcher 8y agohttps://code.kx.com/q/ https://code.kx.com/q/ has learning material and documentation . Hope it helps
- nyankosensei 8y agoI highly recommend the “Q for Mortals” book as an excellent introduction to using K and it’s available online: https://code.kx.com/q4m3/ https://code.kx.com/q4m3/
- chc4 8y agoI've always been curious how people get into this. I've been interested in KDB ever since I read http://archive.vector.org.uk/art10501320 http://archive.vector.org.uk/art10501320, but it's not exactly a language they teach in college or you'd pick up in independent study. Do people just apply to fintech places with relevant experience and then get training for kdb?
- bladecatcher 8y ago
- snapster 8y agosomewhat related: https://github.com/Co-dfns/Co-dfns https://github.com/Co-dfns/Co-dfns
- drsopp 8y ago> First appeared in SIAM News, 1977-06.
- dang 8y agoThanks for pointing that out! Year fixed above.
- tumba 8y ago> I am firmly convinced that APL and LISP are related to each other along an important axis of language design and that acquiring simultaneous expertise in both languages is possible and desirable for the beginning student. Were they unified, the set of tasks that succumb to terse, flexible and expressive descriptions will enlarge enormously without overly increasing the intellectual burden on the student over his initial 16 week contact period. In the context of setting the objectives for education in computer science for general students, I like the idea that the objectives are to (a) understand the limits and potential of computation and (b) achieve fluency in programming such that one can conceive of and describe computational processes for a wide range of tasks. He explicitly suggests that fluency in using other people’s programs not be an objective. Perhaps this is a bit idealistic since most programming in the wild today consists of glueing together other people’s programs. But it seems like the right objective when possible—-in some ways it is a view of computer science as a liberal art.
- pmoriarty 8y agoThere's another link between Lisp and APL in the article: "Some years back, we had a visit at Carnegie from a person at MIT whose name I've forgotten. He started to give us a lecture in a little office about some programming issues in LISP. He went up to the blackboard and he spoke LISP. Everything he wanted to describe, he described in terms of parentheses and CONS and CARS and CDRS. He found himself quite capable of expressing his ideas in the language in which he programmed. Not once during the half hour or so that he lectured to us did I see the inevitable block diagram, the flow charts that show up on the blackboard with things written in semi-English. He didn't need them. And at the time I said to myself, "LISP has a very precious character, if indeed there are some people who can express programming ideas to other people in the language in which they program. "I can't do that with ALGOL; never have I been able to do it with ALGOL. Whenever I've programmed in ALGOL and I've wished to make some statements about the program I was writing, I was forced to go outside the language and use English, or mathematics, or some block diagrams or what-not. "In APL, I find that to a far greater degree than any other language that I've used, I can make statements about the programs that I'm writing, in APL -- actually not exactly APL, but APL with some nice little extensions that I dream up at the moment but would never think of implementing. But by and large, I find that the language allows me to express myself, in the language, about the things I'm dealing with. I find that a very precious property of a programming language."
- bladecatcher 8y agoRelated article posted on HN recently: APL is more French than English [https://news.ycombinator.com/item?id=18640451 https://news.ycombinator.com/item?id=18640451]
- pmoriarty 8y agoNot only is that article related, it's the same article.
- tumba 8y ago> But at that time APL was not running on any computer; and he stoutly insisted that it was unnecessary that it ever run on a computer. It was for him a notation with which he could express algorithmic concepts; and for him at that time, that seemed sufficient. Indeed. Because both APL and Lisp began as languages for describing computational ideas, it stands to reason that they would be particularly fit relative to languages that evolved under other fitness criteria. I was intrigued to not the opposition to APL mentioned in the article by Djikstra and others on the basis of a different mental model of computation.
- aasasd 8y agoNow that I feel the bite from my sedentary lifestyle on my bum, I'm more and more attracted by the idea of a language taking 1/10th the typing compared to what's typical today. However, afaict languages following APL's suit specialize in math, so I wonder if the approach could be adapted to more general kind of coding. Even though the set of short symbols has to be limited, don't we currently have a few dozen often-repeated operations in language keywords and standard libraries? (Especially in the approach of e.g. Clojure, relying heavily on combining standard transformations on strictures.)
- Avshalom 8y agoAPL is actually kind of bad at math, or well the kind of math people tend to think of when they talk about matlab or Fortran being good at math. What APL does well is filter/select/transform more spreadsheet style work than linear algebra stuff. It's a language to describe computation as meant by the sort of computer scientists that were born when computer was a job description.
- avmich 8y agoAPL has map embedded into language. And reduce is an operator in J. APL is conveniently used by those who don't describe themselves as programmers - let alone as computer scientists - but need to get the job done. In this aspect it's similar to Excel, I think. I wonder if APL is that much different from Matlab by the concept.
- 4thaccount 8y agoSyntactically, Matlab is closer to traditional languages. Where it excels at math is that you can do all sorts of things like solving matrices automatically. APL can invert small matrices, but can't automatically find the best way to solve it like Matlab will do. APL has great mathematical notation, but is missing the math libraries you typically need to do real math work (optimization solvers) which Matlab has via toolboxes and Mathematica has builtin.
- vmchale 8y ago
- praeconium 8y agoAPL's are a special beast. A very interesting article that got me hooked "Ruins of forgotten empires: APL languages" https://scottlocklin.wordpress.com/2013/07/28/ruins-of-forgotten-empires-apl-languages/ https://scottlocklin.wordpress.com/2013/07/28/ruins-of-forgo...
- deleted 8y ago[deleted]
- molteanu 8y agoNice one, thanks so much!
- rbanffy 8y agoIn college, we had a class about high-level languages and the teacher decided to go with APL. Many of my colleagues complained they'd never use APL professionally and that some other language, with more ready practical use (we already had FORTRAN and everyone was fluent in BASIC) would be a better choice. They were right, of course, in that they'd never use APL professionally. They were stupendously wrong in that it was a profoundly enlightening experience. Once you learn APL, you gain a super-compact mathematical notation in which to express computation. You also learn the value of extensive comments and of avoiding being clever - if you try to be clever, you won't understand your program 5 seconds after having written it. And, if you are really lucky, you'd have learned what a beam-spring keyboard feels like. :-)
- ghotli 8y ago"Above all, remember what we must provide is a pou sto to last the student for 40 years, not a handbook for tomorrow’s employment." At least around here, this strikes a nerve. Especially 40 years later. All of the colleges in town prep for the local market of tech rather than the fundamentals that may be advantageous overall and potentially financially more so out of market. I know stellar remote and small / mid size shop engineers in this part of the south, but by and large the schools are completely myopic about this and perpetuate the microcosm of low paid enterprise focused sweatshop cubework. I realize to paint it with such language is hyperbole but it's certainly not the exception to the rule.