C# 編寫應用程序1.CIL 和 JIT
在編譯使用.NET Framework或.NET Core庫的代碼時,不是立即創(chuàng)建專用于操作系統(tǒng)的本機代碼,而是把 代碼編譯為通用中間語言(Common Intermediate Language, CIL)代碼,這些代碼并非專門用于任何一種操作系統(tǒng), 也非專門用于C#。其他.NET語言(如Visual Basic .NET或F#)也會在第一階段編譯為這種語言。開發(fā)C#應用程 序時,這個編譯步驟由Visual Studio完成。
顯然,要執(zhí)行應用程序,必須完成更多工作,這是Just-In-Time(JIT)編譯器的任務,它把CIL編譯為專用于 0S和目標機器架構的本機代碼。這樣OS才能執(zhí)行應用程序。這里編譯器的名稱Just-In-Time反映了 CIL代碼 僅在需要時才編譯的事實。這種編譯可以在應用程序的運行過程中動態(tài)發(fā)生,不過開發(fā)人員一般不需要關心 這個過程。除非要編寫性能十分關鍵的高級代碼,否則知道這個編譯過程會在后臺自動進行,并不需要人工干 預就可以了。
過去,經(jīng)常需要把代碼編譯為幾個應用程序,每個應用程序都用于特定的操作系統(tǒng)和CPU架構。這通常是 -種優(yōu)化形式(例如,為了讓代碼在AMD芯片組上運行得更快),但有時則是非常重要的(例如,使應用程序可 以同時工作在Win9x和WinNT/2000環(huán)境下)?,F(xiàn)在就沒必要了,因為JIT編譯器使用CIL代碼,而CIL代碼是 獨立于計算機、操作系統(tǒng)和CPU的。目前有幾種JIT編譯器,每種編譯器都用于不同的架構,CLR/CoreCLR 會使用合適的編譯器創(chuàng)建所需的本機代碼。
這樣,開發(fā)人員需要做的工作就比較少了。實際上,可以忽略與系統(tǒng)相關的細節(jié),將注意力集中在代碼的 功能上就夠了。
點擊加載更多評論>>