On Fri, Nov 27, 2020 at 01:36:00PM +0300, Paul Sokolovsky wrote:
So, the alternative opinion you hear is that we could allow *optional* block-level scoping.
No such thing.
Even if I don't use it myself, I still have to read code that uses it, I need to learn about it, there will surely be times I'm required to maintain someone else's code that uses it. When I'm answering people's questions, or teaching newbies, I still have to deal with this.
If I'm reviewing a colleague's code, I'll probably see it. If I ask for help on some web forum, I'll probably get solutions that involve this feature.
If it has implementation costs, in the size of the interpreter, or runtime costs, I pay those costs whether I use the feature myself or not. There are opportunity costs: every minute a developer is implementing or maintaining this feature is a minute that they aren't working on something else.
I can't opt out of the costs of new features, even if I don't use them myself. This is why we have a duty to try to ensure that new features have more benefits than costs.
This might not be a particularly high bar to reach: if the implementation is simple, the maintenance needs negligible, the runtime costs small, and the concept turns out to be easier to learn and teach than I expect, then the required benefits needed to give a positive balance are likewise reduced.
Or on the other hand, it might be that the benefits are small and rare, and the costs large and significant.
The hard cases are when the pros and cons are of comparable size and it comes down to a personal judgement which is bigger.