<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    冒號和他的學(xué)生們(連載19)——平臺語言

    冒號和他的學(xué)生們

    ——程序員提高班紀(jì)事

    19.平臺語言

    見其可欲也,則必前后慮其可惡也者;見其可利也,則必前后慮其可害也者                                               ——《荀子·不茍》

     

    逗號提出:“現(xiàn)在應(yīng)該到了Java時間吧。”

    冒號順?biāo)浦郏?#8220;下面談?wù)摰闹匦膹膭偛诺?em>系統(tǒng)語言轉(zhuǎn)到平臺語言——JavaC#。”

    問號聽得一頭霧水:“平臺語言?Java不是平臺無關(guān)的語言嗎?”

    “平臺的意義很廣,可以是硬件平臺,可以是軟件平臺,也可以是二者的結(jié)合。”冒號解釋道,“你說的‘平臺’主要指硬件和操作系統(tǒng)平臺,而我說的‘平臺’指的是運(yùn)行環(huán)境平臺。當(dāng)然這兩種平臺是密不可分的,JavaC#之所以能獨(dú)立于前一種平臺,正因?yàn)樗鼈冏詭Я撕笠环N平臺。具體地說,Java運(yùn)行于以Java Virtual Machine (JVM) 為核心的Java平臺,而C#運(yùn)行于以Common Language Runtime (CLR)為核心的.NET平臺。”

    句號打了個比方:“這就好比在不同的山路上鋪設(shè)相同的瀝青,車子跑到哪兒都沒區(qū)別了。”

    “很形象。”冒號贊道,“從傳承的角度看,二者皆為基于C++之上的改進(jìn),剔除了其中易于出錯或不易掌握的語法特征。我們先來看看它們區(qū)別于C++的共同之處。首先,二者均編譯成與機(jī)器無關(guān)托管碼managed code)或稱字節(jié)碼bytecode),運(yùn)行于虛擬機(jī)virtual machine)之上。其次,禁用或限用指針并支持自動垃圾回收,由此極大地解放了程序員的生產(chǎn)力。起初這種做法并不是沒有爭議的,但隨著機(jī)器性能的提高以及軟件規(guī)模的擴(kuò)大,對軟件的健壯性、安全性和生產(chǎn)率的要求超過了對運(yùn)行效率的要求,屏蔽指針和自動內(nèi)存管理逐漸得到認(rèn)同。盡管如此,指針與手動內(nèi)存管理對于系統(tǒng)軟件和實(shí)時性要求極高的軟件還是必不可少的。一個佐證是,Java 除了不適用于系統(tǒng)軟件外,還在JDK免責(zé)聲明(disclaimer)中表示它是不適用于空中交通或核設(shè)施等實(shí)時系統(tǒng)的。”

    引號較起真來:“那C#沒有這種聲明是否意味著它不受此限呢?”

    “或許吧。”冒號淡淡地說,“C#的胃口很大,上管天、下管地、中間還要管空氣。企業(yè)級應(yīng)用和桌面應(yīng)用自不必說,底層應(yīng)用也不放過。早在2003年,微軟研究院就開始了用C#開發(fā)的名為Singularity的操作系統(tǒng)研究項(xiàng)目,另外還有SharpOSCosmos等開源操作系統(tǒng)。雖然它們目前僅用于研究,但不難看出C#的勃勃野心。說起來這也不新鮮,1998Sun就搞了個針對嵌入式系統(tǒng)的JavaOS,可惜沒能成功,為Java ME所取代。”

    輪到嘆號糊涂了:“剛才還說JavaC#是平臺語言,怎么又同CC++一樣當(dāng)系統(tǒng)語言來用了呢?”

    冒號釋疑:“Java可通過JNI調(diào)用C、C++等程序;C#可通過P/Invoke訪問系統(tǒng)API,加之保留了指針操作,用于系統(tǒng)編程更加方便。其實(shí)一種語言勝任多種領(lǐng)域并不難,難的是在每個領(lǐng)域都獨(dú)占鰲頭。可問題是,有誰不樂見自己支持的語言被廣泛應(yīng)用呢?無論是微軟還是Sun,他們都會竭盡所能地將自己的語言擴(kuò)張到每個角落。程序員作為語言的用戶,雖然很多時候并沒有選擇語言的權(quán)力,但心中要有桿秤,可不要輕易被商家的廣告迷惑啊。”

    逗號不無自嘲地說:“秤倒是有一桿,就是不太準(zhǔn)啊!”

    有人“噗哧”笑出聲來。

     “多學(xué)習(xí)、多實(shí)踐、多體悟,秤的精度自然會提高。”冒號鼓勵道,“如果自己沒有足夠的鑒別商品能力,建議從商家的競爭對手那里獲取真實(shí)的信息。要看Java的優(yōu)點(diǎn),不要聽Sun的一面之詞,可以看看微軟的C#模仿了Java的哪些特征,因?yàn)槟7率亲罡叩馁潛P(yáng);要看Java的缺點(diǎn),可以看看C#擯棄了Java的哪些特征,可以聽聽微軟對Java的批判——雖然可能過激,但一般也不會太離譜。此法同樣適用于包括C#在內(nèi)的其他語言。”

    句號有所感慨:“這既是程序員之幸——語言之間可以互相取長補(bǔ)短,共同進(jìn)步;也是程序員之不幸——往往不得不在眾多語言中作艱難選擇,或者多花精力學(xué)更多的語言。”

    冒號一邊點(diǎn)頭一邊接著說:“下面繼續(xù)看看JavaC#的共性。借著剛才的話題,我們來看看C#Java是如何互相學(xué)習(xí)的。”

    引號舉手插問:“C#到底更接近C++還是Java?”

    “這是個有趣的問題。不妨這么說:C#看起來像C++,用起來像JavaC#借鑒了包括JavaC++Delphi等在內(nèi)的語言特征,其中Java的影響最大,但由于微軟與SunVisual J++上的過節(jié),寧愿強(qiáng)調(diào)與C++的關(guān)系而淡化與Java的關(guān)系。C#的設(shè)計(jì)者Hejlsberg以前是DelphiVisual J++的架構(gòu)師,在一次訪談中首先聲明C#不是Java的克隆,但從此話本身和他本人的背景都暗示了與Java千絲萬縷的聯(lián)系。例如,C#采用了大量與Java相同或相似功用卻不同拼寫的關(guān)鍵詞。”冒號投影出一張表格——

    Java

    super

    import

    package

    synchronized

    instanceof

    deprecated

    final

    native

    boolean

    C#

    base

    using

    namespace

    lock

    is

    obsolete

    sealed

    extern

    bool

    “這只是JavaC#關(guān)鍵詞的不完全對照表。中立地看,C#的關(guān)鍵詞更簡明,但避嫌的意義似乎大過改進(jìn)的意義。那么C#究竟從Java那里學(xué)到了什么,相比于C++又有什么優(yōu)勢呢?”冒號切換了幻燈片——

    更加安全——限用或禁用指針;檢查字符串和數(shù)組的邊界;增加類型安全;禁用未初始化的變量;增加了對資源的安全管理;

    更加簡單——自動垃圾回收;廢除了頭文件和宏(macro);支持接口(interface);廢除多繼承以及非公開繼承;摒棄了C++中一些生僻、難用的語法

    更加OO——不支持全局變量和自由函數(shù);所有的類都可上溯到Object類;對象一般通過new分配在heap)上;

    更加豐富——支持自省(Reflection);支持線程;提供圖形界面、網(wǎng)絡(luò)編程等API

    更加標(biāo)準(zhǔn)——對Unicode的內(nèi)建支持;支持注釋性文檔;類或方法可以被廢棄(deprecated);

    更加中性——編譯成機(jī)器無關(guān)代碼;運(yùn)行于統(tǒng)一平臺;


    問號順勢而問:“JavaC#又借鑒了什么呢?”

    冒號答道:“在Java1.5的增強(qiáng)特征中,有不少C#的影子。如增強(qiáng)版的for循環(huán);可變長參數(shù)(varargs);自動裝箱(autoboxing);類型安全的枚舉(typesafe enum)等等。此外,支持元數(shù)據(jù)的的注釋(annotation)與C#的特性(attribute)大同小異,C#Delphi中引入的屬性(property)也出現(xiàn)在Java 7的提案中。”

    嘆號雙手一攤:“這么多相同之處,不如合并算了。”

    “很傻很天真的想法。等它們合并了,估計(jì)世界也大同了。”冒號笑言,“它們之間的差別也不容忽視。C#重新?lián)炱鹆?/span>C++中被Java拋棄的一些特征,可謂是對C++否定之否定——除了支持引用類型reference type)外,還支持值類型value type);除了按值傳遞(pass-by-value)外,還可按引用傳遞(pass-by-reference);支持操作符重載(operator overloading);在一定條件下保留指針和指針運(yùn)算;所有的方法默認(rèn)是非虛的(non-virtual);訪問權(quán)限默認(rèn)是私有的(private);將關(guān)鍵詞‘extends’和‘implements’統(tǒng)一為‘:’;支持預(yù)處理指令(preprocessor directive)等等。公允地說,這些大都為明智之舉。”

    引號追問:“C#還有什么獨(dú)到之處嗎?”

    “曾在Visual J++中加入的委托delegate)和相關(guān)的事件event),如今可以堂而皇之地用在C#上,再不用擔(dān)心被Sun告了。”冒號略帶調(diào)侃,“C#還是第一個支持組件導(dǎo)向Component-Oriented)的C族語言。除此之外,C#支持索引器(indexer)、版本控制(versioning)、XML注釋、特色指令如#region、特色關(guān)鍵詞如checkedyield等等。”

    嘆號眉頭微蹙:“聽起來C# Java復(fù)雜多了。”

    “當(dāng)初JavaC++的改革的一個重要原則是:讓語言變得簡單而有親和力,降低程序員門檻,提高軟件生產(chǎn)效率。但如今Java已經(jīng)不那么簡單了,C#則更復(fù)雜,在某些方面較之C++也不遑多讓。”冒號語調(diào)轉(zhuǎn)強(qiáng),“以前人們試圖在語言的威力power)和生產(chǎn)率productivity)中尋求最佳平衡點(diǎn),現(xiàn)在似乎更想魚與熊掌兼得。”

    問號提問:“JavaC# 最大的區(qū)別是什么?”

    “雖然同為平臺語言,二者的設(shè)計(jì)理念還是有所不同的。Java的目的是讓一種語言在多種平臺上運(yùn)行,而C# 的目的是讓多種語言在一種平臺上運(yùn)行。”冒號鐘愛這種具有對稱美的對比,“雖然理論上以C#為核心的.NET平臺可以用在任何操作系統(tǒng)上,但千萬不要指望微軟會心甘情愿地提供Windows之外的實(shí)現(xiàn),原因不言自明。而SunSolaris無法與Windows抗衡,最大的王牌就是Java語言,當(dāng)然會致力于跨平臺和面向Internet的應(yīng)用,對桌面應(yīng)用的投入相對較少。因此兩個平臺語言,一個重在語言,讓語言向平臺擴(kuò)散;一個重在平臺,讓平臺來凝聚語言。在此并不想對兩公司的商業(yè)策略評頭論足,而是認(rèn)為了解這種背景會對理解語言特征及其發(fā)展趨勢有所裨益。編程語言絕非象牙塔中之物,實(shí)乃技術(shù)和商業(yè)合力推動的結(jié)果。”

    逗號拖著怪腔:“原來如彼!”

    眾人大笑。

    句號深思后問道:“可不可以這么理解:如果開發(fā)僅限于Windows平臺的應(yīng)用,C#是更好的選擇,它一方面與Windows系統(tǒng)存在天然的紐帶,另一方面可有效地利用.NET的包括ASP.NET、VB.NET、ADO.NET、WinForms等在內(nèi)的各種軟件資源;如果開發(fā)不限于Windows的企業(yè)應(yīng)用,則選擇Java更合適?”

    “有一定道理,平臺的確是語言選擇的一個考慮因素。不過說起可利用的軟件資源,Java毫不遜色。除了形形色色的框架外,與動態(tài)語言如Groovy、Scala、Ruby、Python等也能嚴(yán)絲合縫。”冒號匆匆結(jié)語,“關(guān)于JavaC#的比較暫時談到這里,由于時間關(guān)系,我們不可能面面俱到,難免掛一漏萬。許多概念術(shù)語只是點(diǎn)到為止,具體細(xì)節(jié)留待以后展開,暫且按下不表。每種語言都為解決問題提供了一定的途經(jīng):C++提供了一馬平川的大路,也提供了陷阱密布的小道;Java則在大路上鋪設(shè)水泥,同時封鎖了捷徑小道;C#同樣填平了大路上的坑坑洼洼,但把一些小道上‘此路不通’的牌子偷偷改成了‘此路危險(xiǎn)’。”

    posted on 2008-06-11 19:27 鄭暉 閱讀(2751) 評論(4)  編輯  收藏 所屬分類: 冒號和他的學(xué)生們

    評論

    # re: 冒號和他的學(xué)生們(連載19)——平臺語言 2008-06-11 21:04 ezcat

    這期寫得玄之又玄,讀的時候過癮,只是讀了以后,好象又沒留下什么好回味的東西。  回復(fù)  更多評論   

    # re: 冒號和他的學(xué)生們(連載19)——平臺語言 2008-06-12 11:03 鄭暉

    @酒店X、酒店Y、酒店Z
    三家酒店(已刪):評論區(qū)不是廣告站。  回復(fù)  更多評論   

    # re: 冒號和他的學(xué)生們(連載19)——平臺語言 2008-06-12 19:25 ron

    三種語言都學(xué)過,或用過,或在用。但都不深入。  回復(fù)  更多評論   

    # re: 冒號和他的學(xué)生們(連載19)——平臺語言 2008-06-15 11:08 長江三峽

    呵呵  回復(fù)  更多評論   

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    博客搬家:http://blog.zhenghui.org
    《冒號課堂》一書于2009年10月上市,詳情請見
    冒號課堂

    留言簿(17)

    隨筆分類(61)

    隨筆檔案(61)

    文章分類(1)

    文章檔案(1)

    最新隨筆

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产亚洲一区二区在线观看| 国产成人精品免费直播| 精品亚洲综合在线第一区| 午夜在线免费视频 | 黄+色+性+人免费| 亚洲欧洲高清有无| 国产成人精品免费午夜app | 亚洲国产精品xo在线观看| 18禁止看的免费污网站| 亚洲第一区视频在线观看| **实干一级毛片aa免费| 亚洲国产日韩在线成人蜜芽| h视频在线免费看| 在线亚洲高清揄拍自拍一品区| 一个人看的www在线观看免费| 久久精品国产99国产精品亚洲| 三年片在线观看免费大全| 亚洲真人无码永久在线观看| 日韩高清免费观看| 免费福利在线观看| 亚洲AV无码一区二区三区系列 | 久久亚洲春色中文字幕久久久| 亚洲啪啪免费视频| 亚洲丶国产丶欧美一区二区三区 | 免费看又黄又无码的网站 | 国产成人麻豆亚洲综合无码精品 | 亚洲精品中文字幕无码蜜桃| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 亚洲免费综合色在线视频| 亚洲人成网站色在线观看| 国产美女精品视频免费观看| 国产高潮久久免费观看| 久久久久亚洲精品美女| 成年女人18级毛片毛片免费| 成人免费网站久久久| 图图资源网亚洲综合网站| 日本免费一本天堂在线| 两个人www免费高清视频| 国产精品亚洲片夜色在线| 可以免费观看一级毛片黄a | 亚洲?v无码国产在丝袜线观看|