Programming language implementation work seems to be 10% interesting semantic work and 90% error checking against the possible malformed programs you might encounter.
Related Posts
I'm having fun writing a simple type checker, but I'm learning firsthand why syntax-directed checking doesn't work. It prevents inference.
My checker catches real bugs, but it can't handle cases like this:
[1, 2].map(fun(x) { x + 1; })
I think I need bidirectional checking.
I've added an eval button to the website of my programming language!
It's a been a lot of work to lock down appropriately. It still needs some UI polish but it's so nice to be able to try snippets immediately.
https://www.garden-lang.org/
When writing long-lived programs (daemons etc) in Rust, I find myself asking *where* I should put data.
In a GC'd language it's just "I have a string" but Rust forces me to find somewhere to put it.
You do get a performance benefit for this work though.