| The 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. |
https://www.youtube.com/watch?v=rX0ItVEVjHc
A classic which touches on such stuff.