第一天我們提到昇陽認為J++違反了Java的跨平台的初衷,開始對微軟提出了訴訟,而後微軟放棄J++的開發,轉而開發出C#與.NET Framework。
說C#與Java看起來很相似,這可以分為很多原因,一來C#推出的目的就是為了與Java競爭,畢竟在開發J++的過程中,微軟了解到自己的設計在效能上是比Java還具有競爭力,二來JVM的概念簡化了、抽象化了原先程式與電腦溝通的繁雜度。再來其實C#、.NET的首席架構師安德斯·海爾斯伯格(Anders Hejlsberg)原先就是J++的開發主持人,而他現在也參與了TypeScript的開發。
先前提到Java編譯後會成為Java bytecode,Java bytecode並不是電腦能理解的機器語言,需要交由能理解Java bytecode的Java Virtual Machine(簡稱JVM)來幫我們命令電腦來執行,不同平台有各自對應能理解Java bytecode的JVM來達到跨平台的目的。而C#編譯後會轉換成通用中繼語言(Common Intermediate Language,簡稱CIL),CIL一樣是電腦不能理解的程式語言,須交由通用語言執行環境(Common Language Runtime,簡稱CLR)來執行,CLR會幫我們把CIL即時編譯成該平台電腦能理解的機器語言來命令電腦執行。
我們所撰寫的程式,要到電腦與作業系統中能執行,中間需要考慮許多繁雜的細節,通用語言執行環境的出現,簡化、抽象化了,一個程式語言編譯器要實作於各個平台的困難(只要實作一個能編譯成通用中繼語言的編譯器就好了!)。爾後任何程式語言只要能編譯成通用中繼語言(CIL),就能透過現成的通用執行環境(CLR)就能執行在各個地方。而這個概念形成通用語言基礎架構(Common Language Infrastructure,簡稱CLI)這一個開放技術規範,該技術規範定義於國際標準ISO/IEC 23271。這個規範定義了很多內容,.NET Framework算是微軟在Windows上對於該規範的實踐,然而真正能跨多個平台的是其他公司實踐的開源專案Mono,微軟唯一能跨Linux平台的.NET Core實踐也是Mono出現後十多年之後的事。
在一些早期的資料中表示,C#編譯後會成為微軟中繼語言(Microsoft Intermediate Language,簡稱MSIL),在前述中我們提到這已經成為一個開放技術規範,現在應以通用中繼語言(CIL)來表示,然而對程式開發者來說我們只要知道這是一個中繼語言(IL)就可以了。