I’ve been wanting to poke around with Rust, but I’m waiting for the same
thing I waited on with Go: a 1.0 release. Is there an ETA for 1.0?
Rust is currently slated to hit 1.0 by the end of 2014.
The one thing I desire from Rust is a portable binary format. I know it is aimed for system programs, but a portable binary format that can be AOT or JIT translated to native would “break the mold” and standout among the plethora of language implementations currently available.
Experimental JIT support was added two years ago, but later removed because of instability and limited dev resources.
Two things I really like about Go:
1) The go tool chain, which includes go fmt, go get and godoc. Built in tools like that make managing go code painless. They are so well integrated into my workflow, removing them would be detrimental to my productivity.
2) It’s “just works” approach. For instance, static binaries mean I can send someone a binary and they can just run it. If someone sends me source, it’ll just compile and just run. That’s a refreshing change from more dynamic languages, particularly Python, which I’ve often found require some work to get them to run.
These two alone are so key, if Rust doesn’t have them, it’s fancy pointers won’t be enough to get me off Go.
While Go has first mover advantage, Rust gets to learn from other languages.
Rust’s version of go get will be implemented as cargo by Yehuda Katz and Carl Lerche who previously built Ruby’s Bundler.
Likewise there is rustdoc and rustfmt. All three are currently slated to be launched with Rust 1.0, but there’s the possibility of rustfmt missing 1.0.
Since Rust is ideally replacing C / C++, the language designers are trying to make the runtime as small as possible (e.g. garbage collection and heap pointers are moved into a library) and defaults to static linking. There’s no reason to believe that a Rust binary will depend on shared libraries unless explicitly compiled that way.
I agree with everything the author says. I’d also add that I wish go had a better way of handling nil pointers. Something like Haskell’s maybe type or what not. The majority of my crashes are (predictably) from calling nil pointers.
That being said, Go is still improving. There is a good chance that by the time Rust hits 1.3, that Go will be up to 2.0 with generics, improved memory management and other stuff.
Both Rust & Go are the most interesting, practical languages out there. I use Go to make production SW today and rust and julia are both on my radar for the next 3 years or so.