I've been live-coding my Lua-based markup language luaML using a driver program. Now I've pulled luaML into the driver program so that I can open multiple buffers, move them around, zoom in, zoom out, etc.
(And yes, you can live-program the driver. Not quite using itself, but by copying it into a "meta driver" and making a handful of edits.)
The world is cranking through AoC and zooming toward a ChatGPT future, and I'm still here thinking about the right way to visualize past versions in a live-programming environment.
And my note-taking app. One thing I did recently: a move command that moves columns (analogous to browser tabs) to the left, while continually truncating columns on the right beyond some limit. The combination of these two has changed how I work, from messes all over the surface to much more localized access patterns where I live near the top left and move things over to it as I need them. (It's not a catastrophe if I lose a tab because on-disk search is working well.)
“In general, the higher level your graphics API, the harder it is to get horizontal and vertical lines to draw on the physical pixels. At the frame buffer level it is trivial. Cocoa and UIKit it is possible with some effort. SwiftUI it is impossible. HTML is hopeless.
“When printing meant writing some Postscript it was a little work, but doable. Getting it onto a printer through a modern printer API is essentially impossible.”
"Next call. Hi, welcome to Joys of Science! Please state your name and question."
"Hi, Creator here. Loved your previous episode, Beautiful Equations of Reality. Glad you like my game.
"I actually started out using lots of different equations. Regimes for small scales, large scales, Seattle, Wednesdays. But there were too many interactions and bugs. So we switched to a single set of equations. It's a little inefficient but reliable. Now all I do is say no to feature requests."
A constant trickle of disk reads replaces an unbounded amount of stuff hanging around in memory.
This is a data-oriented solution in the footsteps of Mike Acton. I'm not removing fields from structs or switching to SoAs, but I am trying now to manage my caches.
GC is missold as "automatic memory management". All memory management is manual (you have to be careful about nulling references out); GC just simplifies freeing memory.