5 ms·
I don't deny that there are useful features in C++11/14 (though I find "modern C++" an irksome marketing trick by people peddling a disgusting programming langu
by _yosefk 11y ago
I don't deny that there are useful features in C++11/14 (though I find "modern C++" an irksome marketing trick by people peddling a disgusting programming language; it was called "modern" since at least the early 2000s and it was disgusting then.) Of course I'd rather iterate over std::map with a range for loop than use the C++98 way, and as to lambdas - while I find them way too awkward and limited compared to closures without the sharp edges (and with garbage collection), and a ton of "modern C++ code" went batshit insane in its extent of unnecessary reliance on lambdas, lambdas remain much more practical than the alternatives when doing things like some sort of a parallel_for. But then it's hard to find a language whose version X+1 adds nothing useful to version X.
Is C++14 a better language than C++98? It's hard to tell (I think it is - I think C++ is worse than C, but having gotten to C++98, perhaps it helps more than hurts to add all that other shit), but it's not an interesting question anyway because the upgrade is easy enough and it's worth it for most people for their specific reasons, so C++98 will die out.
But then it's not like Google aren't upgrading to the latest C++ standard, they're just doing it slowly AFAIK.
- hellofunk 11y agoIt's interesting to consistently find that people who hate C++ just really really hate it a lot, to the point of using profanity a lot of the time. I don't see what the big deal is. C++ is probably the most gigantic and complex language I am likely to ever use... but you don't have to use the vast majority of it if you don't want to. If you want to stick with C-style coding, you pretty much can, if you don't want OO or STL or ++11/14 features -- nothing is forcing you to write those features into your code. But when you want access to them, there they are; and if suddenly you find yourself needing a particular library that only exists in C++ (as so many graphics and physics engines do), you can get access to that as well. As soon as you need multithreading, or sorting of hash maps, or even basic string operations, knowing you can reach for them in pinch rather than find the C alternatives or build your own, seems like a big bonus to me (assuming a comparison to C).
- 72deluxe 11y agoTrue, but I think a lot of the encouragement is to move away from writing C++ like it is C because we really don't want to encourage people to write with dangerous approaches anymore (like you can if you write C++ like it is C). I work with a few who write their C++ like it is C (pointers thrown around, no const-correctness, memcpy instead of copy constructors etc. etc.) and it is horrible to read. There is no indication of lifetimes of objects, nor any indication of ownership. No RAII, no exceptions, nothing. It is dangerous. You are rewarded for writing C++ safely because you won't have to fix any bugs and you can offload all the work onto the compiler for checking types and safety for you. Like you, though, I don't understand people who get red in the face about C++ and go into a profane rage. It is just a language after all.
- ratboy666 11y agoGuilty. Of writing C++ as if it were C. Sometimes even with classes. Yes, I use memcpy instead of copy constructors. I find "modern C++" horrible to read. Indication of object lifetime? Ownership? Um... why? If the development support does not include a garbage collector, I have to be very careful about these things. And, I am. Very careful indeed. I just use the approach I do in C, and assume NOTHING from C++. Honestly, I do NOT assume that the language system, compiler or run-time can do it properly. I have been bitten too many times. I do presume a garbage collector at the very next level up. Yes, you may find my code "horrible to read". And, yes, I have gone into profane rages over C++ code. It happens when the code bullies me -- with hopeless error messages for simple typos. When simple changes cause the application to no longer link. When simple changes cause massive explosions in object size. In fact C++ is so complex, it encourages cargo cult programming. Not just use of libraries, but enforced cargo-cult when USING the libraries. Because, raisons. Not just a language -- hell-spawn. Sorry, "modern hell-spawn".
- 72deluxe 11y agoThe problem is that if you were hit by a bus, the next guy maintaining the code has to know about where everything is cleaned up and has to know all of the secrets that you know and that you decided you knew better than the compiler in areas. This makes for unmaintainable code. Ownership is very important because if you don't know who owns it, who will clean it up?? If you don't know how long an object will be around because you've got a pointer, it is now a dangling pointer and attempts to use it will cause chaos. So object lifetime is important too. The error messages are usually quite helpful. clang's messages are more helpful for gcc, I have found. C++ is complex, but you can still write safe code without using any of the complexities.
- blub 11y agoHe's not just any guy, but the guy that created a whole website, C++ FQA, dedicated to trying to explain how C++ is terrible. Or maybe he just shares the same name with him. Anyway, it's difficult to have a reasonable discussion over a topic where said topic has religious dimensions for one of the involved parties.
- _yosefk 11y agoThat's me alright, but I think my comment in this instance didn't warrant the claim about "religious dimensions." Having a firm opinion and using (OMG) the word "shit" when stating it does not mean it's a religion, and I'm very secularly using much of C++11 as I said, and I was among the people pushing for the upgrade where I work.
- blub 11y agoMaybe it was too strong of a word, but... I have the impression that C++ topics are more emotional than they need to be. In the end it's just a programming language.
- sitkack 11y agoI tried being a C++ programmer back along time ago (1992-1995) and I failed. The biggest mistake was trying to learn the whole language and apply the whole language to the problem. The utility of the language doesn't compensate for the cognitive burden. I would have been better served by using ML (with some C), or Rexx (with some C). Good C++ has an abstract top level that isn't much different than a scripting language in expressivity. Now something like a Lua +Rust can be more expressive, correct and fast.
- pjmlp 11y agoAlthough I would also favour ML over C++, if you look its derivatives, OCaml, Haskell and so on, they really aren't much smaller than C++. C++ biggest problem are all the design decisions to fit into C's tooling and its compatibility.
- GFK_of_xmaspast 11y agoEarly 90s c++ was pretty unfortunate all around.
- agmcleod 11y agoI find this a lot more encouraging to read. Most gamedevs I see talking about C++ mention to avoid boost & templating, how STL is bad, etc. How they have to write their own more efficient version of vectorm or their own allocator. There are things I like things about C. I find malloc & free fairly understandable, where as a lot of the newer pointer arithmetic in C++11 can be a bit overwhelming. That said as someone who hasnt done a lot of C or C++, i'd like to think learning the new way is best, otherwise it's hard to know where to start.
- pjmlp 11y agoThe thing with game devs is that they only change tooling when forced to do. In the 80's Assembly was the only way to go, if you were targeting consoles and home systems. Higher level languages were the managed languages of the day. When the SDK started to push for C, like on first PS, they were forced to move. Still the code was pretty much inline Assembly wrapped in C, until they were confident to write more and more in C. Similarly when around PS 3 time, the SDKs were moving into C++, the majority took advantage of the C compatibility and used only as much C++ as required by the SDKs. Only recently some started to do the transition to embrace C++. Likewise if in the future language X becomes the only way to target games for platform Y, and they a market that they need to be in, they will eventually adopt it. Of course writting big chunks in C++ until they can be convinced it is ok to just use X.
- agmcleod 11y agoAh interesting. I have to admit I thought the C++ dominance had been around for longer than that.
- lmm 11y ago> C++ is probably the most gigantic and complex language I am likely to ever use... but you don't have to use the vast majority of it if you don't want to. If you want to stick with C-style coding, you pretty much can, if you don't want OO or STL or ++11/14 features -- nothing is forcing you to write those features into your code. But when you want access to them, there they are The features are dependent on each other though. The flipside of my example elsewhere in the thread: if you want to use templates to eliminate repeated code, you more-or-less need to make any classes you want to template over use RAII (or else do very error-prone partial template specialization to ensure your things are initialized and deininitialized correctly). So then you have to use exceptions, because if you're doing complex logic in your constructors then you need a way to report failure. So then you have to make your code exception-safe, which means making everything else RAII.
- hellofunk 11y agoWell, if you are going to choose just one feature to reach for in C++, template metaprogramming is probably not going to be it. Even a lot of devs who are very comfortable with other C++ tools and idioms don't write, if any, template code. I wouldn't think that someone would avoid all the other C++ features, but then willingly go down the road of writing templates.