- cross-posted to:
- [email protected]
- cross-posted to:
- [email protected]
There are endless debates online about Rust vs. Zig, this post explores a side of the argument I don’t think is mentioned enough.
Intro / TLDR
I was intrigued to learn that the Roc language rewrote their standard library from Rust to Zig. What made Zig the better option?
They wrote that they were using a lot of unsafe Rust and it was getting in their way. They also mentioned that Zig had “more tools for working in a memory-unsafe environment, such as reporting memory leaks in tests”, making the overall process much better.
So is Zig a better alternative to writing unsafe Rust?
I wanted to test this myself and see how hard unsafe Rust would be by building a project that required a substantial amount of unsafe code.
Then I would re-write the project in Zig to see if would be easier/better.
After I finished both versions, I found that the Zig implementation was safer, faster, and easier to write. I’ll share a bit about building both and what I learned.
I don’t think the title is that clickbaity, since it’s pointing out that there are places where Rust falls short. As with all tools, you should know when to not use them. If you know you will end up with a lot of unsafe code, then Rust may not be a good choice.
The TLDR doesn’t say it but the article specifically points out the problem is when trying to use mark-sweep garbage collection in the VM, and talks about the problems that arise when you are forced to use C-like writing to combat the Borrow Checker. Apart from the rewrite in Zig being able to iterate on experiences from the Rust version, I think the points made out were perfectly good arguments about why writing unsafe Rust is far from a good experience. I see that experience reflected in the choice done for the Roc standard library too.
IMO it is clickbaity because it promises to compare rust and zig, but in reality it is just comparing unsafe rust and zig. IMO all it really needed to not be is the word unsafe in the title like they use everywhere else in the article. That is fundamentally my only problem with it. I do agree with your other points on knowing when a tool is good or not to use but I would have been much less likely to click on it if it mentioned unsafe in the title - I already know rusts unsafe is not the best and was expecting some arguments around the advantages of zig over safe rust -ie what most people write, not a small subset of the language.
I don’t think it’s fair to consider unsafe Rust such a small subset of the language that it requires calling it out as a separate thing from “Rust” in the title of an article. Unsafe constructs are necessary in the standard library and many crates, whether or not you use it in the code you actually write.