3 ms·
As an analogy, you can write safe code in assembler as well if you and your team are incredibly disciplined and only interact with libraries written with a simi
by seanwilson 11y ago
As an analogy, you can write safe code in assembler as well if you and your team are incredibly disciplined and only interact with libraries written with a similar amount of discipline. The appeal of alternatives is you can write safe code with a fraction of the discipline and mental effort required.
- claudius 11y agoThere is no extra “discipline“ or “mental effort” required to write safe C++. Don’t use new/delete/free/malloc and don’t use operator&. Of course, you can say that we might as well remove them from the language entirely, but I really don’t think it takes extra effort not to use them.
- keyneus 11y agoC++14: auto p = std::make_unique<int>(5); auto q = std::move(p); std::cout << *p << std::endl; Segfault using the “safe” C++ features. I'm a fan of modern C++, but it's not safe (in a Rust sense) even if you stick to C++11/C++14 features.
- steveklabnik 11y agoFor comparison, the same thing in Rust: fn main() { let p = Box::new(5); let q = p; println!("{}", p); } gives, upon compiling: error: use of moved value: `p` [E0382] println!("{}", p); ^ note: in this expansion of format_args! note: in this expansion of print! (defined in <std macros>) note: in this expansion of println! (defined in <std macros>) help: run `rustc --explain E0382` to see a detailed explanation note: `p` moved here because it has type `Box<i32>`, which is moved by default let q = p; ^ help: if you would like to borrow the value instead, use a `ref` binding as shown: let ref q = p; error: aborting due to previous error Running `rustc --explain E0382` or going to https://doc.rust-lang.org/nightly/error-index.html#E0382 https://doc.rust-lang.org/nightly/error-index.html#E0382 gives you an extended error message as well.
- seanwilson 11y agoThere are countless ways of causing undefined behaviour in C++ (not including memory management mistakes) as well as platform specific behaviour that you don't see in other languages. It's a very complex language to master compared to alternatives.
- eru 11y agoSee eg http://blog.regehr.org/archives/140 http://blog.regehr.org/archives/140
- deleted 11y ago[deleted]