On 6/4/13 1:16 AM, Manu wrote:Same fallacy all over again, for the third time in this thread. You keep on going about "breaking change" without recognizing that the now broken code was happily taking advantage of the very flexibility that you argue was useless and needed fixing.
But unlike the first situation, this is a breaking change. If you are
not the only user of your library, then this can't be done safely.
This is exactly the kind of argumentation that I disagree with, philosophically. Instead of carefully pondering the goods and the bads in a complex web of tradeoffs, it just clumsily gropes for the desired conclusion in ignorance of all that doesn't fit.
Fourth.If you write code like that, then write 'virtual:', it doesn't hurt
anyone else. The converse is not true.
I look at making methods final specifically for optimization. It
doesn't occur to me that the fact that it's overridable is a "leak"
in the API, it's at your own peril if you want to extend a class
that I didn't intend to be extendable. Like changing/upgrading
engine parts in a car.
Precisely, this highlights one of the key issues. Optimising has now
become a dangerous breaking process.
Fifth.
[snip]
Allow me to summarize my understanding of the most valuable parts your argument.
* At the top level you believe ultimate efficiency should be default and OOP flexibility should be opt-in.
* Classes routinely should make most methods final because it's hard to imagine why one would override all but a few. Since those are a minority, it's so much the better to make final the default.
* Even the most performance-conscious people would not care to annotate classes and methods. It just doesn't happen. In contrast, people who want flexibility will annotate things for the simple reason they have to, otherwise overriding won't work.
* You don't consider it a problem that one must go back to base classes and changing methods from final to overridable, whenever such a need arises.
(It would be awesome if you had a similar list with the opposite arguments.)
If the above is an accurate summary, I'd say it's a matter in which reasonable people might disagree. I take issue with each of the points above (not flat out disagree with each, more like amend and qualify etc).
Unless fresh arguments, facts, or perspectives come about, I am personally not convinced, based on this thread so far, that we should operate a language change.