On Wednesday, 10 June 2015 at 18:13:53 UTC, Dave wrote:
On Wednesday, 10 June 2015 at 17:34:55 UTC, jmh530 wrote:
3) Immutability by default. Someone (somewhere) made an interesting point that it can be conceptually convenient to have the most restrictive choice as the default. I'm not sure I agree with that (maybe the most common choice used in good code), but at least immutability by default it can be helpful for concurrent programming.

I am one of those that think that a language should allow you to
do whatever you want, but be restrictive by default. For example
immutability unless you explicitly ask for mutability (like in
Rust). D sort of has the ability to do this, but it's sort of
backwards due to it's defaults. For instance D is mutable by
default (an inherited trait due to the C subset of the language),
with the ability to explicitly mark values as immutable. Another
backwards annotation is nothrow. I don't really care if something
doesn't throw, I care when it throws, because then I have to do
something (or my program may crash unexpectedly). Even if the
enforcement is kind of there (although unannotated functions can
do whatever), it would have been a better guarantee to disallow
this by default.

I usually agree that the more restrictive option should be the default, but exceptions is... well... the exception. The whole point of the exceptions system is to limit the number of points where you need to worry about something going wrong to the place where it happens and the places where you want to do something special with it. nothrow by default means you can't do that - you have to care about the exception at every single point in between. The result is a better syntax for the exact same thing the exceptions idiom was supposed to prevent...

Reply via email to