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

Reply via email to