I have a problem with the shiny. It's the whole ADHD/Interictal thing interacting. There are so many things I want to learn and I haven't got the time to learn all of them. Right now, I'm going back to a well I've gone to a number of times and dived deep into interpreters and... other things.

Current Learning Spree:

SICP (Again!)

Last week I made my way up to the end of Chapter 2 of The Structure and Interpretation of Computer Languages. My impression, after finishing Chapter 2, is I now get why Haskell and Lisp are lumped together as "functional languages," but, as a writer, I can say that the theme and premise of both languages is very different. I can start to see just how easy it would be to implement both an Object Oriented language in Lisp, and how easy it would be to implement Hindley-Milner in classical McCarthy Lisp or its derivatives like Racket and CL, and also why it would be a mistake to do so.

The generic interfaces of classical Scheme seem like a lot of typing. The amount of typing that one has to do, as well as the mystery types of classic Lisp's unlabled tuples, are both ergonomic hitches that a postmodern Lisp has to overcome, and I'm not sure how.

Build Systems à la Carte

I also read the first ten pages of Mokhov, Mitchell, and Peyton-Jones' paper Build Systems à la Carte, a lovely little paper about 30 pages long in which the authors try to prove (and do a pretty good job, all things considered) of trying to find the abstraction in build systems. They do a pretty good job, creating a common vocabulary for build systems that not only encompasses classical systems like xmkmf and make and even ninja, but somehow manages to encompass Microsoft Excel as well!

It occurred to me as I was reading it that if "the store" is the unification of the (local) repository and the filesystem, then version control systems are also build systems with narrow task capability: the tasks function's job is to, for a given hash, drive the filesystem to match that hatch. There's an abstraction layer here that's backward looking, rather than MMP-J's forward looking, but I can feel there's a commonality here.

Parsing With First Class Derivatives

I've been ooh-shinied a lot this week. My Rust skills are getting remarkably rusty as I neglect them, but I want to get back into them. The paper Parsing With First Class Derivatives might be just the hook I need. The examples look Ocaml-ish, but I think I can parse them enough to get a Rusty version working, if I'm crazy enough. What attracted me most to the paper was section 3.3, which seems to imply a principled way to tackle Landin's "Offside Rule," which is important for whitespace-delimited languages like Python, YAML, and Coffeescript.

Don't ask why I care. You won't like the answer.