Do they? I mean, do prototypes change?
They very much do. Design changes, arguments change. I agree it doesn't happen too often (usually), but it does.
new prototypes get added, but existing ones usually don't change, because of the possibility of existing code using the old interface.
If the project has been published and in wide use, yes. But how about small projects? Rapid prototypes, pre-release? Internal interfaces? etc. What should I maintain compatibility with?
"Change is the only thing that is constant" (c) not sure about source and exact wording.
It was designed to be as compatible to C as possible.
Where does that break downward compatibility? Sure the new code won't work with plain-C compilers, but neither will methods, namespaces and lots of other things.
would C++ have been as successful if it had been significantly different than C?
How does that make it significantly different more than, say, type overloading or any other C++ feature? You just can't compile these things in C mode, period. Not without expressing them in terms C can understand.
Means, no-one can look at the function prototypes at a glance
You can copy the prototype anywhere as a comment, for the sake of documentation.
Or make duplicating a prototype _optional_.
Or allow a stand-alone precondition on the prototype, so you can put it anywhere it if it pleases you. (even in the user code)
This does it for documentation _and_ can be used to raise the red flag when the prototype changes and you forget to update it at a body. (Instead of silently compiling it with the old prototype and then producing an obscure linker error)
Ok, the way C/C++ does it with separate prototypes and bodies accomplishes that (mostly), but only for the bodies, and you get no choice, whether you need this or not.
I tend to take a language as-is, and try not to fall for the "you can write FORTRAN in any language" kind of mindset.
Are you saying that existing languages are final and no new ones should ever be created?
I've been taking languages "as-is" for some time now, and I'm fed up with all the little things combined.
FYI, it's not FORTRAN, far from it. Nor a laboratory language. It is intended to replace C/C++ and to be as practical (more so), barring immediate compatibility and general acceptance. How's that for FORTRAN?
I agree, C++ is what it is, generally accepted and all, no one argues. But that doesn't mean I have to stick with it. New OS, new language, new everything.