On Monday, 21 March 2016 at 17:46:05 UTC, Dmitry Olshansky wrote:
...
The main use case in Go that needs it specifically as a
function level primitive is this:
files := []File{}
for i := paths {
files[i], err := os.Open(paths[i])
if err != nil {
return errors.Errorf("Failed to open %s", paths[i])
}
defer files[i].Close()
}
... // lots of code using files
So in a nutshell - lack of RAII while operating on collections
of resources.
D and Go have different mechanisms for handling
errors/exceptions. I'll refrain from debating "A is better than
B" but I haven't seen any use case which isn't already adequately
covered by the existing mechanisms in D.
However, one thing I do find inferior is the inability of D
lambdas to capture by value. Thus, the simple example of
"writeln(i)" may produce unexpected results.
@Nick: https://github.com/Xinok/scrapheap/blob/master/defer.d