On 25-Nov-2003, Chris Lattner <[EMAIL PROTECTED]> wrote: > On Tue, 25 Nov 2003 [EMAIL PROTECTED] wrote: > > Well, I guess the most important question would be: How hard could it be > > to make it [LLVM] target IL code? > > Here's the response I sent to Miguel: > > While possible, it would be _very_ difficult. LLVM code is more > expressive/low-level than CIL code: for example array bounds checks are > not implicit, and there is no object model. I'm not sure exactly how you > would map general C programs onto the managed runtime at least, much less > general LLVM programs.
LLVM should map to *unverifiable* CIL without too much difficulty, I think. Well, actually you'd map to a subset of that: you wouldn't use the object model instructions at all. It's mostly fairly straight-forward to map general C programs onto unverifiable CIL. Casting a pointer to int or vice versa is easy, just push as one type and pop as another. Pointer arithmetic is just integer addition. The C heap is unmanaged memory which can be allocated either as a global array or using OS-specific code. There are some tricky parts, such as volatile and setjmp/longjmp, but these are not insurmountable hurdles -- they can be handled, it just requires a little more cleverness. > The best way to do this would be to make a _new_ C/C++ compiler like > Microsoft did, which adds language restrictions for managed mode. Microsoft's C++ compiler, and lcc, and the C compiler in Portable.NET can all compile almost every C construct to unverifiable IL. I don't know if any of them handle volatile properly, and AFAIK none of them handle setjmp/longjmp. But that's just lack of development resources. -- Fergus Henderson <[EMAIL PROTECTED]> | "I have always known that the pursuit The University of Melbourne | of excellence is a lethal habit" WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp. _______________________________________________ Mono-list maillist - [EMAIL PROTECTED] http://lists.ximian.com/mailman/listinfo/mono-list
