X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=web%2Fruntime;h=d1dabab996859a2a487b5fa71da0898941fc91be;hb=e10944de6e1791e1c86aea012db91ea110ddfa19;hp=2d9dec9d25acf041214c98558a37880b097e1f54;hpb=d0816bbaf5735af5462c36dbb0fc299ed97ba81e;p=mono.git diff --git a/web/runtime b/web/runtime index 2d9dec9d25a..d1dabab9968 100644 --- a/web/runtime +++ b/web/runtime @@ -1,96 +1,135 @@ * The Mono runtime - The Mono runtime will implement the JIT engine (and a byte - code interpreter for quickly porting to new systems), the - class loader, the garbage collector, threading system and - metadata access libraries. + The Mono runtime engine is considered feature complete. - Currently the runtime has an image loader and metadata access - entry points. The runtime comes with a simple interpreter - that can execute very simple programs. + It implements a Just-in-Time compiler engine for the CIL + virtual machine, the class loader, the garbage collector, + threading system and metadata access libraries. -** Executing MSIL/CIL images + We currently have two runtimes: - The code will load an executable and map the references to - external assemblies to our own version of the assemblies on - GNU/Linux. + + + We are using the Boehm conservative garbage collector. + + The Mono runtime can be used as a stand-alone process, or it + can be embedded into applications (see + the documentation in mono/samples/embed for more details). - Our roadmap looks like this, this has been updated as of - Jul 15, 2001: + Embedding the Mono runtime allows applications to be extended + in C# while reusing all of the existing C and C++ code. + + Paolo Molaro did a presentation on the current JIT engine and + the new JIT engine. You can find his slides + here + +** Current JIT Engine: technical details (updated, June 28th, 2003) + + We have re-written our JIT compiler. We wanted to support a + number of features that were missing: - A setup similar to the Kaffe JIT engine can be used to - layout the code to support non-IA32 architectures. Our work - will be focused on getting a IA32 version running first. + The JIT engine implements a number of optimizations: - The JIT engine should work on Linux and Win32, although you - will need to install the CygWin32 development tools to get a - Unix-like compilation environment. + There are a couple of books that deal with this technique: "A Retargetable C Compiler" and "Advanced Compiler Design and Implementation" are good references. You can also get a technical description of lbrug + href="http://research.microsoft.com/copyright/accept.asp?path=http://www.research.microsoft.com/~drh/pubs/iburg.pdf&pub=ACM">lbrug. - Previously we had looked at a number of JIT engines and tools, - but they would not take full advantage of the CIL properties: + The new JIT engines uses three intermediate representations: + the source is the CIL which is transformed into a forest of + trees; This is fed into a BURS instruction selector that + generates the final low-level intermediate representation. + + The instruction selector is documented in the following + papers: ** Garbage Collection - We have decided to implement a generational tracing garbage - collector, which is very similar to the one being used by - .NET. For an introduction to the garbage collection system - used by Microsoft's CLR implementation, you can read this book - on Garbage - Collection. - - Although using a conservative garbage collector like Bohem's - would work, all the type information is available at runtime, - so we can actually implement a better collector than a - conservative collector. + We are using the Boehm conservative GC. We might consider + adopting other GC engines in the future, like the Intel ORP GC + engine. The Intel ORP GC engine as it provides a precise + garbage collector engine, similar to what is available on the + .NET environment. +** IO and threading + + The ECMA runtime and the .NET runtime assume an IO model and a + threading model that is very similar to the Win32 API. + + Dick Porter has developed WAPI: the Mono abstraction layer + that allows our runtime to execute code that depend on this + behaviour. + ** Useful links Paolo Molaro found a few interesting links: