6 ms·
Is there a Rust vs Zig war going on? I just started to learn Rust because I figured that it was going to be the C++ successor and I want to be sure that my ski
by VWWHFSfQ 3y ago
Is there a Rust vs Zig war going on? I just started to learn Rust because I figured that it was going to be the C++ successor and I want to be sure that my skills are (somewhat) future-proof. So what's going on with Zig? Should I learn Zig?
- snacktaster 3y agoRust is by far the more mature option if you're really trying to replace C++. Zig is personally interesting to me though. But if you need to write actual production critical code then you should definitely go with Rust. Honestly, it's still a little bit surreal to me that I won't even consider C++ now for a new project after so many years of my career.
- infamouscow 3y agoYou can use both. There's no need to make binary choices or create division. Only fools mimic such behavior.
- arp242 3y ago"Rust vs. Zig" is like "Ruby vs. Python": both languages occupy more or less the same space, but have a rather different approach to things. Which is "better"? It's kind of a matter of preference and taste. That said, Zig is still very much in active development and isn't stable. For example the upcoming 0.11 release will change some syntax. Personally I like Zig, but you need to be prepared to deal with these kind of changes and instabilities for the time being, much like early Rust adopters had to before 1.0. Also the Zig ecosystem is less mature: fewer libraries, learning resources, etc. Purely objectively speaking, I think that's the biggest difference at this point.
- bobbylarrybobby 3y agoMy understanding is that rust is a better C++, Zig is a better C. They're better than their respective antecedents in different ways (Rust is memory safe, Zig is ergonomic).
- slondr 3y agoI see this line repeated a lot, especially in Zig spaces, but it doesn't really make sense to me. Rust is an excellent replacement for C, even though it has more features. What makes C the language of choice for so many applications is not its lack of features.
- drowsspa 3y agoIt's been a long time since I've programmed in C, but AFAIK the major pain points were and continue to be the build system and the preprocessor (or consequences of those). Zig does seem to fix in a pretty simple way
- mananaysiempre 3y ago> I see [Rust : Zig :: C++ : C] repeated a lot, especially in Zig spaces, but it doesn't really make sense to me. Rust is an excellent replacement for C, even though it has more features. It’s the feels, not the features :) Rust code feels like C++ code, at least when you’re reading it (I haven’t written any worth talking about). It puts the problem domain in similar terms, it has similar transparency (or lack thereof) regarding what it’s copying or allocating or whatnot, and so on. In that respect (!) they are closer to each other than C is to either—at least vanilla C, not a DSL (“language overhaul mod”?) like GObject. And it makes sense to target the C side of that divide in a new language (though again I lack the experience to say to which degree Zig succeeds in hitting that target).
- pornel 3y agoThe feels are not very accurate. Rust adopted C++-like syntax to look less weird to C++ programmers, but semantically it is quite a different language. It's more like a low-level Ocaml than C++. Notably: • Rust doesn't have inheritance. This makes a lot of basic C++ programming patterns unfit for Rust, and prevents 1:1 translation of C++ to Rust. • Rust's generics may look like C++ templates, but they're not. Rust's macros behave more like C++ templates, and generics are closer to C++ concepts, but neither is a close match. C++ programmers are generally flabbergasted how hard is to make a function that takes any integer type in Rust. • Even though Rust copied C++ moves, and has "RAII", the way these are used in practice ends up different due to having opposite defaults and different guarantees. Rust doesn't have constructors. Its closest equivalent of exceptions is for a different purpose. Rust's types are always movable, don't have meaningful addresses, can't reference own fields. Even C++'s std::string is hopelessly incompatible with Rust. C++ has two string types, because of C legacy. Rust has two (and more) string types to express different modes of ownership. C++ is a complex language, because they keep adding more ways to initialize a variable. Rust has exactly one way. But Rust has many other features, mostly in its type system, to define thread-safety, memory-safety, and memory management in detail that is beyond what C++ can express. So "but they're both big" is glossing over all the reasons why. However, C happens to be almost a clean subset of Rust. You can take a C program and translate it line by line to Rust. It won't be idiomatic, but may be easy to refactor into proper Rust. That's generally not true with C++, which requires rethinking everything from basic idioms and constructs to the overall architecture. This is why Rust struggles with GUI libraries, and the best-supported native toolkit is from C.
- IshKebab 3y agoNot any more than there was a C/C++ war. C++ is for people that aren't scared of features and want their code to be reliable. C is for people that really value simplicity and don't care about the odd segfault or catastrophic security vulnerability (in some situations that is reasonable). It's basically the same with Rust vs Zig.
- alchemio 3y ago[flagged]
- skybrian 3y agoPopular programming languages don't get replaced, even by something that's mostly a superset. C++ didn't mean the end of C. So I'd say stick with your plan, as there is going to be Rust around for a long time. It's rather early to learn Zig, as it's not stable yet. It might be worth learning if you're curious and want to tinker.
- AndyKelley 3y agoYou can just ignore Zig. It will be there for you when you want it, and it will take you less than an hour to learn when the time comes that you want to use it.
- lytedev 3y agoWell, I was maybe considering ignoring it... until its creator told me to. You can't tell me what to do!
- crubier 3y agoNice flex, I like the attitude!
- synergy20 3y agozig is as small as c, perfect for my brain to actually be able to remember without checking some 100s page reference book like other languages have, learning it now. my only 'wish' for zig is to replace its {} with indentations kind of like nim/python for readability.
- Cloudef 3y ago>my only 'wish' for zig is to replace its {} with indentations kind of like nim/python for readability. Please no
- _hypx 3y agoYou can always learn both. They do not really compete against other as one is aiming to replace C++ and the other C.
- xedrac 3y agoI hear this repeated quite often in Zig crowds, but Rust is absolutely, 100% aiming to displace C. There's no way it would have made it into the Linux kernel otherwise. It just so happens that it can also replace most of C++, which is why it's also found in the Windows kernel.
- _hypx 3y agoRust is not a particular good replacement for C. I think Rust fans are headed for disappointment if they really think that.
- endorphine 3y agoWhy is that?
- _hypx 3y agoC is basically portable assembly. It should be as simple as possible. That is closer to what Zig is trying to do than Rust.
- xedrac 3y agoNot sure I follow your line of reason. From a technical standpoint, I see only one reason why Rust could not completely replace C. And that reason is obscure hardware platforms that LLVM doesn't target. Otherwise, it's superior in every way I can imagine. More complex? I guess that depends on your project. If you work mostly in small code bases where it's easy to get things right, then I'd say it's a toss up. But if you're dealing with a large multi-threaded code base, with lots of heap allocations and shared ownership etc... Rust will be far less complex than C. I highly doubt the Linux kernel developers introduced Rust to add more complexity. They did it to reduce complexity in the system, and make it more accessible to new developers. The Rust compiler is soooo liberating once you get over the initial learning curve, which I admit can be a little annoying.
- secondcoming 3y agoModern software engineering summed up in two sentences... Use which ever one you enjoy using.
- endorphine 3y agoI don't know why you're downvoted (perhaps because it's a blanket statement), but there's definitely some truth to that. With so many great choices, after a point it comes down to personal preference.
- pjmlp 3y agoFor many of us it is "use whatever is allowed/required on the job".
- kristoff_it 3y ago> So what's going on with Zig? It's a language made for people who like to do things a certain way both in terms of technical details (eg no macros, no hidden control flow) and when it comes to governance of the project (small, independent, non-profit organization free from big tech influence). While we do believe that there's value in this approach, this doesn't mean any other way of doing things is now obsoleted in favor of what we're doing :^) More in general, Zig and Rust are different enough that if you spend enough time to properly evaluate both, you will probably find one more congenial to you than the other. I like Zig because I like simplicity, somebody else might like Rust because they like sound memory safety guarantees and a powerful type system. You shouldn't see Zig as a threat to Rust, also because Rust already succeeded pretty much, and in fact I would recommend Rust as the much safer bet if you're looking for a new language to bet on, all else being equal. > Is there a Rust vs Zig war going on? Uhhh, no? There are certainly different sensibilities at play when it comes to the different communities, but that's it. I think I understand where this is coming from, but I really feel compelled to point out that I find crazy how people get really worked up when it comes to programming languages and immediately assume there has to be a fight for ultimate dominance there, while instead are completely oblivious about actual wars being fought under their noses. If you want to look at a war, watch Deno vs Bun, where different VCs have backed a different horse, and now they truly are in a battle for dominance. The ZSF has taken no VC money, has no big tech company brand to bolster, and lives off of donations. We just want to be able to move forward with the development of Zig and, for as long as we can do it, all is good, no need to convert the entire planet. If you do end up evaluating Zig, I would recommend reading these two non technical blog posts about the ZSF & the people involved with it: https://kristoff.it/blog/interfacing-with-zig/ https://kristoff.it/blog/interfacing-with-zig/ https://kristoff.it/blog/the-open-source-game/ https://kristoff.it/blog/the-open-source-game/
- ChubbyGlasses 3y agoidk about a "war" or we, but features aside, zig feels like a less obnoxious language, and i mean that as politely as possible. to make an analogy, rust is like a friend that constantly nags about _everything_; like you know they mean well, but girl chill i know. about to cross a street, rust reminds you to look both ways. empty street with no cars around and it's safe to cross, rust wont let you cross until the crosswalk sign lights up. cooking something, rust will pester you about proper knife safety. like yes i know, being a nuisance about things i already know about doesn't help me write better software; i already know to look both ways before crossing. every once in a while it catches something you wouldn't have otherwise, but you have to deal with that constant pestering _all_ the time. also, just my personal opinion, but rust has some of the worst language ergonomics i've seen in any modern mainstream language and i don't think it can reasonably be fixed due to its 1.0 promise
- Georgelemental 3y agoRust is annoying when you are doing something you know is sound, "yes I looked both ways and re-checked twice, chill out OK", but the compiler yells at you anyway. Zig is great in such situations. Rust really shines when you are doing something you are not confident at all in—juggling 17 knives, in a large codebase with many contributors that you are new to, and you haven't had any coffee—and you can relax because you know the compiler will catch your soundness mistakes. Good blog post to this effect: https://matklad.github.io/2023/03/26/zig-and-rust.html https://matklad.github.io/2023/03/26/zig-and-rust.html
- Cloudef 3y agoI find rust easy to use when you are doing high level programming, but it becomes very annoying language when you are trying to do something low level, or trying to manage memory yourself.
- NathanielBaking 3y agoI don't want to get grabbed on a side street and beaten but... Rust is language designed to solve a process problem (bad buggy code) with a straitjacket language approach. It is pedantic to the point of being unreadable and in it's own problem domain (system, embedded and up) has been ticking the wrong boxes. Zig is substantially better yet I think a better language is still around the corner. Having said that, you absolutely can't go wrong mastering C. Zig wraps C in a way that doesn't choke you on configuration issues. Zig's out-of-the-box support for many target's is a savvy decision too. However, both Zig and Rust make some of the same errors so I will put my plea here for future language developers. How you work with Threads, Async, Interrupts are all implementation details. Please don't make them part of the language. A good Function type is sufficient to make elegant solutions that do not require language support.