Having used for a bit both languages I start to see where they fit and which market will they replace. Where we can see Rust and Go in the next 10 years? Will they replace any language?
Being still too new and quite difficult to start with, Rust will take its time to get its place, but I have no doubt that it will.
Rust directly competes with C++, and it’s better in every way, having proper protections against memory misuse. C++ in the other hand has a head start of 27 years, so the amount of code and libraries present in C++ will be a huge thing to overcome. But being Rust easier to work with I believe it will take over at some point.
For C, depending on the program Rust could be seen as a replacement. If the application was big and complex, Rust can add abstraction without extra costs while staying fast. There is also Rust for Embedded systems. Rust has a lot of potential in this area, but looks to me that it will be way more difficult for it to gain ground against C.
For Java, it might or might not make sense. Rust compiler is really picky, which can be seen as an advantage for projects that require some sanity; But Java has more ways of protecting against misuses of code than Rust. In those cases where Java was used for speed, Rust might be compelling, specially because the memory footprint of Rust is really small. But nowadays Java is used for the availability of developers on the market and this is a big problem in Rust.
Scientific oriented languages like F# also won’t see any benefit on Rust as it is too technical for the current audiences of those.
Functional languages like Haskell might seem some use in Rust, as it supports a lot of the functional approach while having blazing speed. Also, functional languages usually are picky on type coercion and other stuff, so Rust won’t be that surprising. But generally, Rust is too low level for those audiences.
Products that we might see using Rust
- Browsers: Don’t forget Rust was created by Mozilla for Firefox to speed up development while guarding against memory errors.
- Virtual machines: Rust is an ideal candidate as it can control interrupts and it’s even prepared for embedded systems.
- Databases: They need blazing speed, small footprints, abstraction and thread safety. Rust brings all of those.
- Game development: Speed is crucial here and Rust will enable modding in a fast, safe way.
- Kernels and drivers: Did I say that Rust supports embedded? Also it should be able to create kernels. There is some traction on allowing Rust drivers in Linux already.
- WebAssembly: Rust is pioneering Wasm support, and being the fastest language it makes sense to use it. Not surprising, as Mozilla is interested on this. Will we see web frameworks like Angular written on Rust someday?
- Basic OS tools like GNU: Those are written in C or C++ currently and Rust is easier to hack with. Sadly, this is an area that does not require any improvement so I doubt anyone will try to rewrite them. But a Bash implemented in Rust can be interesting.
As stated before, Rust has a steep learning curve and don’t expect to see any of these in the mid term. We will have to wait for long before seeing the real potential of Rust.
The biggest advantage of Go is its simplicity to read and write code. Go is taking over already and we will see a lot of applications based on it.
Its main competitors are scripted languages like Python, PHP, Perl and so on. Having more or less the same productivity and adding a nice type check will allow projects to grow in an organized way. Go is really opinionated and this helps preventing a mess of code when the team is big and people coming in and out.
For applications using C++ and C it will not see much benefit of using Go, as it is a bit slower, and compared to C++ it does not offer a good level of abstractions. Only those using C without grabbing all its performance and those using C++ with a really basic set of features will see a benefit moving to Go.
Java developers will probably not want to change to Go. It offers roughly the same speed with less abstraction and less checks. Not having proper OOP and exceptions will produce too much friction to move. The only benefits are the smaller memory footprint and avoiding deploying the JVM on the final system, which will make sense on containers and serverless only.
For scientific and functional languages Go doesn’t offer much, so I don’t expect anyone adopting Go from these.
Products that we might see using Go
- OS tooling: Currently Bash, Perl and Python cope the majority of scripts used in Linux to perform the boot process as well other tasks like maintenance. Go will make these easier to grow and faster, delivering some performance gains.
- Docker: This one already uses Go!
- REST API: Go seems the ideal language, as there are speed gains and ease of development.
- Backend frameworks and CMS: I don’t see why not. Go can generate HTML templates as any other language.
- Applications for containers and serverless: The ease of deploying Go, threading support and it’s speed are ideal for these environments.
- WebAssembly: While still experimental and behind of Rust, if it gets better, the ease of use of Go will make very appealing for people to write Wasm using Go.
The biggest issue I see with Go for scripting and Web is that we’re used to mess with the code as it runs. If Operating Systems start deploying binaries for these we might see a lack of freedom to hack the code, as you have to download it separately and rebuilt.
As Go can be cheaply built and the result can be cached, someone might come with solutions to run it like we do with scripts, like the answers in this StackOverflow questions.
For me, I will keep learning on both Go and Rust. Surely, I will give Go some use in the near term, but for Rust I’ll have to keep learning for some time before giving it an actual use.
What about you? Do you plan to give Rust or Go a try?