The Importance of Gradual Typing

Gradual type systems, in simplest terms, use local information from literals (10, "cat") and annotations to determine the shape of data as it proceeds through your program. In the simplest case, it can track primitive types: ints, floats, chars, strings, etc.. A level higher, and they understand composite types, usually through an object/subtyping syste

More

Rust, Lifetimes, and Collections

Collections are hard. Using collections safely is even harder. Using collections safely and efficiently is even harder. And let's toss on "and not wanting to burn your computer to the ground while doing it" to the list for good measure. Fundamentally, there has to be a tradeoff here. If you can index into a run-time-sized array with runtime information, you either need to do some kind of bounds check, or you have to accept that someone can read beyond the intended bounds of memory. And this is just for an array. The simplest data structure there is!

More