Thanks for the links! Alex's finalize patch really feels like it ought to be posted somewhere more visible -- from what I can tell, it looks like a fairly nice implementation.
Yeah, I concur. If you're going to add a new exception handling feature to the language, I think the semantic to choose would be something like Alex's finalize -- a convenient, exception-safe way of releasing resources.
Unfortunately, implementing resource cleanup in vanilla C is expensive. I haven't looked carefully at Alex's implementation, but, from his notes, it sounds like every entrance into a scope containing finalizers will require a luaD_pcall. So while the patch can often save you the cost of creating temporary closures, there's still quite of bit of implied overhead.
Piggybacking on C++ destructors, for those of us who have the option, still feels likely to be a better way of solving the same problem. Compared to nested luaD_pcalls, stack unwinding should be relatively cheap; and writing a handful of C++ resource wrappers is far easier than trying to maintain such a significant Lua mod.