request switch statement with common block

Jonathan M Davis jmdavisProg at gmx.com
Sat Aug 3 13:33:44 PDT 2013


On Saturday, August 03, 2013 12:35:22 H. S. Teoh wrote:
> On Sat, Aug 03, 2013 at 12:22:53PM -0700, Walter Bright wrote:
> > On 8/3/2013 12:00 PM, JS wrote:
> > >What I really don't get it is why people think that just because they
> > >won't use such a feature then it must be useless to everyone else.
> > 
> > You could provide supporting evidence by examining every use of
> > switch in the dmd, phobos, and druntime source code, and see what
> > percentage of those would benefit from your proposal.
> > 
> > Consider, for example, the scope guard statement in D. It is
> > extremely useful - but it is an unusual form (doesn't exist in other
> > languages) and programmers just don't think in those terms. Andrei &
> > I constantly have to work at 'selling' the benefits of it. It still
> > hasn't really caught on.
> 
> At least it has caught on with me. :) After learning about scope guards
> in D, I've been plagued with persistent thoughts of "I wish I could use
> a scope guard here!" every time I work with C/C++ code.
> 
> Ironically, though, D's superior design has pretty much eliminated the
> need for scope guards except in a few rare cases. :-P  They used to be
> still useful for things like closing files at the end of the block, but
> struct dtors have pretty much eliminated that use case as well.

I'm surprised that you'd miss scope in C++ and yet not use it in D. The only 
thing that's really missing from C++ that D has that you might use in place of 
scope is finally. C++ has RAII just like  D does. There's a much bigger 
difference when comparing against languages which don't have RAII (such as Java 
or C#), but with C++ has RAII.

In general, I think that it comes down to a question of whether RAII or 
scope(exit) is more appropriate, and RAII works better in common cases (such 
as closing files or releasing a mutex), wheras scope(exit) works better in 
cases which aren't common (since it doesn't make sense to create types just 
for those cases). RAII also makes more sense in cases where you essentially 
need a reference count before doing the action rather than just when exiting 
the scope (e.g. closing files is also a good example of that; a File struct is 
more flexible than using scope(exit) to close the file).

I definitely use scope from time to time, but I don't know how frequently I use 
it in comparison to how often I should use it. I was actually using 
scope(success) more until someone pointed out that there's an efficiency hit 
with that as it was putting try-catch blocks in places where there wouldn't 
have been before (as opposed to scope(exit) or scope(failure) where you'd be 
using try-catch blocks if you weren't using scope).

- Jonathan M Davis


More information about the Digitalmars-d mailing list