Hi, I'm Rhys Weatherley, the author of Portable.NET, which is part of the DotGNU project. (Put down that flame thrower! I come in peace. :-) )
DotGNU is currently reaching out to other projects in the OSS/FS world to see how we can help you and how you might be able to help us. One of the projects that we are looking into is compiling C# to Parrot bytecode, so that perhaps people in the Parrot community may in turn be interested in helping us complete our compiler and system library. The Portable.NET C# compiler, cscc, is very extensive, and is capable of generating output for multiple bytecode formats (IL and JVM are currently supported, more or less). I'm aware of Cola, but I know from bitter experience that the hardest part of C# is parsing and semantic analysis, which we've already got working. So we may be able to help you on that front. We also have the beginnings of a C->bytecode compiler. So much for the high level stuff. Getting technical ... I'm a bit confused as to how one creates a user-defined class in Parrot, and makes virtual method calls, accesses fields, and what-not. I can't seem to find a good example (Cola does non-virtual methods only at present). Is there a convention for which registers must be saved across a call and which can be clobbered? Using the saveall/restoreall convention and passing all values on the stack doesn't seem terribly efficient. But maybe I'm missing something? Is the JIT smart enough to optimize away unnecessary copies? What is the size of the "int" type? Will it always be 32 bit or is it "whatever is best for the machine"? And how do I perform a "sign extend" operation? Is there some means to store and access auxillary data in a Parrot bytecode file? I might need this to store metadata for supporting C# reflection. We in DotGNU should be able to bang out C#->Parrot fairly quickly, if we can resolve the above issues. Cheers, Rhys. http://www.southern-storm.com.au/portable_net.html http://www.dotgnu.org/