我們目前對(duì).NET的理解大部分可以歸納為:起初它是Java平臺(tái)(注意是平臺(tái),不要跟Java語言搞混淆)的一個(gè)克隆品,后來慢慢演變,有了自己的特性。由于Java平臺(tái)最顯著的特點(diǎn)就是“平臺(tái)獨(dú)立性”(或者說不知道誰發(fā)明的Write once,Run anywhere這個(gè)話)。理論上,你可以寫一個(gè)程序編譯完后,跑在任何一個(gè)安裝有JVM的操作系統(tǒng)上。大部分人認(rèn)為.NET的出現(xiàn)是效仿Sun公司的這個(gè)偉大的概念——平臺(tái)獨(dú)立性,從而與Java抗衡。再后來又有一些人不知道從哪得出的結(jié)論說,就算有像Mono這樣的非Windows平臺(tái).NET CLR,也有好多.NET程序不能移植到其他操作系統(tǒng)中,比如Winform幾乎不能通過Mono移植到Linux上去,因此得出一個(gè)駭人聽聞的結(jié)論:微軟連模仿都沒模仿完整,居然是偽跨平臺(tái)。
以上就是目前我見過的最多的結(jié)論:.NET致命的弱點(diǎn),就是它不是真正的跨平臺(tái)。為此,我有以下幾點(diǎn)說明:
(1).NET平臺(tái)出現(xiàn)的意義不是支持跨平臺(tái),它出現(xiàn)的目的只是優(yōu)化傳統(tǒng)的Windows開發(fā)模式,使Windows開發(fā)更加方便快捷。它解決了COM時(shí)代的Dll Hell問題(.Net程序集版本控制),集成了多種語言(方便各種各樣的
(2)再說Java平臺(tái)和.NET兩者追求的目標(biāo),前者從出現(xiàn)開始就認(rèn)為:在互聯(lián)網(wǎng)世界中,我要讓一種語言跑在任何一個(gè)操作系統(tǒng)中;而后者則認(rèn)為:在互聯(lián)網(wǎng)世界中,我要讓所有的語言都跑在同一個(gè)操作系統(tǒng)中(Windows)。兩個(gè)平臺(tái)從一開始設(shè)計(jì)的目的就不一樣。
(3)兩者強(qiáng)調(diào)的重點(diǎn)不同
(4)上面3中所述,兩者平臺(tái)結(jié)構(gòu)類似,我不清楚微軟到底有沒有剽竊Java,但可以肯定的是如果兩者東家原意,兩個(gè)平臺(tái)都是可以做到“跨平臺(tái)”和“支持多語言”的。 至于為什么說使用Mono還不能把有些.NET程序移植到Linux,這個(gè)很容易解釋,微軟本來就沒打算將.NET程序移植到其他平臺(tái),.NET中包含的一些豐富框架都是與Windows緊密相關(guān)的,你使用了這些框架,是很難再把它們翻譯成非Windows平臺(tái)中可以執(zhí)行的代碼。而且,Java也并不是完全的跨平臺(tái),跟你開發(fā)實(shí)際用到的框架有關(guān)。出現(xiàn)以上不能移植的情況,關(guān)鍵有兩個(gè)地方,一個(gè)是你開發(fā)時(shí)使用的框架,一個(gè)是CLR(或者JVM),要看后者到底有沒有能力把前者翻譯成對(duì)應(yīng)平臺(tái)的可執(zhí)行代碼。
綜上,兩個(gè)平臺(tái)的側(cè)重點(diǎn)不同,你覺得比較蘋果和香蕉哪個(gè)好吃有用嗎?
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注