news
Programming Leftovers
-
Ian Duncan ☛ Stealing from Biologists to Compile Haskell Faster - Ian Duncan
This started when someone mentioned, mostly in passing, that GHC has a flag for ApplicativeDo (-foptimal-applicative-do) that’s switched off by default because the algorithm behind it is too slow to use.
That sounded like a bug to me. An optimization that’s correct but disabled for being slow is the kind of thing you fix in an afternoon, I figured.
It wasn’t; it turned out to be a properly hard problem, and the problem has been eating at me for months.
-
Peter Hofmann ☛ movwin: My (unpublished) TUI framework
Making programs with some sort of GUI (or TUI) has been a bit unsatisfactory for me for a very long time now. Libraries come and go, trends come and go. You constantly have to chase upstream's new decisions and adjust your code. Sometimes you don't agree with upstream's decisions at all and then you have to find a new framework. It's a bit tiring. It's not rare that I keep my projects alive for 5 or 10 years or more, and a lot can change in that time.
So, after last Advent of Code in late December 2025, I decided to start making my own TUI framework. This wasn't an easy decision, because I knew that it was going to be a lot of work. I looked for alternatives but couldn't find any that I liked -- or that were fast enough. Performance really appears to have tanked lately, with some frameworks requiring two seconds just to initialize.
This blog post is nothing but a little tour of the current state of movwin, because I've decided that I won't publish this code for now. The situation isn't too great at the moment: Everything I publish will get sucked up by an "AI" company and then they will sell it, disregarding any licensed attached to the code. I'm not okay with that.
-
Zig ☛ ELF Linker Improvements
Here’s a nice milestone—as of my latest PR, the new ELF linker is capable of building the self-hosted Zig compiler with LLVM and LLD libraries enabled, a task which requires quite a few features under the hood.
-
Artem Novichkov ☛ Task Names in Swift Concurrency
When a crash happens deep inside concurrent code, the first question is always: which task did this? Pthreads had names, Grand Central Dispatch had queue labels — they show up in stack traces, in Instruments lanes, in debugger output. Swift Concurrency had none of that until SE-0469, implemented in Swift 6.2.
-
Andrew Nesbitt ☛ Composer’s dependency policies
The malware list is on by default and, unlike the others, also blocks during composer install from a lockfile. A version that was clean when you locked it and has been flagged since is blocked at install, which is a stronger guarantee than composer audit reporting it after the fact.
-
Algol 68 ☛ The end of an era
The result is the site you are visiting today. Like thirty years ago, I contracted services with a not-too-large, independent hosting company offering good technical support. My homepage starts a new life, though it remains the static site it has always been. Part of the spirit from the time when the [Internet] was young, lives on.
The National Library of the Netherlands will close its XS4ALL web collection once the last homepages go offline. I am pleased however, that the library has decided to continue archiving my new website as part of their general web collection. Hence also that aspect of my site remains as it was.
-
R / R-Script
-
Rlang ☛ [R] How to Position the Legend Inside a Plot in ggplot2
By default, ggplot2 places the legend outside the plot area (usually on the right). However, sometimes you may want to move the legend inside the plot to save space or improve the layout. This post explores how to achieve this using theme() parameters.
-