X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=web%2Fruntime;h=d1dabab996859a2a487b5fa71da0898941fc91be;hb=bbe1510f778972449edfffd64ac78b61ee776009;hp=6c04b7c2ee9f63887f2dad8c51232648ebca9d65;hpb=613137c6d5d05d4535cba0c5e29f081411d8647c;p=mono.git
diff --git a/web/runtime b/web/runtime
index 6c04b7c2ee9..d1dabab9968 100644
--- a/web/runtime
+++ b/web/runtime
@@ -1,70 +1,105 @@
* 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.
+
+ 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.
We currently have two runtimes:
+ * mono: Our Just-in-Time and Ahead-of-Time code
+ generator for maximum performance. This supports
+ x86, PowerPC and SPARC cpus.
+
* mint: The Mono interpreter. This is an
easy-to-port runtime engine.
-
- * mono: The Just In Time compiler implemented
- using a BURS instruction selector
- Currently both runtimes are missing garbage collection. We
- are planning on using the ORP GC engine and deploy it by
- middle January.
+ 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).
-** Executing MSIL/CIL images
+ Embedding the Mono runtime allows applications to be extended
+ in C# while reusing all of the existing C and C++ code.
- The code will load an executable and map the references to
- external assemblies to our own version of the assemblies on
- Linux.
+ Paolo Molaro did a presentation on the current JIT engine and
+ the new JIT engine. You can find his slides
+ here
- Our roadmap looks like this, this has been updated as of
- Dec 18, 2001:
+** 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:
+ * Ahead-of-time compilation.
+
+ The idea is to allow developers to pre-compile their code
+ to native code to reduce startup time, and the working
+ set that is used at runtime in the just-in-time compiler.
+
+ Although in Mono this has not been a visible problem, we
+ wanted to pro-actively address this problem.
- * Milestone 1: Done Fully read and parse all CIL byte-codes
- and metadata tokens (ie, a disassembler).
+ When an assembly (a Mono/.NET executable) is installed in
+ the system, it would then be possible to pre-compile the
+ code, and have the JIT compiler tune the generated code
+ to the particular CPU on which the software is
+ installed.
- * Milestone 2: Done Complete an interpreter for CIL byte
- codes. This interpreter can be used temporarly to
- run CIL byte code on a system where no JIT is
- available.
+ This is done in the Microsoft.NET world with a tool
+ called ngen.exe
- * Milestone 3: DoneDefine an lburg-like
- instruction selector for the JITer for Intel.
+ * Have a good platform for doing code optimizations.
- * Milestone 4: Done Implement JITer. This is where our
- current efforts are focused on, the JITer currently runs
- all of the code we have tested on it. The major limitation
- is that our class libraries are not complete, and hence not
- every application can be ran.
+ The design called for a good architecture that would
+ enable various levels of optimizations: some
+ optimizations are better performed on high-level
+ intermediate representations, some on medium-level and
+ some at low-level representations.
- * Milestone 5: Port of the JITer to non IA32 systems.
+ Also it should be possible to conditionally turn these on
+ or off. Some optimizations are too expensive to be used
+ in just-in-time compilation scenarios, but these
+ expensive optimizations can be turned on for
+ ahead-of-time compilations or when using profile-guided
+ optimizations on a subset of the executed methods.
+
+ * Reduce the effort required to port the Mono code
+ generator to new architectures.
+
+ For Mono to gain wide adoption in the Unix world, it is
+ necessary that the JIT engine works in most of today's
+ commercial hardware platforms.
- A setup similar to the Kaffe JIT engine will 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 (mostly we use GNU make in
- a few of the makefiles).
+
+ * Opcode cost estimates (our architecture allows
+ us to generate different code paths depending
+ on the target CPU dynamically).
+
+ * Inlining.
-** JIT Engine (updated, Dec 18th, 2001)
+ * Constant folding, copy propagation, dead code elimination.
- The JIT engine uses a code-generator generator approach for
- compilation. Given the properties of CIL byte codes, we can
- take full advantage of a real instruction selector for our
- code generator.
+ Although compilers typically do
+ constant folding, the combination of inlining with
+ constant folding gives some very good results.
+
+ * Linear scan register allocation. In the past,
+ register allocation was our achilles heel, but now
+ we have left this problem behind.
+
+ * SSA-based framework. Various optimizations are
+ implemented on top of this framework
+
There are a couple of books that deal with this technique: "A
Retargetable C Compiler" and "Advanced Compiler Design and
@@ -72,7 +107,13 @@
technical description of lbrug.
- A few papers that describe the instruction selector:
+ 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:
* A code generation interface for ANSI C
@@ -84,14 +125,11 @@
** Garbage Collection
- We will be using the Intel ORP GC engine as it provides a precise
+ 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.
-
- 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.
+ .NET environment.
* Garbage collection list and FAQ:
@@ -115,7 +153,7 @@
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 been working on the Mono abstraction layer
+ Dick Porter has developed WAPI: the Mono abstraction layer
that allows our runtime to execute code that depend on this
behaviour.
@@ -144,4 +182,23 @@
as well as talking to system libraries.
Initially we used libffi, but it was fairly slow, so we have
- reused parts of the JIT work to create efficient PInvoke trampolines.
+ reused parts of the JIT work to create efficient PInvoke
+ trampolines.
+
+** Remoting
+
+ Mono has support for remoting and proxy objects, just like
+ .NET does. The runtime provides these facilities.
+
+** Porting
+
+ If you are interested in porting the Mono runtime to other
+ platforms, you might find the pre-compiled Mono regression test
+ suite useful to debug your implementation.
+
+* COM and XPCOM
+
+ We plan on adding support for XPCOM on Unix and COM on Microsoft
+ Windows later in our development process.
+