Rust, Go, C++11 or Julia? Which would you choose and why
I'm thinking of starting a new language this year but recently there have been a number of new languages which all look interesting so I'm not sure where to start dablling and which is going to be a clear future winner (if there is such a notion).
My requirements: - fun to develop in - compiled - did I mention fun?
My background: - dynamic languages (Python and Ruby) - a hint of C
My question to HN is if you were to start with a clean slate, which would you choose and why. I'm not interested in a flame war, just your personal opinions. Please be nice to one another.
26 comments
[ 5.7 ms ] story [ 72.0 ms ] threadRust is also good, but more complicated than Go and hasn't hit v1.0 yet.
c) Go and Rust are likely to both see widespread adoption
http://joeduffyblog.com/2013/12/27/csharp-for-systems-progra...
Rust is still under development, not really ready for production. But this makes rust more like a very good learning material for any programmer, since you can evolve with the language.
Go is also a good one. But what go provided is a very limited feature set. It's more like C in functionality, but less like C in efficiency. Well, still good for you.
C++11 is not recommended. I'm a C++ programer and use C++11 in my daily life. But as you mentioned, fun, C++ is not fun at all. It's actually very serious. There're full of bumps and hollows when you use it.
I noticed Julia last year, but not know much of it.
Ok, everything beyond is not important. The truth is you have to choose your domain of CS area. Each language is deeply connected with its development background and usage, scene. Choosing the domain is the real thing you should consider, not language.
Just like what nationality you have, what tradition you have, IMO.
- Web development (Go looks like the clear winner here)
- Graphics (C++11 or Rust)
- Big data/number crunching (C++11)
- OS development (C/C++, but possibly Rust)
I'm conflicted. After spending 10 happy years in my previous language of choice, I really don't think I have the mental capacity to learn all of the above. First Word Problems?
If you are used to bigger languages, there will be times when you cry out and curse the names of god because the simple, obvious feature simply is not there. There are young-language cryptic error messages.
But all the libraries are brand spanking new and beautiful, and a bunch of Serious Experienced People wrote Go with the intention of using it for the rest of their careers.
If you like that kind of thing, there's nothing more go-like than Go.
The only reason why i wouldn't choose Go at this point is a) it can't be linked from other languages b) can't be used for OS development c) can't be used for embedded systems (I would love to use it for Pebble or Android).
Its well worth a look IMHO.
I am learning Rust now. The explicit memory management is to me its defining feature. The compiler is strict, but it manages pointers/references safely. Manual memory management with fewer sharp edges (once it compiles). It seems to be blazing its own trail here. It's frustrating getting anything running when half the examples online only work on older versions of the compiler, but if you can tolerate the churn there is a lot to be learned.
Go is a very clean, simple language with a great thread/concurrency model. It seemed similar to Rust at first, but it's garbage-collected, doesn't (won't ever?) have algebraic data types, and lacks pattern matching. It does have a certain appeal: simplicity. If I only had one weekend to burn, I'd learn Go.
If you want to write production code C++ is a definite answer. Rust and Julia are immature. Go is a badly designed language.
If you want to learn, choose Rust. It's very well designed language with interesting type system which includes many ideas from languages like Haskell, etc. Julia is a dynamic language and you won't learn a lot.
Honest question: why do you think so?
Rust is much better language in this respect. It has beautiful type system.
Wat.
FWIW, Go was designed for productivity, not for breaking new ground. In that respect, it has it well achieved. You just need to program in Go for a bit to realize you don't really need classes or generics or templates.
http://talks.golang.org/2014/research.slide#7