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.