The unsafe language argument of the first paragraph doesn't hold. You can design you API such that handles are copied by value, and opaquely contain pointer. Usually the handle IS the pointer, but it doesn't have to be this way. When you do this, you are able to perform exactly the same kinds of memory operations that a virtual machine would perform.