On 20-Mar-2016 02:16, Xinok wrote:
I stumbled upon an example demonstrating defer in Go which I thought was
interesting. Defer is similar to scope in D except they're called at end
of function rather than end of scope; you can queue multiple defer calls
by writing them inside of a loop. This implies that it internally builds
a stack of delegates which are then executed LIFO once the function
returns (or panics).
https://tour.golang.org/flowcontrol/13
I think a library solution is elegant enough that it doesn't need to be
built into the language but that doesn't mean it needs to be in Phobos
either. Does anybody have a use case for "defer" that isn't already
adequately covered by scope statements?
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.
--
Dmitry Olshansky