【正文】
Visual Basic .NET 當(dāng)作是一種新語言。 這種語言升級(jí)的一個(gè)副作用是不能再把 編譯為內(nèi)部可執(zhí)行代碼了。通過 Visual C++ .NET,又加入了更多的擴(kuò)展內(nèi)容,來支持 .NET Framework。這表示在 C++代碼中可以把托管類型和非 托管類型合并起來,因此托管 C++ 代碼: class MyClass { 定義了一個(gè)普通的 C++類,而代碼: __gc class MyClass { 生成了一個(gè)托管類,就好像使用 C或 編寫類一樣。 因?yàn)?C++允許低級(jí)指針操作, C++編譯器不能生成可以通過 CLR 內(nèi)存類型安全測(cè)試的代碼?,F(xiàn)在 J語言內(nèi)置于 .NET Framework 中。這說明,與 C和 一樣,可以使用 J創(chuàng)建 Web 應(yīng)用程序、 Windows 窗體、 XML Web 服務(wù)和其他應(yīng)用程序。有了 后,就沒有必要在服務(wù)器端的 Web 頁面上使用腳本語言了,但 VBA 仍用作 Office 文檔和 Visual Studio 宏語言。在大多數(shù)情況中,把新組件編寫為 .NET 組件,其多數(shù)目的是為了更加方便,因?yàn)檫@樣可以利用 .NET 基類和托管代碼的其他優(yōu)點(diǎn)。但是, COM+仍然是一個(gè)重要的工具,因?yàn)槠涮匦詻]有在 .NET中完全實(shí)現(xiàn)。另一方面, JScript 升級(jí)到 。 Microsoft 希望大多數(shù) J++用戶認(rèn)為他們 在使用 .NET 時(shí),將很容易使用 J。 (3) Visual J 最新添加的語言是 Visual J。 如果在托管類型上試圖使用 .NET 不支持的特性 (例如,模板或類的多繼承 ),編譯器就會(huì)出現(xiàn)一個(gè)錯(cuò)誤。如果要讓 C++代碼在 .NET Framework 中運(yùn)行,就要在代碼的開頭添加下述命令: using 還要把標(biāo)記 /clr 傳遞給編譯器,編譯器假定要編譯托管代碼,因此會(huì)生成中間語言,而不是內(nèi)部機(jī)器碼。如果需要繼續(xù)使用 VB6 編寫程序,就可以這么做,但生成的可執(zhí)行代碼會(huì)完全忽略 .NET Framework,如果繼續(xù)把Visual Studio 作為開發(fā)環(huán)境,就需要安裝 Visual Studio 6。如果要把一個(gè) VB6 項(xiàng)目讀取到 Visual Studio .NET 中, Visual Studio .NET 就會(huì)升級(jí)該項(xiàng)目,也就是說把 VB6 源代碼重寫為 源代碼。例如,它與 COM 的高度集成,且只把事件處理程序作為源代碼顯示給開發(fā)人員,大多數(shù)后臺(tái)代碼不能用作源代碼。簡言之,就是能將任何一種語言編譯為中間代碼,編譯好的代碼可以與從其他語言編譯過來的代碼進(jìn)行交互操作。即編譯器不知道代碼所運(yùn)行的處理器類型,例如該處理器是 x86 兼容處理器或 Alpha 處理器,這超出了基本操作的范圍。 這解釋了為什么托管 IL 代碼的執(zhí)行幾乎和內(nèi)部機(jī)器代碼的執(zhí)行速度一樣快,但是并 沒有說明為什么 Microsoft 認(rèn)為這會(huì)提高性能。 JIT 編譯器并不是把整個(gè)應(yīng)用程序一次編譯完 (這樣會(huì)有很長的啟動(dòng)時(shí)間 ),而是只編譯它調(diào)用的那部分代碼 (這是其名稱由來 )。 1. 平臺(tái)無關(guān)性 首先,這意味著包含字節(jié)代碼指令的同一個(gè)文件可以放在任一個(gè)平臺(tái)中,運(yùn)行時(shí)編譯過程的最后階段可以很容易完成,這樣代碼就可以運(yùn)行在該特定的平臺(tái)上。Advantages of Managed Code Microsoft intermediate language shares with Java byte code the idea that it is a lowlevel language with a simple syntax (based on numeric codes rather than text), which can be very quickly translated into native machine code. Having this welldefined universal syntax for code has significant advantages. Platform independence First, it means that the same file containing byte code instructions can be placed on any platform。對(duì)于代碼來說,這種精心設(shè)計(jì)的通用語法,有很大的優(yōu)點(diǎn)。 IL總是即時(shí)編譯的 (稱為 JIT編譯 ),而 Java字節(jié)代碼常常是解釋性的, Java 的一個(gè)缺點(diǎn)是,在運(yùn)行應(yīng)用程序時(shí),把 Java 字節(jié)代碼轉(zhuǎn)換為內(nèi)部可執(zhí)行代碼的過程會(huì)導(dǎo)致性能的損失 (但在最近,Java 在某些平臺(tái)上能進(jìn)行 JIT編譯 )。使用 JIT 編譯器,從來都不會(huì)編譯這種代碼。這是因?yàn)閭鹘y(tǒng)的編譯器是在發(fā)布軟件之前編譯為內(nèi)部機(jī)器可執(zhí)行的代碼。 3. 語言的互操作性 使用 IL 不僅支持平臺(tái)無關(guān)性,還支持語言的互操作性。 Visual Basic 是在最近的幾年中演化的,其早期版本 Visual Basic 6 并不適合運(yùn)行 .NET 程序。現(xiàn)有的 VB6 代碼不能編譯為 代碼,把 VB6 程序轉(zhuǎn)換為 時(shí),需要對(duì)代碼進(jìn)行大量的改動(dòng),但大多數(shù)修改工作都可以由 Visual Studio .NET(VS 的升級(jí)版本,用于與 .NET 一起使用 )自動(dòng)完成。 只編譯為中間語言,就像 C一樣?,F(xiàn)有的 C++源代碼會(huì)繼續(xù)編譯為內(nèi)部可執(zhí)行代碼,不會(huì)有修改,但它會(huì)獨(dú)立于 .NET 運(yùn)行庫運(yùn)行。實(shí)際上,托管 C++比 C更優(yōu)越的一點(diǎn)是可以在托管 C++代碼中調(diào)用非托管 C++類,而不必采用 COM交互功能。如果 CLR 把代碼標(biāo)識(shí)為內(nèi)存類型安全是非常重要的,就需要用其他一些語言編寫源代碼,例如 C 或 。因此, J用戶可以利用 Visual Studio .NET的所有常見特性。 (4) 腳本語言 腳本語言仍在使用之中,但由于 .NET 的推出,一般認(rèn)為它們的重要性在降低。 (5) COM 和 COM+ 從技術(shù)上講, COM 和 COM+并不是面向 .NET 的技術(shù),因?yàn)榛谒鼈兊慕M件不能編譯為 IL(但如果原來的 COM 組件是用 C++編寫的,使用托管 C++,在某種程度上可以這么做 )。