Clojure has all the properties of a modern lisp. It compiles into java bytecode and keeps data and code separate. This is not possible to do with the .NET CLR bytecode representation because of the way it handles unsafe pointers, but it should be corrected in the next edition of LLVM.