Date: Tue, 25 Nov 2025 07:06:06 +0100
> On Nov 24, 2025, at 10:24 AM, organicoman via Std-Proposals <std-proposals_at_[hidden]> wrote:
>
> -Wrong defaults
> -Hidden Implicit conversions
> -Verbosity
These 3 are actually what made C++ successful. It is not a choice of C++ per se, but of C. (IIRC Bjarne first tried to get rid of implicit conversions but users of C with classes complained.) C++ is successful because it is compatible with well-written C code. This allows to use C without any bridge and it allows to slowly migrate C code over to C++. If you want a language as successful as C++ you need to have the same compatibilities. You might even have to be compatible with C++. How do you get compatibility when you change these 3 things? Carbon is a new language that attempts exactly this (so, you yourself don’t actually have invent yet another new replacement language). However, there is no gradual transition: you need to rewrite full classes in Carbon to be able to use it. You cannot rewrite just a single member function. At least the rewritten class can be a drop-in replacement.
Bjarne Stroustrup once mentioned that in theory the source code you see is just the readable representation of the underlying abstract machine. In theory it is possible to change the representation. An IDE could just display the correct default. An IDE could also use a different syntax with maybe less verbosity to show the exact same code. It is hard to get rid of implicit conversions, though. Consistent brace initialization (and proper compiler flags) can help with this. I don’t see how any of this would break ABI. Forbidding implicit conversion would just stop code from compiling, but would not change the ABI, as well.
> -Proliferation of template meta programming
This is just a happy accident. Most programmers don’t have to learn this. It is mostly useful in libraries. And it is going to be replaced by reflection.
> -Criptic symbols for reflection....
I haven’t watched the video, but this is highly subjective. To be honest, all operators are cryptic: +, -, etc. are cryptic symbols if you don’t know math. | for OR is cryptic because it is not used in handwritten notation for logic. Increment/decrement are not common outside of programming. Why is ~ a bit complement? And why does != mean not equal? And why is ^ not exponentiation (or AND from logic)? Most symbols are cryptic. The new symbols for reflection will not be a problem.
>
> -Wrong defaults
> -Hidden Implicit conversions
> -Verbosity
These 3 are actually what made C++ successful. It is not a choice of C++ per se, but of C. (IIRC Bjarne first tried to get rid of implicit conversions but users of C with classes complained.) C++ is successful because it is compatible with well-written C code. This allows to use C without any bridge and it allows to slowly migrate C code over to C++. If you want a language as successful as C++ you need to have the same compatibilities. You might even have to be compatible with C++. How do you get compatibility when you change these 3 things? Carbon is a new language that attempts exactly this (so, you yourself don’t actually have invent yet another new replacement language). However, there is no gradual transition: you need to rewrite full classes in Carbon to be able to use it. You cannot rewrite just a single member function. At least the rewritten class can be a drop-in replacement.
Bjarne Stroustrup once mentioned that in theory the source code you see is just the readable representation of the underlying abstract machine. In theory it is possible to change the representation. An IDE could just display the correct default. An IDE could also use a different syntax with maybe less verbosity to show the exact same code. It is hard to get rid of implicit conversions, though. Consistent brace initialization (and proper compiler flags) can help with this. I don’t see how any of this would break ABI. Forbidding implicit conversion would just stop code from compiling, but would not change the ABI, as well.
> -Proliferation of template meta programming
This is just a happy accident. Most programmers don’t have to learn this. It is mostly useful in libraries. And it is going to be replaced by reflection.
> -Criptic symbols for reflection....
I haven’t watched the video, but this is highly subjective. To be honest, all operators are cryptic: +, -, etc. are cryptic symbols if you don’t know math. | for OR is cryptic because it is not used in handwritten notation for logic. Increment/decrement are not common outside of programming. Why is ~ a bit complement? And why does != mean not equal? And why is ^ not exponentiation (or AND from logic)? Most symbols are cryptic. The new symbols for reflection will not be a problem.
Received on 2025-11-25 06:06:20
