国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

90%的重疊10%的較量——C#與Java述評(píng)

2019-11-18 11:14:25
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  自C#誕生之日起,關(guān)于C#與java之間的論戰(zhàn)便此起彼伏,至今不輟。拋開(kāi)Microsoft與Sun之間的恩怨與口角,客觀地從技術(shù)上講,C#與Java都是對(duì)傳統(tǒng)面向?qū)ο蟪绦蛟O(shè)計(jì)在組件化軟件時(shí)代的革新之果,可謂殊途同歸。雖說(shuō)兩種語(yǔ)言有著“90%的重疊”,但那另外“10%的較量”也往往能夠左右一架天平的方向。
  
  
  
  C#和Java都提出了對(duì)傳統(tǒng)C++艱深、晦澀的語(yǔ)法語(yǔ)義的改良。在語(yǔ)法方面,兩者都擯棄了C++中函數(shù)及其參數(shù)的const修飾、宏代換、全局變量、全局函數(shù)等許多華而不實(shí)的地方;在繼續(xù)方面,兩者都采用了更易于理解和建構(gòu)的單根繼續(xù)和多接口實(shí)現(xiàn)的方式;在源代碼組織方面,都提出了聲明與實(shí)現(xiàn)于一體的更好的邏輯封裝;在類型系統(tǒng)方面,兩個(gè)語(yǔ)言都在中間語(yǔ)言IL或字節(jié)代碼的基礎(chǔ)上提出了映射這樣的概念,徹底革新了傳統(tǒng)C++運(yùn)行時(shí)類型鑒別的問(wèn)題。
  
  
  
  但在大刀闊斧地對(duì)C++進(jìn)行改革的同時(shí),C#顯得更為保守,它對(duì)很多原來(lái)C++中很好的特性予以了保留,如基于棧分配的輕量級(jí)結(jié)構(gòu)類型、枚舉類型、引用、輸出、數(shù)組修飾的參數(shù)傳遞方式等,這些在Java中都被很可惜地丟掉了。在基本類型和單根繼續(xù)的對(duì)象之間的類型統(tǒng)一方面,C#提出的box/unbox要比Java的包裝類顯得高明,效率也更高。
  
  
  
  對(duì)C++不安全的指針及內(nèi)存分配方式,C#和Java都采用了托管執(zhí)行環(huán)境。而效率問(wèn)題卻是托管執(zhí)行環(huán)境一直以來(lái)遭人詬病的地方。Java虛擬機(jī)(JVM)解釋執(zhí)行的方式曾經(jīng)讓很多開(kāi)發(fā)者覺(jué)得“慢得無(wú)法忍受”,不過(guò)C#的JIT編譯方式卻為C#在這塊戰(zhàn)場(chǎng)上贏得了贊聲一片,某些C#托管代碼甚至比傳統(tǒng)C++代碼都快。雖然現(xiàn)在各廠商實(shí)現(xiàn)的Java平臺(tái)也都一致地采取了JIT編譯方式,但C#在這方面的比較優(yōu)勢(shì)非常明顯――C#的目標(biāo)編譯語(yǔ)言IL從設(shè)計(jì)初始就把效率擺在了重要的地位,而Java字節(jié)代碼的設(shè)計(jì)卻有些魯莽。
  
  
  
  “一次編程,多處執(zhí)行”一直是程序設(shè)計(jì)的一個(gè)訴求,尤其是在現(xiàn)代Internet時(shí)代。在跨平臺(tái)方面,Java的支持和實(shí)現(xiàn)都是為人稱道的,雖然JVM的速度仍然讓人備感頭疼。而C#雖然在底層構(gòu)造方面對(duì)移植性進(jìn)行了充分的考慮,但至少目前還沒(méi)有出現(xiàn)成熟的、經(jīng)過(guò)檢驗(yàn)的產(chǎn)品。C#在跨平臺(tái)方面似乎更熱衷于xml Web Services互操作,而不是跨平臺(tái)編程。但C#通過(guò)其基礎(chǔ)語(yǔ)言構(gòu)造(CLI)對(duì)二十多種主流語(yǔ)言對(duì)象級(jí)的互操作支持,又極大地提升了C#的技術(shù)地位。和COM組件廉價(jià)的互操作也為C#掙到不少分?jǐn)?shù)――保持一個(gè)兼容的體系對(duì)現(xiàn)代軟件工業(yè)非常重要,也是對(duì)廣大開(kāi)發(fā)人員負(fù)責(zé)的表現(xiàn)。
  
  
  
  從對(duì)C#的分析中,我們可以強(qiáng)烈地感受到C#對(duì)組件編程的“迷戀”。實(shí)際上現(xiàn)代軟件的組件開(kāi)發(fā)潮流正是由1995年誕生的Java所倡導(dǎo),Java和C#都是對(duì)傳統(tǒng)C++面向組件的編程方式的革新,但7年前就出道的Java在這方面顯然與C#不可同日而語(yǔ)。C#通過(guò)屬性、索引器、委派、事件、操作符重載、特征、版本等實(shí)現(xiàn)了對(duì)組件編程的第一手支持。雖然這些在Java中都可以通過(guò)方法、接口或者適配器來(lái)間接地實(shí)現(xiàn),但這無(wú)論對(duì)編程效率或者邏輯設(shè)計(jì)都是一種極大的損傷――高級(jí)語(yǔ)言首先面對(duì)的是人,而不是機(jī)器。
  
  
  
  除去這些語(yǔ)言層面的組件支持機(jī)制,.NET平臺(tái)也為組件的配置、運(yùn)行和治理提供了一攬子解決方案,為組件開(kāi)發(fā)量身定做的Visual Studio .NET更是令人興奮,這些都為C#的組件編程開(kāi)辟了廣闊的天地。在其他技術(shù)方面Java的微弱劣勢(shì)尚且可以忽略不計(jì),但在組件編程方面Java相較于C#卻有著不可治愈的硬傷。尤其對(duì)于從C++和VB背景過(guò)來(lái)的開(kāi)發(fā)人員,C#在這方面有著不可反抗的魅力和誘惑。
  
  
  
  鑒于XML Web Services在下一代企業(yè)分布式計(jì)算中的地位,.NET平臺(tái)直接在IL中間語(yǔ)言中內(nèi)置了XML,SOAP、UDDI、WSDL等底層協(xié)議被構(gòu)建成了面向開(kāi)發(fā)人員的組件;而Java是通過(guò)API集來(lái)支持Web服務(wù)。雖然這種局面的形成可能僅僅是因?yàn)闀r(shí)間問(wèn)題,但從技術(shù)角度來(lái)將,C#無(wú)疑比Java更新,究竟C#出現(xiàn)在Java之后。
  
  
  
  當(dāng)然“語(yǔ)言選擇乃藝術(shù)而非技術(shù)問(wèn)題”,開(kāi)發(fā)人員選擇哪種編程語(yǔ)言往往會(huì)受到眾多因素的影響。各自的后端平臺(tái)(C# for .NET, Java for J2EE)、編程框架的支持、各種語(yǔ)言相關(guān)工具的實(shí)現(xiàn)、現(xiàn)有的系統(tǒng)基礎(chǔ)等都會(huì)對(duì)編程語(yǔ)言的發(fā)展產(chǎn)生相當(dāng)?shù)挠绊憽?

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 关岭| 井陉县| 大新县| 水富县| 长寿区| 苏尼特右旗| 陆良县| 长乐市| 深州市| 蒙自县| 米易县| 霸州市| 新绛县| 定州市| 子长县| 渭源县| 固始县| 松原市| 遂溪县| 浑源县| 桃源县| 汽车| 茌平县| 奇台县| 临沂市| 香格里拉县| 永兴县| 岗巴县| 鸡东县| 五莲县| 巴彦县| 瓦房店市| 洞头县| 沾化县| 泽州县| 鱼台县| 佛学| 云龙县| 松潘县| 山东| 开阳县|