1、Advantages of Managed Code Microsoft intermediate language shares with Java byte code the idea that it is a low-level language with a simple syntax (based on numeric codes rather than text), which can be very quickly translated into native machine code. Having this well-defined universal syntax for
2、code has significant advantages. Platform independence First, it means that the same file containing byte code instructions can be placed on any platform; at runtime the final stage of compilation can then be easily accomplished so that the code will run on that particular platform. In other words,
3、by compiling to IL we obtain platform independence for .NET, in much the same way as compiling to Java byte code gives Java platform independence. You should note that the platform independence of .NET is only theoretical at present because, at the time of writing, a complete implementation of .NET
4、is only available for Windows. However, there is a partial implementation available (see for example the Mono project, an effort to create an open source implementation of .NET, at www.go- Performance improvement Although we previously made comparisons with Java, IL is actually a bit more ambitious
5、than Java byte code. IL is always Just-In-Time compiled (known as JIT compilation), whereas Java byte code was often interpreted. One of the disadvantages of Java was that, on execution, the process of translating from Java byte code to native executable resulted in a loss of performance (with the e
6、xception of more recent cases, where Java is JIT compiled on certain platforms). Instead of compiling the entire application in one go (which could lead to a slow start-up time), the JIT compiler simply compiles each portion of code as it is called (just-in-time). When code has been compiled once, t
7、he resultant native executable is stored until the application exits, so that it does not need to be recompiled the next time that portion of code is run. Microsoft argues that this process is more efficient than compiling the entire application code at the start, because of the likelihood that larg
8、e portions of any application code will not actually be executed in any given run. Using the JIT compiler, such code will never be compiled. This explains why we can expect that execution of managed IL code will be almost as fast as executing native machine code. What it doesnt explain is why Micros
9、oft expects that we will get a performance improvement. The reason given for this is that, since the final stage of compilation takes place at runtime, the JIT compiler will know exactly what processor type the program will run on. This means that it can optimize the final executable code to take ad
10、vantage of any features or particular machine code instructions offered by that particular processor. Traditional compilers will optimize the code, but they can only perform optimizations that are independent of the particular processor that the code will run on. This is because traditional compiler
11、s compile to native executable before the software is shipped. This means that the compiler doesnt know what type of processor the code will run on beyond basic generalities, such as that it will be an x86-compatible processor or an Alpha processor. Visual Studio 6, for example, optimizes for a gene
12、ric Pentium machine, so the code that it generates cannot take advantage of hardware features of Pentium III processors. On the other hand, the JIT compiler can do all the optimizations that Visual Studio 6 can, and in addition it will optimize for the particular processor the code is running on. La
13、nguage interoperability The use of IL not only enables platform independence; it also facilitates language interoperability. Simply put, you can compile to IL from one language, and this compiled code should then be interoperable with code that has been compiled to IL from another language. Youre pr
14、obably now wondering which languages aside from C# are interoperable with .NET, so lets briefly discuss how some of the other common languages fit into .NET. Visual Basic .NET Visual Basic .NET has undergone a complete revamp from Visual Basic 6 to bring it up-to-date with .NET. The way that Visual
15、Basic has evolved over the last few years means that in its previous version, Visual Basic 6, it was not a suitable language for running .NET programs. For example, it is heavily integrated into COM and works by exposing only event handlers as source code to the developer most of the background code
16、 is not available as source code. Not only that, it does not support implementation inheritance, and the standard data types Visual Basic 6 uses are incompatible with .NET. Visual Basic 6 was upgraded to Visual Basic .NET, and the changes that were made to the language are so extensive you might as
17、well regard Visual Basic .NET as a new language. Existing Visual Basic 6 code does not compile as Visual Basic .NET code. Converting a Visual Basic 6 program to Visual Basic .NET requires extensive changes to the code. However, Visual Studio .NET (the upgrade of VS for use with .NET) can do most of
18、the changes for you. If you attempt to read a Visual Basic 6 project into Visual Studio .NET, it will upgrade the project for you, which means that it will rewrite the Visual Basic 6 source code into Visual Basic .NET source code. Although this means that the work involved for you is heavily cut dow
19、n, you will need to check through the new Visual Basic .NET code to make sure that the project still works as intended because the conversion might not be perfect. One side effect of this language upgrade is that it is no longer possible to compile Visual Basic .NET to native executable code. Visual
20、 Basic .NET compiles only to IL, just as C# does. If you need to continue coding in Visual Basic 6, you may do so, but the executable code produced will completely ignore the .NET Framework, and youll need to keep Visual Studio 6 installed if you want to continue to work in this developer environmen
21、t. Visual C+ .NET Visual C+ 6 already had a large number of Microsoft-specific extensions on Windows. With Visual C+ .NET, extensions have been added to support the .NET Framework. This means that existing C+ source code will continue to compile to native executable code without modification. It als
22、o means, however, that it will run independently of the .NET runtime. If you want your C+ code to run within the .NET Framework, then you can simply add the following line to the beginning of your code: #using You can also pass the flag /clr to the compiler, which then assumes that you want to compi
23、le to managed code, and will hence emit IL instead of native machine code. The interesting thing about C+ is that when you compile to managed code, the compiler can emit IL that contains an embedded native executable. This means that you can mix managed types and unmanaged types in your C+ code. Thu
24、s the managed C+ code: class MyClass defines a plain C+ class, whereas the code: _gc class MyClass will give you a managed class, just as if youd written the class in C# or Visual Basic .NET. The advantage of using managed C+ over C# code is that we can call unmanaged C+ classes from managed C+ code
25、 without having to resort to COM interop. The compiler raises an error if you attempt to use features that are not supported by .NET on managed types (for example, templates or multiple inheritance of classes). You will also find that you will need to use nonstandard C+ features (such as the _gc key
26、word shown in the previous code) when using managed classes. Because of the freedom that C+ allows in terms of low-level pointer manipulation and so on, the C+ compiler is not able to generate code that will pass the CLRs memory type safety tests. If its important that your code is recognized by the CLR as memory type safe, then youll need to write your source code in some other language (such as C# or Visual Basic .NET).