The seminal linearly typed language is Linear Lisp, which is almost incomprehensible, and also a proof-of-concept which doesn't do anything useful. Classic paper here:
http://home.pipeline.com/~hbaker1/LinearLisp.html
The closest thing to a modern language that uses them exclusively (Rust doesn't, by the way) is LinearML, which was an experimental toy, now abandoned. Tutorial here, which may be interesting:
https://github.com/pikatchu/LinearML/wiki/Tutorial
I asked about it on StackOverflow a while back, and it collected a bunch of useful resources, including links to some of the seminal papers:
http://stackoverflow.com/questions/5065861/programming-langu...
(Still looking for a modern pure linear typed language, by the way.)
Also, in my experience, most Rust programs tend to stash stuff in reference-counted boxes whenever calculating lifetime gets complex; which is reasonable enough (C++ does the same thing), but it is basically garbage collection, and I'd like to find an expressive, functional, non-GCd language which doesn't require this.
(Caveat: I've never written ATS, and although I've written in Coq and Idris, every time I look at ATS code it looks like complete gibberish).
To make things worse, I don't think ATS has any inference either, so all of this must be written explicitly. Idris, Agda, Coq, etc. can infer types and values, if they're unambiguous.
For example:
Definition Prime p := forall n m, n * m = p -> n = 1 \/ m = 1.
All of these variables have type nat, which Coq can infer from the use of "*" and "=".