The MSIL and JVML bytecode lack higher-order instructions. In other words no instructions allow you to treat instructions as data. It seems many people think that to add such a feature would incur a huge overhead, and force one to use dynamically typed (or untyped if you prefer) techniques. Anyway, this is what some recent posts on Lambda-the-Ultimate.org would seem to indicate.
This is precisely what Cat is about, adding higher-order instructions to stack-based languages in a type-safe manner. That means that the stack configuration can be statically determined in advance, and byte-code verifiers (which are simply type-checkers) can verify that the code is safe. It can also be done efficiently.
It is very eye-opening that after all of my posts on Lambda the Ultimate about Cat, that one rather important fact wasn’t caught by many readers. I also thought it was so was a completely obvious fact that you can add higher order functions to a stack-based language in a type-safe manner. This is the problem of research, you get so wrapped up in something, you forget what other people know, don’t know, or think they know.
Looks like I am going to have to write another paper. :-)