3 ms·
I think pjmpl is referencing apis like this: with_file "hello.txt" (fun fd -> (* do stuff *) ) where you've basically created a c++ destructor style api wi
by zenhack 9y ago
I think pjmpl is referencing apis like this:
with_file "hello.txt" (fun fd -> (* do stuff *) )
where you've basically created a c++ destructor style api with a lambda.
It's certainly not "verification" in any formal sense, and the type system can't help you there any more than it can in c++.
But this is a perfectly reasonable pattern.
- catnaroek 9y ago> where you've basically created a c++ destructor style api with a lambda. Except for the part where destructors are meant to be called no more than once per object, at the end of its lifetime. All that you can guarantee is that `with_file` doesn't call the destructor more than once. But that's not terribly interesting.
- zenhack 9y agoYou can screw up destructors in exactly the same ways. And it also serves to make sure you close the file at all. But again hence the value of having the lifetime of the object enforced by the type system.
- catnaroek 9y agoIn the presence of reference-counted mutable objects, destructors no longer guarantee that cleanup will happen. But that much is okay. This is a liveness property, and, as far as I can tell, nobody really knows of any non-annoying way to enforce liveness properties with types. On the other hand, “cleanup is the last operation that can be performed on an object” is a safety property, and types are excellent tools for verifying properties of this kind.
- pjmlp 9y agoYep, that was it. Thanks for the example.