以下為文章全文:
Mac OS X 10.6即所謂的Snow Leopard操作系統(tǒng)已正式發(fā)售,。一如既往,,Apple產(chǎn)品光鮮的外表下凝聚了太多艱辛的勞作。ArsTechnic的John Siracusa以其獨(dú)特的,、專業(yè)的,、全面的視角深入翔實(shí)地體驗(yàn)這款最新的操作系統(tǒng)。
譯注:為了幫助您更加順暢地理解本文的內(nèi)容,這里補(bǔ)充了文中一些相關(guān)概念的背景資料,。
編譯器(compiler):是一種能夠?qū)⒃创a(通常由高級(jí)別的程序語言編寫而成)轉(zhuǎn)換為低級(jí)別機(jī)器語言的程序,。源碼轉(zhuǎn)換最重要的一個(gè)目的在于創(chuàng)建可執(zhí)行文件。詳情請(qǐng)參考wikipedia,。 LLVM(Low Level Virtual Machine,,低級(jí)虛擬機(jī)):是構(gòu)架編譯器(compiler)的框架系統(tǒng),以C++編寫而成,,用于優(yōu)化以任意程序語言編寫的程序的編譯時(shí)間(compile-time),、鏈接時(shí)間(link-time)、運(yùn)行時(shí)間(run-time)以及空閑時(shí)間(idle-time),,對(duì)開發(fā)者保持開放,,并兼容已有腳本。LLVM計(jì)劃啟動(dòng)于2000年,,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持開展,。2006年Chris Lattner加盟Apple Inc.并致力于LLVM在Apple開發(fā)體系中的應(yīng)用。Apple也是LLVM計(jì)劃的主要資助者,。詳情請(qǐng)參考以及wikipedia,。 GCC(GNU Compiler Collection,縮寫為GCC):是GNU計(jì)劃推出的支持多種程序語言的編譯器系統(tǒng),。GCC是GNU Toolchain的主要組件,。同時(shí)作為GNU操作系統(tǒng)的官方編譯器,GCC已被作為很多現(xiàn)代操作系統(tǒng)的標(biāo)準(zhǔn)編譯器,,如GNU/Linux,,BSD以及Mac OS X;同時(shí)也可用于很多嵌入式平臺(tái),,如Symbian,,AMCC等,;還可用于一些游戲機(jī)平臺(tái)如Playstation和Sega Dreamcast等。詳情請(qǐng)參閱Wikipedia以及GCC.GNU.org,。 IDE(Integrated development environment):是一種能夠?yàn)槌绦騿T和軟件開發(fā)提供廣泛支持的軟件程序,。IDE通常由源碼編輯器、編譯器,、自動(dòng)化構(gòu)建工具以及調(diào)試器組成,。詳情請(qǐng)參閱Wikipedia。 早在幾年以前,,Apple就在LLVM開源計(jì)劃上做出了重要的戰(zhàn)略性投資,。我曾在一篇介紹Mac OS X Leopard的文章中簡要介紹了LLVM的一些基本情況,Leopard利用LLVM技術(shù)為JIT編譯軟件的OpenGL功能提供了高效的執(zhí)行支持,。在那篇綜述的最后,,我這樣結(jié)尾:對(duì)于LLVM,Apple擁有相當(dāng)宏偉的計(jì)劃:逐步摒棄Mac OS X中現(xiàn)有的GCC編譯器集合(complier collection),,并采用全新的基于LLVM的編譯器系統(tǒng),。該計(jì)劃稱為"Clang",并且已有了一些可喜的進(jìn)展,。 隨著Snow Leopard的推出,,這一切開始逐漸浮出水面:Clang和LLVM已成為Apple現(xiàn)行的編譯策略。LLVM甚至還有一個(gè)全新的帥氣的標(biāo)志:
目前,,Apple為Mac OS X總共提供了四種編譯器:GCC 4.0,,GCC4.2,LLVM-GCC 4.2,,以及Clang,。這里是一個(gè)圖表: 所有這些編譯器在Mac OS X上均具有二進(jìn)制兼容性(binary-compatible),這就意味著您可以使用一種編譯器創(chuàng)建一個(gè)資源庫并與使用另一個(gè)編譯器創(chuàng)建的可執(zhí)行文件相鏈接,。并且,,理論上講,這些都是命令行編輯器并且都具有資源兼容性,。然而,,Clang目前暫不支持GCC的一些復(fù)雜功能,同時(shí)Clang只支持C,、Objective-C和一點(diǎn)點(diǎn)C++(而GCC支持的相對(duì)較多)。Apple承諾,,Clang未來將會(huì)為C++提供全方位支持,,并且希望能夠在Snow Leopard的“服役期間”內(nèi)解決GCC的不兼容問題。 Apple為Clang帶來了兩條引人注目的特性,,那就是:更短的編譯時(shí)間和更快的可執(zhí)行文件,。Apple用其自身的軟件如iCal,,Address Book,Xcode,,以及一些第三方軟件如Adium和Growl進(jìn)行了測(cè)試,,Clang編譯器比GCC4.2快了近乎3倍。而對(duì)于編譯的可執(zhí)行文件運(yùn)行速度,,由Clang生成的可執(zhí)行文件則比GCC 4.2生成的可執(zhí)行文件快5~25%,。 同時(shí),與其前任GCC相比,,Clang提供了更為友好的開發(fā)環(huán)境,。我承認(rèn)這和多核CPU等新技術(shù)的優(yōu)勢(shì)并無很大關(guān)聯(lián),但這確實(shí)開發(fā)者在使用Clang時(shí)首先面對(duì)的,。 對(duì)于新手來說,,Clang具有可嵌入性,因此Xcode可以在IDE的一些交互功能中使用和最終的可執(zhí)行文件相同的編譯器結(jié)構(gòu),。在編譯過程中,,Clang創(chuàng)建并保留了大量詳細(xì)的元數(shù)據(jù)(metadata),從而有利于調(diào)試和錯(cuò)誤報(bào)告,。例如,,如果GCC返回如下錯(cuò)誤: 這時(shí)候很難說清問題究竟在哪,對(duì)于編程新手來說尤為如此,。好吧,,牛人或許已經(jīng)看出來問題在哪了(如果您在WWDC上看到了這個(gè)例子的話),但是我相信大家都會(huì)認(rèn)為Clang返回的錯(cuò)誤報(bào)告更有用: 可能個(gè)別菜鳥仍然不知所措,,但是至少可以清晰地看到問題究竟出在哪里了:與GCC含糊其辭的回應(yīng)相比,,Clang明明白白告訴你,哥們兒我不認(rèn)識(shí)“NSString”這個(gè)類型… 而且,,有時(shí)候即使錯(cuò)誤信息很明確,,具體細(xì)節(jié)卻未必如此,譬如GCC返回的這個(gè)錯(cuò)誤提示: 很明顯,,“無效的運(yùn)算符號(hào)+”,,但是這條語句中有4個(gè)“+”,究竟哪一個(gè)有問題呢,?多虧這些相近的元數(shù)據(jù)(metadata),,Clang可以明確地為您指出問題所在: 更進(jìn)一步抬杠。有時(shí)候錯(cuò)誤一目了然,,譬如這個(gè)GCC的例子,,在報(bào)錯(cuò)行以上的語句中丟失了一個(gè)分號(hào)“;”: 而Clang則更進(jìn)一步,,指出了究竟哪里丟失了這個(gè)分號(hào): 樓下同學(xué)說了,,這些都是“小事兒”,,完全是雞蛋里頭挑骨頭沒事兒找事兒,然而對(duì)于程序員來說,,Clang提供的這種更為細(xì)致和細(xì)心的提示是相當(dāng)貼心的,。當(dāng)然,還有一些細(xì)節(jié)對(duì)于程序員來說則意義重大了,,譬如這個(gè)基于LLVM的靜態(tài)分析器(static analyzer),。下圖顯示了靜態(tài)分析器發(fā)現(xiàn)并指出了一處可能的bug: 圖中高亮的部分明確地指出了任何一位程序員都有可能犯的bug。靜態(tài)分析器檢測(cè)到,,這一系列嵌套條件中,,“myName”變量在至少一條路徑里中未被初始化,從而使得在最后一行發(fā)送“mutableCopy”時(shí)存在潛在的危險(xiǎn),。 我相信Apple一定在其所有應(yīng)用程序和操作系統(tǒng)上運(yùn)行過靜態(tài)分析器,,以檢查一些潛在的bug。而對(duì)程序員來說,,能夠在龐大的代碼庫中自動(dòng)監(jiān)測(cè)潛在的bug,,無疑是一件非常爽的事情,對(duì)于自己開發(fā)平臺(tái)的程序員來說更是如此,。某種程度上來講,,Mac OS X 10.6.0中存在的bug比先前的任何一個(gè)10.x.0系統(tǒng)的bug都要少,無疑這將歸功于LLVM,。 通過Clang/LLVM的進(jìn)一步推廣和完善,,Apple終于能夠完全掌控其自己的開發(fā)平臺(tái)了。CodeWarrior的經(jīng)驗(yàn)顯然使Apple更加清晰地認(rèn)識(shí)到,,依賴于第三方平臺(tái)開發(fā)工具是相當(dāng)不明智的,。盡管花費(fèi)了許多年的時(shí)間,但我認(rèn)為即使最頑固的Metrowerks支持者也會(huì)認(rèn)為,,Snow Leopard提供的Xcode確實(shí)是個(gè)相當(dāng)不錯(cuò)的IDE,。 許多年以來Apple一直糾結(jié)于GCC計(jì)劃與Apple自身的編譯需求之間的脫節(jié),現(xiàn)在Apple終于痛下決心另辟蹊徑,。誠然,,GCC 4.2仍然是Snow Leopard的默認(rèn)編譯器,但是很顯然Apple已進(jìn)入的過渡期,。Clang自然是推薦的編譯器,,并且在可預(yù)見的將來,Apple的焦點(diǎn)將集中于此,。 上期連載中已經(jīng)提到,,硬件領(lǐng)域的技術(shù)進(jìn)步已經(jīng)使得軟件和操作系統(tǒng)成為了目前限制計(jì)算機(jī)性能的主要因素。或許您會(huì)有一些疑惑,,究竟這些編譯器將如何幫助開發(fā)者更好地利用現(xiàn)有的硬件資源呢?下期連載將為您分析這個(gè)問題,。 感謝您對(duì)Weiphone.com一如既往的關(guān)注與支持,。 對(duì)該連載的其他部分感興趣的請(qǐng)看下面的介紹鏈接: 【W(wǎng)EIP連載專稿】Snow Leopard:沒有新功能,但冰雪聰明【連載1/23】 【W(wǎng)EIP連載專稿】Snow Leopard:價(jià)格與策略——不止是寫個(gè)價(jià)簽兒那么簡單【連載2/23】 【W(wǎng)EIP連載專稿】Snow Leopard:安裝進(jìn)度條背后的故事【連載3/23】 【W(wǎng)EIP連載專稿】Snow Leopard:依舊是那副皮囊【連載4/23】 【W(wǎng)EIP連載專稿】Snow Leopard:64位時(shí)代,,就在不遠(yuǎn)的將來【連載5/23】 【W(wǎng)EIP連載專稿】QuickTime X:平滑過渡,,緩稱王【6/23】 【W(wǎng)EIP連載專稿】Snow Leopard:文件系統(tǒng)API的整合與統(tǒng)一【7/23】 【W(wǎng)EIP連載專稿】Snow Leopard:寶刀已鑄成 關(guān)二爺請(qǐng)砍人【8/23】
|
|