> - Rust, which successfully applied a lot of lesser-appreciated academic ideas including affine types.
There's some scepticism going round about a model of technological innovation where academics invent an idea and engineers implement it. While I accept that affine types were known to academics, I recall a precursor to them existed in the form of C++ unique pointers. I'm wondering whether the Rust creators reinvented affine types independently, instead of learning of them from the academic literature.
Also, maybe a better question is how beneficial the literature on affine types was to the Rust creators.
Early Rust didn’t have some of the things it had today, but we used to keep a list of papers that Rust either was inspired by or implemented the ideas from on the website, even if it was incomplete.
I also don’t believe that smart pointers in C++ count as affine? Move semantics in C++ work quite differently than in Rust. I could be wrong about that though, but given the whole copy by default thing, I’m not entirely sure that that counts. It might though.
Oh, and in the earliest days, literally Rust’s introduction inside of Mozilla, it was described as “ideas from the past, come to save the future.” Explicitly built on older PLT ideas that hadn’t made it mainstream yet. Rust may feel cutting edge for industry but it’s basically the opposite of avant garde theoretically speaking.
It was 100% research based. Everyone working on the language was familiar with this literature and many of the early contributors were PL Phd people.
There feels like an implicit value judgment here, that the work of "academics" isn't needed because "engineers" figured it out themselves.
> I'm wondering whether the Rust creators reinvented affine types independently, instead of learning of them from the academic literature.
Why would this ever be a good thing? Is it "cool" somehow to be proud of not taking advantage of the hard-won knowledge of other people who actively hoped their work would get used?
- Docker, Borg and Kubernetes: Container isolation, cluster orchestrators.
- Modern browser environments, with high degrees of isolation.
- Fast JavaScript runtimes and specialized JITs.
- WASM.
Would be interesting to know what Rob Pike thinks of all these.
- iOS and Android: Power-efficient mobile systems, wakelocks, etc.
- Docker, Borg and Kubernetes: Container isolation, cluster orchestrators.
- Modern browser environments, with high degrees of isolation.
- Fast JavaScript runtimes and specialized JITs.
- WASM.
- Ruby and metaprogramming, which rose to considerable commercial success and then petered out. But by the standards of 2000, there's some neat language design there.
- Rust, which successfully applied a lot of lesser-appreciated academic ideas including affine types.
- Type systems retrofitted to many dynamic languages, including Typescript. Typescript is really rather remarkable, even though the types are "unsound", in the technical sense.
Some of these trends were already underway in 2000, when Rob Pike was writing. Admittedly, much of the most important implementation work happened in big tech companies, or occasionally startups. Not in academia. But that's largely a question of scale. Even as early as 1990, it was hard for a professor and a few graduate students to directly change the industry. But plenty of the items on the list above do have roots in academic research.
And Rob Pike did get to write Go. He deliberately ignored quite a bit of interesting research to focus on a specific aesthetic vision, which is fine. And a lot of good systems work has been done in Go.