Is This Slop?

No, it’s not slop. I know every interface, every data type, and every algorithm used in the project. Did I write every line of code? No. Did I write every line of documentation? As far as I’m aware.

Many parts of language development are tedious, especially filling out the standard library. Many patterns repeat across data types. LLMs are excellent for filling in those gaps once they’ve been given a template. LLMs are great for refactoring, especially in Rust where you might go from a usize to a &usize (or vice-versa) and need to add or remove dereferencing asterisks *. One major refactoring was breaking up the interpreter from a single lib.rs file to individual lex/parse/compile/runtime/memory files. That kind of work is very nice to hand over to an LLM and isn’t likely to introduce errors.

Website

I used Claude/Codex extensively to make this website. That might make your slop-detector hit a false positive. I initially got Gemini/ChatGPT to generate an image of the website based on hand-written copy and the interpreter repo. I got it to produce many variations based on different styles of websites. In the end I was partial to a blueprint-like aesthetic.

History

I’ve worked on the Shim language on and off for 5 years after I picked up Robert Nystrom’s Crafting Interpreters. I’ve owned this domain for almost that entire period of time. This language was written in Python, then Zig, then Rust, then Zig, then Rust. Zig was abandoned at first since I really wanted RAII. Rust was abandoned since I wanted tighter control over memory. Zig was abandoned a second time since I was really missing Rust-style enums. Rust was adopted a second time, but now leaning much more heavily into unsafe Rust to give low-level control over memory.

If you recoil at unsafe Rust you’re not going to like this project, but that’s how I can get what I want out of the language.