If you think that's the case, explain why I can't decide I want to pass an argument to a function in a register:
https://stackoverflow.com/q/58339165/1593077
Also, modern C++ has actually made it possible to write much more elegant code, for many delicate tasks, without sacrificing the performance benefits. So a convenient default doesn't necessarily have to contradict non-opinionated nature.
I am an old man, and so I remember when left and right every C++ programmer was excited about how the Standard Template Library was going to make everything OK and those of us who were still jeering would be writing C++ soon. How did that go?
Many will keep hating C++, while ignoring that Java, .NET (C#, F#, VB, C++/CLI), Python, JavaScript, PHP, Ruby,.... all suffer from similar complexity, spread around 30 - 40 years of language evolution and ecosystems.
Others will cling to their outdated toolchains because the language owners played a Python 3 on them.
While some will understand that the world isn't perfect and make do with what is out there.
An example is right in the name. Today we know that "clever" operators like the pair of ++ increment operators in C++ are a bad idea. They too easily allow mistakes to hide in plain sight, the programmer writes ++n where they actually needed n++ or vice versa, and a reviewer's brain overlooks this and so it gets shipped.
If you're playing Code Golf then these operators are a big benefit, but we aren't playing Code Golf, we're writing actual software that will be used in the real world, so explicitly spelling out what you meant is good.
As a result some modern languages deliberately do not have these operators. And e.g. as I understand it Swift actually removed these operators from the language. But C++ 20 still has both operators of course, it's just that your local dialect might forbid one or both of them.
Python 3 will stay in history as a canonical example of what happens when those wishes turn into reality.
https://www.ptc.com/en/products/developer-tools/perc
https://www.aicas.com/wp/products-services/jamaicavm/
On the other hand there is real time where even malloc() is forbidden.
According to the third link:
> we observed a negative correlation between MISRA rule violations and observed faults
So, MISRA isn’t really helping with real time at all.
The second link claims pauses are capped at 10us, which (if true) is actually competing with careful use of malloc.
It is real time enough to drive battleship weapon systems, the kind of apps where the wrong people die when a GC goes wrong.
https://www.ptc.com/en/blogs/plm/ptc-perc-virtual-machine-te...
Then there's "things will go wrong if there's a random 8msec delay".
Then there's "people will die and/or property will be destroyed if there's a random 8msec delay".
I was referring only to the last two. And yes, that means no malloc.
https://www.ptc.com/en/blogs/plm/ptc-perc-virtual-machine-te...
On any case, that is the reason why I started with depends, just like everyone wants to do big data that fits into a USB floppy, there are those cases where CircuitPython would be more than enough, yet people insist in using Assembly.
In some cases only Ada/SPARK or MISRA will do, others not, yet all of them might fall under real time and embedded deployment.
By contrast, using a DAW with typical settings, an 8 msec delay is catastrophic within the scope of the task, even though nobody gets hurt and nothing gets destroyed.