Philip Wadler wrote "Linear Types Can Change the World!" while he was working on Haskell back in 1990. I vaguely remember there were some mentions of possibly adding it a year or two before Rust was publicly announced, but it seemed like it was going to be far off at the time. I wouldn't be surprised if Rust contributed to a lot of the interest in it - Simon Peyton Jones did specifically say that he had "Rust Envy" for shipping something similar to linear types in one of his talks.
Linear Types can Change the World!: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.31.5...
Affine types in Rust are anything with move semantics; for example you can create a method that consumes itself like this:
impl A {
fn use(&mut self) {
// takes a mutable reference to self, so it
// can be used again later
}
fn consume(self) {
// moves self into this function, which means
// it cannot be used again
}
}Obviously it's not part of the type system itself, but doesn't the must_use attr get pretty close?