傳統語言的編譯和執行方式和C#、Java有什麼不同?

        傳統的語言(例如C、C++ ),源代碼在經過編譯連接後直接生成了二進制代碼。而C#、java這些語言把源代碼編譯爲了中間語言,C#把源代碼編譯爲了MSIL,Java把源代碼編譯爲字節碼。

        因爲編譯器結構是一個很難、很費時的部分,所以編譯器通常分爲前端和後端組成,前端的任務是反源代碼轉換爲中間語言,後端的任務是把中間語言轉換爲機器代碼。

        中間語言是編譯器前端和後端之間的緩衝區。C以及C++這些語言,在進行編譯時是前端和後端是連續執行的,即利用前端把源代碼編譯爲中間語言,然後馬上再利用後端把中間語言編譯爲機器上可以直接執行的二進制代碼。這樣,這種編譯後的可執行文件,就可以直接在機子上運行。

       而.Net的編譯和執行方法只是修改了長期使用的傳統方法。使用.net時,傳送的是IL代碼,編譯的最後一步是在運行期間的目標機器上進行的,之後執行程序。

      採用這種方法的好處(優勢):可移植性。即發佈的程序理論上可以在任何安裝了合適.net運行時的硬件平臺上運行。即C#通過安裝在機子上的CLR(公共語言運行時),Java通過安裝在機子上的JVM(Java虛擬機)來執行中間代碼和字節碼。

      我的理解是,爲了實現這種移植性,在機子上又加了一層平臺(CLR、JVM),讓中間代碼在這個平臺上進行運行,而JVM、CLR在不同的操作系統上以不同的方式實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章