| I agree with some of your points, but think this is phrased a bit harsh. FWIW, I write both Go and Rust on a regular basis. Here's where I would agree with you: - Go makes it harder for someone to write overly abstract code (a common affliction!). - Being able to occasionally do type assertions in an ergonomic way is surprisingly nice. - I wish Rust had something in the stdlib like net/http. - I like that go fmt is so unconfigurable and canonical. Here's where I would disagree: - I find ADTs (Rust's enums) super helpful for productivity. - Removing nil pointer derefs is wonderful, particularly for refactoring. - I spend too much time in Go rewriting bits of code that I would just use generics for in Rust or C++. Rust's iterators are wonderful and I end up using them over and over again. - Maybe it's my C background, but I like being able to occasionally use macros. Even for tests it makes things much more readable. - The borrow checker ends up moving many concurrency issues from runtime debugging to compile time debugging. - I think cargo is more pleasant to use to manage code than using go + godeps/glide/etc. |
But I find it a mixed bag of whether the naive Go version of something that shares memory by GC is simpler than the naive Rust version of something that shares memory. Sometimes ref-counting (Rc<T> in Rust) is fine, although that's more expensive than GC. Sometimes Rust's ownership model nudges you to make the code much simpler and makes it clear that something only has a single writer. Sometimes you wish you were in C and just did it yourself...