<div class="gmail_quote">On Mon, Jun 7, 2010 at 11:19 AM, Walter Bright <span dir="ltr">&lt;<a href="mailto:newshound1@digitalmars.com">newshound1@digitalmars.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Adam Ruppe wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
That sucks hard. I prefer it to finally{} though, since finally<br>
doesn&#39;t scale as well in code complexity (it&#39;d do fine in this case,<br>
but not if there were nested transactions), but both suck compared to<br>
the scalable, beautiful, and *correct* elegance of D&#39;s scope guards.<br>
</blockquote>
<br>
I agree. D&#39;s scope statement looks fairly innocuous and one can easily pass it by with &quot;blah, blah, another statement, blah, blah&quot; but the more I use it the more I realize it is a<br>
<br>
        game changer<br>
<br>
in how one writes code. For example, here&#39;s the D1 implementation of std.file.read:<br>
<br>
-------------------------------------------------------------<br>...</blockquote><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">----------------------------------------------------------<br>


<br>
Note the complex logic to recover and unwind from errors (none of the called functions throw exceptions), and the care with which this is constructed to ensure everything is done properly. Contrast this with D2&#39;s version written by Andrei:<br>


<br>...<br>
The code is the same logic, but using scope it is dramatically simplified. There&#39;s not a single control flow statement in it! Furthermore, it is correct even if functions like CloseHandle throw exceptions.<br>
</blockquote></div><br><div><br></div><div>Hmm, but I can actually understand your code.  :-( </div><div><br></div><div>--bb</div>