C#運行原理——我的柔情你永遠不懂


記得歌手陳琳曾經在1993年發行了第一張專輯《你的柔情我永遠不懂》,創造了150萬張的銷售紀錄,里邊的主打歌——我的柔情你永遠不懂,多年以后才發現是寫給C#運行原理的,因為原理總是傷不起~
你的柔情我永遠不懂
我無法把你看得清楚
你的柔情我永遠不懂
感覺進入了層層迷霧
你的柔情我永遠不懂
霧中的夢想不是歸宿
你的柔情我永遠不懂
我等待着那最后孤獨
沒有心思看你裝糊塗
 ......
這個你,我想換做C#運行原理更合適吧,呵呵,我不得不說,沒有一點點防備,你就存在了我深深的腦海里...
 
說到原理這東西,一直都很頭大,什么通信原理,自控原理,編譯原理,微機原理,傷人的原理是無處不在啊,我們在學校的時候恐怕對這個吐槽的最多了,因為原理這玩意,我們玩不起啊,連教授都沒搞明白,你還想咋着,所以這里的原理也是蜻蜓點水而已!
 
我一直在想計算機是屬於什么民族的,后來一想應該是土著人,為什么呢,因為老土著只會講自己的語言,也只懂他們自己的語言,那計算機還不一個德行,就看見機器語言才會兩眼放光,什么0101的,你也拿它沒轍,反正人家就懂機器語言,而我等程序猿只懂高級語言啊,什么JAVA、C#、C++了,沒辦法計算機就是不認識啊,那找個翻譯應該可以吧,你還別說真有,有個叫做“編譯器”的翻譯,瞬間就把C#等轉換成0101了,我和我的小伙伴們都驚呆了!
 
編譯器把0101以文件的形式保存在外存儲器中,CPU執行程序時,要把指令讀到內存中(你不用擔心,是OS搞定的),這些指令都是一條條放好的,然后CPU就是一條條取出執行即可,但是這個指令還是有問題的,為啥?因為CPU和OS一換,瞬間這些指令又變成天書了,他們也有個名字“非托管代碼”,沒托管的代碼傷不起啊!
 
write once ,run everywhere!聽過吧,這還真不是吹牛,搞java的最有發言權了,那微軟也是不敢示弱的,這套思想他也領會了,而且更強大一點!要支持跨平台和跨語言這一特性,軟件工程師寫的程序經過編譯器生成的結果就不能是依賴於操作系統和計算機硬件的機器指令了,而必須是一種中間的、在所有操作系統和計算機硬件平台上都能執行的代碼,這種代碼Java稱之為ByteCode(字節碼),.NET稱之為MSIL(微軟中間語言)。程序最終還是要靠CPU執行,所以,Java的ByteCode和.NET的MSIL仍然需要最終被翻譯成CPU能執行的機器指令,這部分功能由一個運行在特定操作系統之上的軟件系統來完成,這個軟件系統稱為VM(Virtual Machine,虛擬機)。只需要為每種操作系統和特定的硬件平台提供一個虛擬機,就可以讓同樣一個程序不加修改地在不同的操作系統和硬件結構的計算機上運行。
 
那我們的.NET的虛擬機就是CLR!你只要裝了這個東東,原則上是可以跨平台的!這種運行在CLR上面的代碼就是托管代碼,你開發的.NET程序,沒有這個CLR的支持,你就運行不了,而要有CLR,你就必須裝.NET FrameWork這個實實在在的東東,這個東東才是.NET 的核心!
 
在.NET中,我們還可以在一個程序里邊使用多種語言,這依賴於CTS,比如VB和C#,反正最后都是編程MSIL,這個貌似java沒有哦,所以搞.NET的也算是搬回了一局啊!
 
值得一提的是,雖然微軟自己並不提倡跨平台(跨平台會影響Windows操作系統的市場壟斷),但現在已經出現了在Linux操作系統中運行和編輯.NET程序的平台,就是Mono平台。 該平台包括有C#編譯器、公共語言運行時以及相關的一套.NET類庫,Mono平台可使開發者開發的.NET應用程序不僅能在Windows上運行,也能在任何支持Mono的操作系統上運行,包括現有的Linux和UNIX操作系統。在Linux下運行的.NET Framework稱為MONO,這是一個開源的軟件項目,你可以到因特網上搜集它的信息!
 
若要深入理解,有兩本書推薦:1、《你必須知道的.NET》 2、《CLR via C#》
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM