From the emboldened statement, can we presume that C and C++ are not "still being developed"?
Human languages are vague, and I'm not very proficient in English phraseology. Choosing proper words with the correct associations is
hard.
I meant "still being developed" in the sense of not being
feature-complete yet; being still in the development stage where changes to planned/designed features are still considered generally acceptable.
After a language is feature-complete, you stop
changing things, and instead only
extend and
increase specificity. I believe those extensions should be tried in practice first, preferably more than one implementation, before codified in a new version of the standard. Changes are reasonable only when they no longer affect widely available hardware; when they do not break existing code using widely available hardware.
For example, C could easily "fix" right-shifting negative values for two's complement types (
intN_t,
int_fastN_t,
int_leastN_t) by standardizing it the way all compilers that don't produce garbage do it (which is right shifting the storage bit pattern, duplicating the sign bit).
This is the right approach, because it has been shown in practice to work –– C99, C23, Fortran 95, Fortran 2003 for example.
In this sense, C is already feature-complete. Changes to the standard must not break existing code. Changes that codify implementation defined behaviour or even undefined behaviour, to how all "sane" compilers already implement them, or when one single behaviour makes sense and is useful on current hardware, are good. New keywords like
constexpr (C23) fix historical mistakes/issues (
const in particular), but do not break existing code; they are more like bugfixes that have been shown to be useful and acceptable to the vast majority of C users.
(
constexpr is a bit special, because while it hasn't been implemented by any
C compiler before inclusion in the standard, it was implemented in C++ in basically all compiler families that support both C and C++. So, while it doesn't fit into the literal "implemented by C compilers first" category and is more like an import from C++, the two languages are close enough for this kind of cross-importation to make sense. Another example is the C++11 memory model, and how GCC and Clang imported that for
C atomic built-ins, as the
sync built-ins Intel designed for Itanium that GCC supported just didn't cut the mustard on other architectures.)
I knew when I posted my previous post I wasn't expressing "still being developed" correctly, and am not sure I expressed it here much better. When Python 2 to 3 was done, I considered Python 2 to be feature-complete, and the change too great for a simple new version, and would rather have seen a new language been created (say,
Pythoff). In comparison, I see the changes from ISO C90 to C99, and from C99 to C23 (regardless of whether you consider C11 and/or C17 in between), as integrating the changes existing compilers had basically already implemented and agreed to. (Not
all, of course, but sufficient majority to show that they are preferable to users. And including the cross-importation from C++, which for the related features is close enough to C, for that to make sense as "prior art" if you will.)