This month’s issue is a little late (sorry!) because I’ve been slogging through edge cases with Raven’s types. I’m still not quite done – it’s taken longer than I expected, and in the end is surely one of the hardest things I’ve worked on – but it’s all tantalisingly close.
If Raven has any major novelty, it’s in the type system. The goal is ambitious: typical code should require no annotations, yet we’ll always infer precise types (no Anys allowed). That combination means the language can feel light and script-y, yet still have good performance and support separate and ahead-of-time compilation (no need to compile at run-time). This is the foundation of the whole project: without it nothing else matters. And until recently I wasn’t certain it could work.
Making it happen means facing some tricky cases where other languages throw up their hands. Take this example, using Julia syntax: