frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

In Praise of APL (1977)

https://www.jsoftware.com/papers/perlis77.htm
18•tosh•2h ago

Comments

kholis_ab•1h ago
i love APL, but never ever tried it ... only watched videos of code_report
abrudz•1h ago
I'll be happy to give you a live personalised intro in https://apl.chat or head over to https://challenge.dyalog.com/ for an automated guided introduction (with a chance of winning a prize).
jodrellblank•1h ago
https://tryapl.org/
ofalkaed•1h ago
https://xpqz.github.io/learnapl/intro.html is a good place to start learning.
singularity2001•1h ago
Should be the ultimate final incomprehensible programming language for code agents
ofalkaed•1h ago
ChatGPT is pretty good at correcting my mistakes. Give it a snippet of not quite working code with no explanation and it almost always correctly identifies what I am trying to do and explains where I went wrong. Its corrected code almost never works but its explanation of why my code failed gets me my answer and that is what I really want. A year ago it could not help me in the slightest, it has improved quite a bit. The biggest issue with AI and APL seems to be that it does not quite understand the differences between the various versions of APL and seems to view APL2, Dyalog and GnuAPL as all the same language.

Edit: It probably would be useless to someone at all competent in APL and whose problems are more complex than their own failings.

adrian_b•1h ago
True. Due to its lack of verbosity, APL is not at all forgiving for any substitution or transposition in its symbols, which can cause great differences in program output, so it is quite improbable for LLMs to generate a working program, unless it is identical with one from its training set.

What I have said matches exactly what another poster said about his experience in using a LLM with APL: "Its corrected code almost never works".

The LLM recognizes the problem that must be solved by the code, but it fails to generate the right APL symbol string.

I doubt that here a coding agent that attempts to verify the generated code by compiling it can help, because the LLM will generate eventually some syntactically-correct symbol string, but which will implement a different function than desired.

Only a complete feedback loop, with a battery of varied tests for the executable program produced by the generated code, which can verify if it really implements the desired functionality, can be used to filter the results for a working program.

APL is greatly superior to almost all programming languages that are popular today, for writing expressions involving arrays (this includes expressions that do not involve arrays in other languages, but which could be made simpler by using arrays in APL).

However, the original APL has defects, due mainly to the fact that it was an incomplete programming language, e.g. when compared to the other contemporaneous IBM language, i.e. PL/I.

What one needs is a programming language with modern program structures, data types and data type definition facilities, but also with an expression syntax matching the power of APL expressions.

The fact that in 2026 most programmers continue tho write "for" loops for handling arrays, instead of using array expressions like it was possible in 1966 in APL, 60 years ago, seems an aberration of history. Even in the 1966 PL/I one could use array expressions, even if only expressions that were much simpler than those of APL.

Using symbols instead of keywords, like in APL, is not cryptic for anyone who uses such a language regularly. It is cryptic for those who have not used them. The English-based keywords are somewhat less cryptic only for English speakers, and even for them they can be misleading before they learn their correct meanings.

skruger•34m ago
Whilst LLMs still perform weakly in APL, the situation is improving at pace, and giving it a “skill” to evaluate code makes a dramatic difference. I gave a conference talk about it recently (video): https://youtu.be/H_wdKeJ8gt4
pavlov•34m ago
> “it is quite improbable for LLMs to generate a working program, unless it is identical with one from its training set”

This is a fascinating result. In some sense it’s like APL is actually the most human programming language, despite being one of the most difficult for ordinarily trained human programmers to pick up.

ofalkaed•24m ago
>it’s like APL is actually the most human programming language

As an incompetent programmer who is far more comfortable with even the most experimental and abstract literature than any of the "easy" programming languages, I agree with this.

Edit: I was going to fix that sentence, but it is a good example of what thinking about programming languages does to my brain. The idea of a context free human language is alien, thinking in such absolute and concrete terms is weirdly abstract.

misja111•50m ago
> The virtues of APL that strike the programmer most sharply are its terseness — complicated acts can be described briefly, its flexibility — there are a large number of ways to state even moderately complicated tasks (the language provides choices that match divergent views of algorithm construction), and its composability

I had an introduction to APL in university and what I absolutely hated was this terseness. I guess when you're a mathematician APL is more natural but to me, as a programmer, I much prefer to have some extra verbosity to make my code more (human-)readable.

adrian_b•29m ago
Terseness is easier to remove from a programming language than verbosity.

You can use a source preprocessor to enable you to write APL programs by using keywords instead of any symbols that you do not like. You can also use a source preprocessor to expand any traditional APL source, by converting symbols into keywords, so that it will be easier to read for you.

Using symbols instead of keywords is a minor feature of APL, which was inherited from the standard mathematical notation, from which APL was derived.

The important features of APL are the expression syntax and the set of available operators, not the symbols used for them.

Moreover, if you have difficulties in following complicated expressions, you can always break them in smaller subexpressions.

When someone presents an "incomprehensible" APL program, they show a huge expresion without comments.

A decent APL program, like in any other programming language, would need good comments, but here comments are frequently desirable at the level of subexpressions.

misja111•22m ago
> A decent APL program, like in any other programming language, would need good comments, but here comments are frequently desirable at the level of subexpressions.

I guess that might be true for APL, for other programming languages that's not true at all. The ideal program is clear enough to be self explanatory. Of course there might be some implementation choices that need a comment. Or in some cases the problem is so difficult that this is not possible.

But readability should be the goal and most of the time this is feasible without comments. E.g. by using descriptive variable and function names. And by breaking up your program into logical and cohesive parts, using functions, objects, modules or whatever construct your language is offering.

creata•16m ago
> The ideal program is clear enough to be self explanatory.

That depends on what you're doing and who you expect to be reading your code, doesn't it? Sometimes what the human needs and what the computer/runtime needs are too far apart.

misja111•14m ago
@creata:

yes I agree. In case of APL, if your readers are mathematicians, I guess it could well be the language of choice.

And yes like I already said, self explanatory code is not always possible but more often than not it is. It just takes a little extra care and thought.

adrian_b•7m ago
What you say about readability is right, but it is something completely orthogonal to the syntax of APL expressions. All those things can be done in any language that uses the APL expression syntax.

For someone who knows the APL symbols, what an APL expression does is self-explanatory. Someone who does not like symbols can replace them with keywords, that does not change the APL syntax.

The only problem is that you can write a very complex APL expression, which may be equivalent with a page of text in other programming languages. In such cases it is still easy to see what the expression does, but its purpose may be completely obscure, e.g. because you are unfamiliar with the algorithm implemented there, so you need comments explaining why those operations are done.

In many cases you can do like you suggest, you can split a very big expression in many subexpressions and store intermediate results in temporary variables to which you give names that are suggestive for their purpose, instead of adding comments.

However, I see this solution as inferior to just providing short comments for the subexpressions, which give you the same information as the intermediate variable names, but without forcing the compiler to choose an expression evaluation strategy that may be suboptimal.

Show HN: Sweep, Open-weights 1.5B model for next-edit autocomplete

https://huggingface.co/sweepai/sweep-next-edit-1.5B
315•williamzeng0•11h ago•54 comments

App Subscription is now my Weekend Project

https://rselbach.com/your-sub-is-now-my-weekend-project
37•robteix•3d ago•27 comments

Doctors in Brazil using tilapia fish skin to treat burn victims

https://www.pbs.org/newshour/health/brazilian-city-uses-tilapia-fish-skin-treat-burn-victims
115•kaycebasques•5h ago•51 comments

We will ban you and ridicule you in public if you waste our time on crap reports

https://curl.se/.well-known/security.txt
23•latexr•20m ago•7 comments

In Praise of APL (1977)

https://www.jsoftware.com/papers/perlis77.htm
19•tosh•2h ago•16 comments

Hands-On Introduction to Unikernels

https://labs.iximiuz.com/tutorials/unikernels-intro-93976514
58•valyala•5d ago•15 comments

Threat actors expand abuse of Microsoft Visual Studio Code

https://www.jamf.com/blog/threat-actors-expand-abuse-of-visual-studio-code/
179•vinnyglennon•10h ago•141 comments

Your brain on ChatGPT: Accumulation of cognitive debt when using an AI assistant

https://www.media.mit.edu/publications/your-brain-on-chatgpt/
230•misswaterfairy•12h ago•154 comments

Caliper: Right-size your CI runners

https://www.attune.inc/blog/caliper
3•greenRust•5d ago•0 comments

From stealth blackout to whitelisting: Inside the Iranian shutdown

https://www.kentik.com/blog/from-stealth-blackout-to-whitelisting-inside-the-iranian-shutdown/
120•oavioklein•11h ago•85 comments

Gathering Linux Syscall Numbers in a C Table

https://t-cadet.github.io/programming-wisdom/#2026-01-17-gathering-linux-syscall-numbers
45•phi-system•4d ago•18 comments

Claude's new constitution

https://www.anthropic.com/news/claude-new-constitution
463•meetpateltech•19h ago•491 comments

Show HN: ChartGPU – WebGPU-powered charting library (1M points at 60fps)

https://github.com/ChartGPU/ChartGPU
599•huntergemmer•20h ago•171 comments

eBay explicitly bans AI "buy for me" agents in user agreement update

https://www.valueaddedresource.net/ebay-bans-ai-agents-updates-arbitration-user-agreement-feb-2026/
147•bdcravens•14h ago•154 comments

Waiting for dawn in search: Search index, Google rulings and impact on Kagi

https://blog.kagi.com/waiting-dawn-search
333•josephwegner•17h ago•187 comments

Skip is now free and open source

https://skip.dev/blog/skip-is-free/
412•dayanruben•19h ago•188 comments

Binary fuse filters: Fast and smaller than xor filters (2022)

https://arxiv.org/abs/2201.01174
105•redbell•4d ago•8 comments

Lix – universal version control system for binary files

https://lix.dev/blog/introducing-lix/
71•onecommit•11h ago•29 comments

SpaceX lowering orbits of 4,400 Starlink satellites for safety's sake

https://www.space.com/space-exploration/satellites/spacex-lowering-orbits-of-4-400-starlink-satel...
31•thread_id•2h ago•27 comments

TrustTunnel: AdGuard VPN protocol goes open-source

https://adguard-vpn.com/en/blog/adguard-vpn-protocol-goes-open-source-meet-trusttunnel.html
144•kumrayu•17h ago•47 comments

JPEG XL Test Page

https://tildeweb.nl/~michiel/jxl/
202•roywashere•18h ago•131 comments

Show HN: Rails UI

https://railsui.com/
173•justalever•16h ago•90 comments

Significant US farm losses persist, despite federal assistance

https://www.fb.org/market-intel/significant-farm-losses-persist-despite-federal-assistance
175•toomuchtodo•9h ago•189 comments

Letting Claude play text adventures

https://borretti.me/article/letting-claude-play-text-adventures
121•varjag•5d ago•51 comments

The WebRacket language is a subset of Racket that compiles to WebAssembly

https://github.com/soegaard/webracket
129•mfru•4d ago•28 comments

Show HN: RatatuiRuby wraps Rust Ratatui as a RubyGem – TUIs with the joy of Ruby

https://www.ratatui-ruby.dev/
132•Kerrick•4d ago•22 comments

Can you slim macOS down?

https://eclecticlight.co/2026/01/21/can-you-slim-macos-down/
223•ingve•1d ago•283 comments

Beowulf's opening "What" is no interjection (2013)

https://www.poetryfoundation.org/poetry-news/69208/new-research-opening-line-of-beowulf-is-not-wh...
83•gsf_emergency_6•3d ago•65 comments

Jerry (YC S17) Is Hiring

https://www.ycombinator.com/companies/jerry-inc/jobs/QaoK3rw-software-engineer-core-automation-ma...
1•linaz•13h ago

Show HN: Differentiable Quantum Chemistry

https://github.com/lowdanie/hartree-fock-solver
41•lowdanie•4d ago•7 comments