4 ms·
I notice more and more pushes to 'improve' C and turn it into something it should not become. I feel like the C++ community gave up on C++ because of the growi
by guillaumec 2y ago
I notice more and more pushes to 'improve' C and turn it into something it should not become. I feel like the C++ community gave up on C++ because of the growing complexity and so turned to C with the hope of adding to it the good parts of C++ without the ugliness. But this is of course hopeless: every added feature will create new issues that will be solved with new features until the language becomes too complex for anyone to fully understand.
- fch42 2y agoThe part in it that I don't understand is ... Again, "traditionally", one could (ab)use C++ as "C with extras". And it wasn't uncommon, especially in resource constraint usecases, to do just that. C++ without STL or templates, or even C++ without new/delete. This "is not C++", agree. Would a subset be enough for "using it like C-with-RAII" ? Given the details and pitfalls the original author lists, I suspect not. It's not just C programmers who "do strange things" and make odd choices. The language itself though "lends itself to that". I've (had to) write code that sometimes-alloca'ed sometimes-malloc'ed the same thing and then "tagged" it to indicate whether it needed free() or "just" the implied drop. Another rather common antipattern is "generic embedded payloads" - the struct definition ending "char data[1]" just to be padded out by whatever creates it to whatever size (nevermind type) of that data. Can you write _new_ C code that "does RAII" ? Probably. Just rewrite it in rust, or zig :-) Can you somehow transmogrify language, compiler, standard lib so that you can recompile existing C code, it not to "just get RAII" then at least to give you meaningful compiler errors/warnings that tell you how to change it ? I won't put money on that.
- actionfromafar 2y agoNew/delete were never that great to begin with and have now fallen out of style. Also, C++ is quite useful and powerful even without STL. https://www.youtube.com/watch?v=rX0ItVEVjHc https://www.youtube.com/watch?v=rX0ItVEVjHc A classic which touches on such stuff.
- bluetomcat 2y ago> Can you write _new_ C code that "does RAII" ? Probably. You can do "manual" goto-based RAII in C, and it has been done for decades. The end of your function needs to have a cascading layer of labels, undoing what has been done before: if (!(x = create_x())) { goto cleanup; } if (!(y = create_y())) { goto cleanup_x; } if (!(z = create_z())) { goto cleanup_y; } do_something(x, y, z); cleanup_z: destroy_z(z); cleanup_y: destroy_y(y); cleanup_x: destroy_x(x); cleanup: return; It just takes more discipline and is more error-prone maintenance-wise.
- gpderetta 2y agoexcept this misses the point of RAII.
- rcxdude 2y agoThat's not RAII, that's 'defer'. defer and context managers are both implementations of a subset of the kind of functionality you can get with RAII (the two missing parts are 1) allowing you to place an RAII object in part of a larger structure and have confidence it will actually be constructed and destructed correctly, and 2) allowing the representation of lifetimes which are more complex then just 'in this scope' via moves and copies).
- jandrewrogers 2y agoThe STL is pretty dispensable in my experience, even for people doing full-blown modern C++, and C++20 has made that particularly obvious. The most useful feature somewhat unique to C++ is the extensive metaprogramming facility, which only recently became non-arcane.
- dgellow 2y agoCould you be more specifics? What improvements do you mean? It’s not clear if you’re talking about defer or RAII
- raydev 2y ago> until the language becomes too complex for anyone to fully understand Like C, with its many hidden behaviors?
- tempodox 2y agoNot hidden, the C standard spells it out. And implementation-defined behavior can be observed.
- uecker 2y agoWhat hidden behaviors? The only hidden behaviors I can think of which are somewhat problematic in C are implicit value-changing conversions. But one can instruct compilers to diagnose those.