> Why didn't they go with `defer` which is the more ergonomic and established pattern?
Neither statement is true.
> `defer` also doesn't need to change the API of thousands of objects to use it
Callbacks can trivially be bridged to `using`:
using _cb = {[Symbol.dispose]: yourCallbackHere};
There is also built-in support for cleanup callbacks via the proposal’s DisposableStack object.> or for things that are not objects
This is javascript. Everything of note is an object. And again, callbacks can trivially be bridged to using