Etienne Gagnon wrote:
Also, I would like to think about the VMI with the view of a "pure" virtual machine implementor, not that of a binary compiler implementor or that of a hybrid system implementor. It would just be more fun for me. I already don't like much working on VMI and class libraries; I might as well try to make it as enjoyable as possible.
That makes sense.. i.e., if you want to make it into something of a research project to define the best possible Java/VM API then I'd be interested in that as well. Of course this will take more work. First of course is defining what the goals and priorities are (if your goal were to do it quickly, then re-using the existing Classpath API would be the best option imho). In any case, there is lots of remaining Java code lying just above this API to be written. Doing so will naturally bring up those questions about the right way to define the VM API. Do you have any general guiding thoughts? E.g. we both agree that doing stuff in Java whenever possible and reasonable is better. What else? Some interesting areas to think about.. - Class loading. Can maintenance of initialized and/or derived types trees be done in Java? Loading constraints? Etc. - VM private data structures: could more of these be stored in byte[] arrays, so that Java code can just pass the byte[] array to native code where appropriate? - Class initialization: SableVM already does this in Java I think. - Threads - Exceptions - Stack walking - GC: any Java possibilities here? - Bytecode verification The more you "push down" the more it starts to get into the "VM written in Java" concept a la Jikes RVM. Another idea: the VM API is just POSIX (or some subset), and you have some way to manipulate (pack/unpack) C types via Java. Yet another idea (from JCVM): mix/embed C code in Java code analgous to the way GCC's asm() statement embeds assembly into C code, then auto-gen all the VM's native methods. "Etc." -Archie __________________________________________________________________________ Archie Cobbs * CTO, Awarix * http://www.awarix.com