8 ms·
“I just started writing some Rust”
- noobiemcfoob 8y agoWhat is meant by people look to other languages more often because you can do something in C++? /My rephrasing, but I can't parse Carmack's point
- lemmsjid 8y agoI believe his sentiment was that you can do too much in C++, so you pick other languages because of restrictions they impose, or features they lack.
- aerovistae 8y agoI read it the same way. C++ is notoriously overstuffed with features.
- twic 8y agoI would imagine that Carmack specifically means that you can do unhelpful things, like dereference null pointers, access uninitialised memory, accidentally invoke undefined behaviour, etc. A foundational goal of Rust is to make those things nigh-on impossible.
- bluejekyll 8y agoAnd through those restrictions, like only allowing Send types to be passed between threads, you can even gain features over more permissive languages, i.e. datarace free code.
- Zenst 8y agoFrom " people don’t look to other languages because you can’t do something in c++, but more often because you can." For me it comes across that you can do in rust what you can do in c++. As for any reasoning for the change, be it learn-play, a more sane way of doing things, flavour of the month, or something else entirely. I had a look for a rust vs C++, having limited exposure of the later and none of the former, and found this comparison insightful https://www.apriorit.com/dev-blog/520-rust-vs-c-comparison https://www.apriorit.com/dev-blog/520-rust-vs-c-comparison But you may be right, if your referring to some unsavory aspects of c++ that rust may well avoid or obfuscate away from the coders train of thoughts.
- twic 8y ago> "Yup, all the things you mentioned are also available in C++, and you've been ignoring and criticizing them for years" Even that's not true. One of the practically valuable things about Rust is that it has a decent and standardised package manager and build tool. C++ does not, and is nowhere close to having that. Another is that the Rust libraries use iterators as a straightforward, composable, and efficient way to write operations on streams of values. The C++ standard library doesn't have anything like that. Rust has a really powerful macro system. C++ doesn't. It has template metaprogramming, which can do most of what macros can, but it's agony to use. C++ is getting some really powerful compile-time programming facilities, but those aren't in a standard yet. There are a lot of things in Rust that are in C++. There are things in C++ that are not in Rust (some of them even useful!). But there are things in Rust that aren't in C++, and when C++ loyalists say there aren't, they just look stupid.
- est31 8y agoThanks for comparing C++ templates to Rust's macro system and not to Rust's generics. The template system that C++ has is actually closer to Rust macros than it is to Rust generics, and I think a common misconception. This is e.g. something that people who complain that C++ has const generics while Rust doesn't should keep in mind.
- barrkel 8y agoRust is in many ways more powerful because of what it can't do than what it can. Good constraints are liberating; they raise the level of what you can trust about your environment.
- tomnj 8y agoI love C++ (though it often frustrates me), and I think Rust is doing some awesome things (though I don’t work in it). A few clarifications: Your point about iterators and composability: you’re right, the STL suffers a bit here, but Eric Neibler’s ranges library (which is partially approved for C++20) addresses this. > Compile time programming ... aren’t in a standard yet. There compile time programming story in C++ has been getting better and better, and has made great strides with recent standards (check out constexpr, which arrived in C++11). > template meta programming is an agony to use. Many people would agree with you, but it’s a matter of taste :). It’s “just functional programming” (with an arguably terrible syntax). I’m very jealous of many rust features, like built in algebraic data types, pattern matching, but most of all their build and package stories.
- inherentFloyd 8y agoI have never done anything in Rust. Are there any benefits? Any drawbacks?
- gf263 8y agoYes
- bluejekyll 8y agoI read this nearly four years ago, and it convinced me (based on a lot of experience with bugs in concurrent code) to dedicate a significant portion of my spare time learning and using Rust: https://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.html https://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.h...
- cpeterso 8y agoHere's a great talk (from Strange Loop conf 2017) by David Sullins about Rust concurrency: https://youtu.be/oIikwmeGVYY https://youtu.be/oIikwmeGVYY
- gnuvince 8y agoIf you don't mind a bit of a re-education, Rust allows you to write programs that are as fast as those written in C or C++ and you'll be more confident that they don't have strange memory bugs. (Reason: the ownership model of Rust prevents a lot of bugs that are found in C or C++, but this model also rejects many correct programs, so you need to re-learn how to write some programs.)
- wwright 8y agoOne thing people (like me ) often say is that it forces you to “learn to write better.” One way you can think of it is this: - Rust rejects some programs that are truly wrong (`“2” + 3` style) - Rust rejects some programs that really are just fine. They are actively improving this with stuff like “Non-lexical lifetimes.” - Rust rejects some programs that are fine _how they are now_, but which are hard to keep fine when you change them. This is part of why linked lists are hard to write in Rust :-)
- deleted 8y ago[deleted]
- mastax 8y agoI'm a big fan of Rust, and seeing that Carmack writes it gives me warm fuzzy feelings. But this link is mostly content-free, and I don't think it's the type of link that inspires useful discussion. I wish that HN had downvotes on posts, though I suppose it uses several other methods.
- tbodt 8y agoFlags are roughly equivalent to downvotes.
- scabarott 8y agoHuh? Maybe the headline is content-free, but the tweet it links and reply tweet could be useful esp for someone on the fence about Rust, and not just because of the person replying
- yodon 8y agoReading your comment 42 minutes later your fear that it would not inspire useful discussion appears to be demonstrably unfounded. Flagging a post out of fear of what might be said in response to the article is the aspect of HN culture I find least admirable. Flagging a post is not the same as downvoting. Flagging amounts to "I believe this article should not be read by anyone from HN" because a fully flagged Article (flagged by more than one person) removes the source link from view. That's a pretty serious statement to feel you can make on behalf of all the other readers of HN, and should be used only with the greatest of care.
- ilovecaching 8y agoRust makes things that are technically possible to do in C++, easy to do. Rust makes things that are painful to do in C++, pleasant to do. Rust takes your template compiler errors, and gives you beautiful type parameter errors with underlines. Rust takes your scary macro and turns it into a sanitary macro. Rust takes your crazy diamond of death and towers of inheritance, and gives you traits, associated types, and composition. Rust takes your runtime variant and insane union and gives you real sum types. Rust takes your ASAN, Valgrind, debug alloc builds, and hopes and prayers, and gives you a compiler that let's you use memory safely. Rust is like C++ without the jagged edges, the specification no one understands, removes the dangerous bits that no one person can keep in their head, and trades the useless abstractions for nice functional abstractions that actually are an improvement over writing C.
- bsurmanski 8y agoFor anyone else looking into Rust, I've been experimenting in it for the past month. Heres my thoughts: It advertises itself as a systems level language for the new age, but to me it feels like a functional language in disguise. The borrow checker enforces an unchained functional style (You may have 1 unique mutable reference or may have many immutable references). This sounds bad if you're used to pointer slinging, but once you get used to the peculiarities I find it forces me to write better quality code. The package management is the most refreshing feature. It's a pain to rewrite my personal libraries in each language I use, but I found that most of the things I needed were already available at higher quality than I would have done. (And using them is a single config line). For a 'low level language' they make it pretty hard to do some 'low level' things. Example's I've found include: * writing a doubley linked-list. Consensus is "don't use linked-lists. The stdlib has better tools * Reading a file into a struct. They make it surprisingly difficult to say "hey, read these 10 bytes, its this struct". Consensus is to use more structured file formats like json or protobufs. There's libraries for reading those things. Error handling is similar in style to Go, but it get rid of a lot of the boilerplate. The '?' operator effectively acts as if err return err. The macro system is really nice. I don't write many macros, but it does mean I can use other people's powerful macros. My favorite are 'include_bytes!', 'lazy_static!' and 'dbg!'. The new procedural macros are pretty wacky, essentially allowing you to parse or rewrite the AST. A powerful example I've seen is static checks; This [0] example writes a compile time check to assert that structs do not contain a member named 'bees'. Overall it's been a fun language to mess around with. [0] - https://tinkering.xyz/introduction-to-proc-macros/ https://tinkering.xyz/introduction-to-proc-macros/
- SamReidHughes 8y agoMaybe I'd call Rust a "resource-constrained" language than low-level. The usecase being you want no GC, for memory inflation or CPU pauses, but suffer a bit in overall CPU time and memory locality.
- wtetzner 8y agoWhy do you think you'd suffer in CPU time and memory locality?
- vertline3 8y agoAs soon as I saw it was just a quote, I had this gut instinct it would be Carmack speaking. The reason is because when DirectX was really marketing hard, Carmack did some work in OpenGL and stood up for it. It was kind of important to me since it was open.