6 ms·
Wow, what a response. Thank you for taking the time to reply and I think you did a far better job of summing up the challenge of being a “modern C++ programmer”
by rcurry 5y ago
Wow, what a response. Thank you for taking the time to reply and I think you did a far better job of summing up the challenge of being a “modern C++ programmer” than I could have dreamed of. I had no idea that Scott Meyers had bailed on the language, I’m honestly stunned to read that.
- galangalalgol 5y agoWhat is our option now? Rust? I love it but it is moving 5x the rate of c++. Static analysis may save us in this one. Good tools will tell you when you did something the "old" way. I'm not sure which part of our pipeline that is. Cppcheck, coverity or some clang checker probably.
- sseagull 5y agoI would love compiler options for enforcing better practices and prohibiting old style code (no using bare new/delete, stricter implicit casts, etc.) It wouldn’t fix everything but would go a long way. It’s a little bit of a peeve of mine that people just decided on new languages instead. But it is what it is, and I am probably not knowledgeable enough to really judge.
- ReactiveJelly 5y agoYou can think of C++17 as a new language which happens to be able to compile most C++14, C++11, and C++98 programs. The trouble is, if every new version is _technically_ its own new language, and if you have to break compatibility a little, why not just break a lot and fix everything? It's not like C++ was ever known for ABI stability anyway.
- sseagull 5y agoThe benefit is that ability to compile that old code, even if it takes some flags or marking it unsafe or whatever. There is a lot of old code that will never be rewritten but is still valuable, and I believe we will waste a lot of time just language-shifting entire ecosystems as new languages come and go. Look at python 2 to 3. There are still packages out there on python 2 that haven’t been migrated. And thats mostly the same language! (Note that my view is colored somewhat because I am a scientific programmer)
- alephu5 5y agoFor those that don't want to upgrade, why not use a pinned compiler? Everyone else does this with other languages, and overall I think the benefits outweigh the costs.
- Animats 5y agoRust? I love it but it is moving 5x the rate of C++. Static analysis may save us in this one. Yes. Rust is complicated, but the compiler is unusually good at telling you what you did wrong. Before it results in a crash. The underlying problem with C/C++ is that it still doesn't have a decent array story. " char * " is so 1970s. That can't be fixed without breaking so much. All you can do is try to paper over the problem with templates. But the mold always seeps through the wallpaper. Look at the example in the original posting that reads: FILE* fp = fopen(fname.c_str(), "r"); There it is, access to a raw pointer. Why is that even allowed any more? You ought to have to wrap "Unsafe" around it, or something.*
- shaklee3 5y agoBecause it needs to support 40+ years of legacy code. What's wrong with the more modern array types?
- habibur 5y agoBecause the underlying OS API expects a char* as file name.
- nyberg 5y agoRather, the underlying OS requires an array of bytes terminated by 0 which can be hidden behind a decent API. The type being poor at expressing this is not a limitation of the OS but of the C type system. E.g in zig this would be `[*:0]u8` which is "a pointer to a region of memory of unknown length terminated by a 0 sentinel value". It's still a pointer but nothing says the type system can't track more state around it.
- Animats 5y agoSo why isn't the Linux API properly encapsulated for C++? Rust does that. C++ got off on a weird I/O direction. That file << item << item; syntax never really caught on. Someone liked Currying too much.
- clappski 5y agoC++ has a great array story - `std::array<char, N>`. `fopen` is a C API, so yeah you have to pass it C-strings. Note that Rust has to do the exact same thing (albeit calling `open64` rather than `fopen`), you can see it in the source for the stdlib here https://github.com/rust-lang/rust/blob/master/library/std/src/sys/unix/fs.rs#L764 https://github.com/rust-lang/rust/blob/master/library/std/sr...
- dralley 5y ago>Rust? I love it but it is moving 5x the rate of c++. I'm not sure this is true. It has been a year since the last really significant change to the language, whereas C++ is adding Ranges, Concepts, Modules, and so on and so on. The pace of change has slowed way down in Rust and sped way up in C++, it almost feels like C++ is moving "faster" now or they are at least close to matching pace. But a lot of the Rust efforts at the moment are really just closing holes in the language - things that you would expect to be able to do, but haven't been able to do due to compiler limitations. Generic Associated Types and Const Generics both kind of fall into that category. The rate of true "new feature" development is way down.
- zerr 5y agoTo clarify, Scott never was a practicing programmer, but a book writer who capitalized on quirky details of C++. As he explained, there is less need of such books nowadays due to the vast availability of resources on the web.
- rramadass 5y agoRight; direct to the point! I never understood people's fascination for Scott Meyers books (and i own a lot of C++ books). I felt that it sort of clued you in to the microdetails/dark corners but failed to teach actual big picture programming using those same features.
- belter 5y agoTo say Scott Meyers never was a practicing programmer but just someone who capitalized on quirky details of C++... Its kind of like, saying Donald Knuth was never a Computer Programmer, but some old faculty professor, with too much time on his hands, who capitalizes on puzzles and the natural complexity of computational theory. :-) It also does not address the core point of the post. At the moment for C++ the scene goes like this: - For every traditionally challenging feature/issue of C++ advocates will say it has already been fixed on the latest standard. So you always feel to be a proper C++ developer you have to be a "Modern C++ Developer" - You are supposed to know and use the modern features of the language but also use it according to what I call "the C++ on top of C++" called the "C++ Core Guidelines". https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines I printed them last week and its a 498 pages PDF. So of course you will have wait and rely on compilers/linters keeping up with it. https://docs.microsoft.com/en-us/cpp/code-quality/using-the-cpp-core-guidelines-checkers?view=msvc-160 https://docs.microsoft.com/en-us/cpp/code-quality/using-the-... They are not done yet, and we will soon move to the next phase in complexity in the daily life of a C++ developer. Having to troubleshoot the correct implementation of these automated checks by the different automated tools. Like many, I have to sometimes use C++ professionally. Every time I do, I feel like I am a candidate to the Darwin Awards.
- zerr 5y ago