2. mechanic is tied to call stack / stack unwinding
3. it feels natural when you're coming from C with `goto fail`
(yes it annoys me when I want to defer in a loop & now that loop body needs to be a function)
Since they didn't want to have a 'proper' RAII unwinding mechanism, this is the crappy compromise they came up with.