Niko Matsakis Curry On 2017 Interview
From OO to Clojure Workshop!
Watch my free workshop to help you learn Clojure faster and shift your paradigm to functional.
Niko Matsakis will be giving a talk at Curry On 2017. His talk is called Rust: Putting Ownership to Use.
PurelyFunctional.tv: How did you get into Functional Programming?
Niko Matsakis: I suppose my first experience was learning Scheme at MIT. But I distinctly recall a TA telling me that I wrote some very "C-like" Scheme, so maybe I didn't take it in as much as I could have. ;) Later on, during my PhD days, I spent many years coding up projects in Ocaml and Scala, and I think that was when I first started to really understand functional programming more deeply.
PF.tv: What is your talk about?
NM: I'm talking about the Rust programming language. Rust is a programming language that kind of lies in the intersection of functional and imperative programming. It offers a lot of functional features, but it also embraces mutation. However, mutation in Rust works quite differently than in traditional imperative languages: in particular, Rust features an ownership system (aka, affine types) that ensure that mutation typically happens only when there is no aliasing. This neatly avoids the most damaging effects of rampant mutation, and also allows us to achieve strong safety guarantees (memory safety, no data races) without a garbage collector or — indeed — any runtime at all. Some of your more academically minded readers may know of Philip Wadler's influential (and memorably titled!) paper, "Linear types can change the world!" I think Rust is trying to take those words to heart.
PF.tv: Who is your talk for?
NM: The talk is aiming at people who have heard of Rust, but may not know much about it. I'll go over the basics of ownership and borrowing as well as trying to show how they interact with other functional language features. I'm still working on the slides, so it's a bit hard to say precisely what I will have time to cover, but I hope to focus on the trait system.
PF.tv: What do you hope people will take away from the talk?
NM: That they should spend some time checking out Rust!
PF.tv: What concepts do you recommend people be familiar with to maximize their experience with the talk?
NM: Familiarity with Haskell type classes would probably be helpful. And, of course, some prior experience with Rust can't hurt!
PF.tv: What resources are available for people who want to study up before the talk?
NM: Well, there are lots of resources for learning Rust available. I typically recommend the following:
The Rust Book, second edition 1, is an excellent way to learn Rust step by step.
into_rust is a collection of screencasts and learning exercises by yours truly. Right now they target Rust primarily.
Finally, O'Reilly offers a free e-book called "Why Rust?" by Jim Blandy 2 which makes for an excellent read.
PF.tv: Where can people follow you online?
NM: I blog at Baby Steps as often as I can.
PF.tv: Are there any projects you'd like people to be aware of? How can people help out?
NM: There are many ways to help out with Rust. The easiest is just to try using it and building projects and libraries in it — then make those libraries available on crates.io (our package repository). A bigger community is always helpful. If you'd like to get more directly involved, the [Contribution Page] on our website has a lot of links. I particularly recommend searching for bugs tagged with E-mentor in our bugs database, which are those that include instructions for fixing them.
PF.tv: Where do you see the state of functional programming in 10 years?
NM: I am not a purist. I expect that we will see a continual blending of techniques between functional and imperative programming that let people take advantage of both techniques, each where it is most appropriate. But I do think that the world is coming to see that functional programming has a lot to offer in a lot more places than it was traditionally believed.
PF.tv: If functional programming were a superhero, what superpower would it have?
NM: "The ability to convert a function over N parameters plus a value into another function with N-1 parameters in a single bound!" I confess I'm a bit at a loss here. ;)