Hacker News new | ask | show | jobs
by IshKebab 3440 days ago
I think the best way to put it is that Rust has no overhead. You'll never be in a situations with Rust where you say "Oh damn I wish I had written this in X because Rust has this annoying limitation". Some examples of limitations in other languages:

* Python has a GIL (Global Interpreter Lock) so writing multi-threaded Python code is more or less impossible (there are some workarounds but it still sucks).

* Most garbage collected languages (e.g. Java, C#) suffer from 'stop the world' pauses which make doing low-latency realtime stuff a pain in the arse. For example on Android they recommend you don't create any objects in your draw functions to avoid invoking the GC. It's kind of like "Java is great, no need to worry about memory, but oh... you really have to be careful about memory here." Not all GC languages are like this, e.g. Go now has sub-millisecond pauses.

And aside from that it is safer than C/C++. So basically it will be used wherever C++ was before.

The big downside is that it is definitely one of the hardest languages to understand and write. That can make you less productive. If I were on a varied team that included less skilled people I would definitely choose Go over Rust if it were suitable - it is a lot simpler.

2 comments

I hear that about Python surprisingly often, but multiprocessing avoids the GIL. It has some overhead, sure, but in my work it's worked fine.
If one just wants simplicity, why not pick C, or even Basic-80? They are simpler than Go.

For the increase in complexity, Go gives you concurrency, and Rust, safety, on top of other things.

> If one just wants simplicity, why not pick C, or even Basic-80? They are simpler than Go.

It's very simple to write bad C. Writing safe, correct C with no security vulnerabilities is surprisingly hard, which is a major reason why most OSes need to apply regular security patches.

Rust gives you speed, concurrency and memory safety at the same time. This is not free: You need to know about values, references, stacks and heaps. And you need to write your code so that objects have a single, clear owner. It also helps to be somewhat familiar with generic types and functions like `map`—some old-school C programmers might have issues with parts of Rust, but C++ programmers (or C programmers who know JavaScript) should be fine.

If you're willing to pay that price, and spend a week or two making friends with the borrow checker, Rust is a fantastic and versatile tool. But for many programmers and applications, that price may be too high.

Rust will hopefully remain simpler than C++. But it's always going to be more complex than Go or Ruby. I have no idea whether Rust will wind up simpler or more complex than modern JavaScript, though. :-)

My point exactly. Being simple is nice, but not enough.

This is why I (ironically) offered to use Basic-80, which is even simpler than Go, replying to a text that suggests to choose Go over Rust for Go's simplicity.