計算機程序員一直受跨平臺問題的困擾,自從需要涉及第二個平臺開始。自那之后,問題的數(shù)量便迅速增加。如今,開發(fā)人員至少需要同時針對四個操作系統(tǒng)(以及更多細(xì)分的系統(tǒng))進(jìn)行開發(fā),運行這些操作系統(tǒng)的設(shè)備具有各種外觀、尺寸大小、分辨率、持久度、輸入方法、運營商網(wǎng)絡(luò)、連接速度和狀態(tài)、用戶界面的規(guī)定、應(yīng)用商店、部署及更新機制等。
全球許多開發(fā)人員一度曾將Java*視為跨平臺開發(fā)的首選。確實,Sun*(現(xiàn)在為Oracle)的這種結(jié)構(gòu)化語言持續(xù)在解決許多跨平臺問題,但它也會引入不少障礙,而其中最重要的一個障礙之一便是,類結(jié)構(gòu)甚至?xí)o最微小的程序功能造成沉重負(fù)擔(dān)。在開發(fā)人員轉(zhuǎn)為使用瀏覽器來進(jìn)行應(yīng)用交付時,Java帶來的負(fù)擔(dān)變得更加沉重;Java小應(yīng)用程序?qū)g覽器而言是不透明的黑箱,因為該語言對開發(fā)人員是封閉的(盡管我們非常尊重JCP)。
在Java使瀏覽器大戰(zhàn)愈演愈烈的同時,一種名稱相似的解析語言橫空出世。這種語言開始名叫Mocha,后來改為LiveScript,最后定名為JavaScript*。實踐證明,它在一些方面比Java更加實用,因為它能夠與瀏覽器進(jìn)行交互,并能夠使用HTML的級聯(lián)樣式表單 (CSS) 來控制內(nèi)容顯示。JavaScript支持很快便成為每個瀏覽器的標(biāo)準(zhǔn)功能。現(xiàn)在它就成為了HTML5編程語言,該語言被萬維網(wǎng)聯(lián)盟視為下一種標(biāo)記語言的標(biāo)準(zhǔn)。
為了更好地了解HTML5的成功原因、現(xiàn)狀以及未來發(fā)展方向,《Intel® Software Adrenaline》雜志采訪了英特爾軟件與服務(wù)事業(yè)部軟件開發(fā)產(chǎn)品部的資深首席工程師Moh Haghighat。Moh是英特爾針對Firefox*瀏覽器開發(fā)的首個JavaScript即時編譯器 (JIT) 的技術(shù)領(lǐng)導(dǎo)。他還領(lǐng)導(dǎo)了首個并行JavaScript JIT和并行瀏覽器布局引擎原型的開發(fā)工作,這二者都是在Firefox環(huán)境下進(jìn)行開發(fā)。他目前負(fù)責(zé)領(lǐng)導(dǎo)英特爾的HTML5技術(shù)戰(zhàn)略工作。
Intel Software Adrenaline:對于跨平臺開發(fā),HTML5為何優(yōu)于Java?
Moh Haghighat:啟動Java小應(yīng)用程序會讓我想起聲名狼藉的“加載Java”狀態(tài)欄。它在啟動時會看到大量進(jìn)度條,而不像如今的Web瀏覽器那樣具有快速響應(yīng)性,這起碼會讓人感到厭煩。這是該語言的根本問題,而[Adobe] Flash*在某種程度上解決了這個問題。哪怕是運行一小段Java代碼,也需要將整個JVM載入瀏覽器,而且在開始執(zhí)行這些代碼前還可能要執(zhí)行一大串類初始化程序。對于服務(wù)器端的代碼,您在服務(wù)器上針對大量客戶端重復(fù)運行相同的代碼,這種情形還可以接受。但在客戶端,您希望運行的代碼來自許多不同應(yīng)用,看到如此大量的進(jìn)度條會讓人無法承受。運行Java的最佳位置被證明是服務(wù)器端的中間件,Java應(yīng)用服務(wù)器先驅(qū)WebLogic*便是一款優(yōu)異的中間件。對于客戶端開發(fā)來說,這也是HTML5優(yōu)于Java的技術(shù)原因之一。雖說如此,在建立可管理編程語言的可行性,以及為更高效的高級語言(如JavaScript、PHP*、Python*和Ruby*)奠定基礎(chǔ)方面,Java發(fā)揮了重要作用。
Java還有一些確實非常出色的特性,可支持高效的代碼生成,而幾乎無需昂貴的編譯器分析,如針對寄存的基于類型和基于偏移量的歧義消除。
另一個問題在于Sun對Java項目的運作。Java一開始并不是開放技術(shù),同時Web技術(shù)也發(fā)生了演變。我認(rèn)為Java沒有成功的主要原因是Sun忽略了Web瀏覽器;在JavaScript變得日益強大的過程中,我們沒有看到Java在瀏覽器方面有多少創(chuàng)新。JavaScript異步使用模型 (AJAX) 讓瀏覽器成為出色的交互平臺,這使得許多基于Web的應(yīng)用大受歡迎,如Google* Docs。同時,這些應(yīng)用的復(fù)雜性不斷增加。例如,Gmail*的JavaScript代碼從2004年的近萬行增加到2010年的近50萬行,僅在六年間就增長了50倍(參見圖1)。隨著Web在全球的迅猛增長,已有數(shù)百萬網(wǎng)頁使用JavaScript,因此就已安裝的代碼庫而言,JavaScript目前是影響力最大的語言。在與瀏覽器集成方面,Java根本無法與JavaScript相提并論,因為JavaScript是瀏覽器的“原生”語言。另外,采用CSS和JavaScript的瀏覽器對UI和邏輯實現(xiàn)了完全分離,而Java平臺則沒有。
HTML5提供了更具吸引力的備選方案。您編寫的應(yīng)用可在任何類型的計算設(shè)備上運行,無論是電話、平板電腦、筆記本電腦、臺式計算機還是電視。如果設(shè)備支持HTML5,它就能在該設(shè)備上運行。您甚至無需進(jìn)行編譯;您只需要編寫程序,它就會被分發(fā)和執(zhí)行。
Lines of JavaScript Code: JavaScript代碼的行數(shù)
Gmail 50x larger in 6 years: Gmail在6年內(nèi)增長了50倍
圖1:Adam de Boor,Google
ISA:JavaScript和HTML已存在多年。最近有什么變化使HTML5對跨平臺開發(fā)如此有效?
MH:首先,在過去五年里,JavaScript的速度大幅提升,快了100倍(參見圖2),這在很大程度上得益于JavaScript JIT的出現(xiàn)。由于Web應(yīng)用復(fù)雜性和成熟度的顯著增加,JavaScript JIT成為一項不可或缺的技術(shù)。在JavaScript性能方面,2011年的最新Internet Explorer*版本比2001年的Internet Explorer快了100倍以上。其次,通過HTML5還突然引入了非常多的新功能。這可能是自瀏覽器推出以來,HTML實現(xiàn)創(chuàng)新最多的一次?,F(xiàn)在,HTML的渲染方式已經(jīng)與過去完全不同。在HTML5開始得到廣泛采用之后,其性能有了顯著提升,新功能也不斷增多。
Sunspider runs per minute: 每分鐘運行Sunspider的次數(shù)
Internet Explorer JavaScript performance improves 100x: Internet Explorer JavaScript性能提升了100倍
圖2:Luke Hoban,Microsoft
在技術(shù)采用方面,我觀察到了另一個值得關(guān)注的趨勢,IT部門日益發(fā)現(xiàn)HTML5極具吸引力,這是因為人們會在工作中使用各種不同設(shè)備。在如今的業(yè)務(wù)環(huán)境下,所涉及的智能手機、平板電腦和便捷式電腦達(dá)數(shù)百種之多。HTML5是唯一的可以讓IT的應(yīng)用跑在所有的設(shè)備上的方案。另外,公司也無力針對每種設(shè)備類型開發(fā)相關(guān)應(yīng)用并提供支持?,F(xiàn)在,基于HTML5的響應(yīng)式設(shè)計模式不斷出現(xiàn),這種設(shè)計模式能夠使內(nèi)容適應(yīng)設(shè)備的顯示屏尺寸。這些全都是HTML的重要組成部分,因為利用CSS和JavaScript您能動態(tài)地適應(yīng)不同的設(shè)備。
ISA:由于沒有靜態(tài)類型化功能,JavaScript一直因其僅局限于小型應(yīng)用程序而飽受批評。這種批評有道理嗎?
MH:JavaScript將來會提供類、模塊及類型化功能。負(fù)責(zé)下一個JavaScript版本相關(guān)工作的ECMAScript*委員會正在研究類的問題,類有利于維護(hù)工作。Java有類,C++也有類。JavaScript采用基于原型的繼承模式,這將允許您實現(xiàn)類,但它不強制要求以某種特定方式實現(xiàn)類。Java有自己針對類的對象模式;目前JavaScript語言沒有采用特定的類模式。它使讓用戶能夠?qū)崿F(xiàn)自己的類版本。
出于軟件工程的原因,在有大量開發(fā)人員參與項目的情況下,人們可能需要特定的類模式。對于大型項目,您可能需要做一些限制,例如需要定義特定的編碼原則等等。如果每個人都以自己的方式來使用JavaScript的話,其靈活性有可能會產(chǎn)生負(fù)面作用。
讓我們類比一下老早以前,F(xiàn)ORTRAN等編程語言都使用GOTO語句。但在20世紀(jì)70年代,Edsgar Dijkstra和其他人士發(fā)現(xiàn)以非結(jié)構(gòu)化方式使用GOTO語句有害無利。因此,程序員被要求使用結(jié)構(gòu)化的編程原則,而不要隨意使用GOTO語句,從而使編程語言和應(yīng)用更易于理解和維護(hù)。而在JavaScript變?yōu)榈图壵Z言,并在其基礎(chǔ)上能夠?qū)崿F(xiàn)大量高級語言時,同樣的事情也正在發(fā)生。JavaScript已變?yōu)樗^的“Web的匯編語言”。
ISA:您能給我們舉一個這種情形的例子嗎?
MH:最近,利用限制和結(jié)構(gòu)方面最令人振奮的例子,是Mozilla正在開發(fā)的一個名為 “asm.js” 的項目,以及另一個有關(guān)聯(lián)的名為“Emscripten”的項目,這基本上是一個將 LLVM位碼轉(zhuǎn)換為JavaScript 和HTML5 API的編譯器。(LLVM是Apple*公司贊助的一個項目,旨在為C/C++及其他語言開發(fā)低級虛擬機編譯器基礎(chǔ)架構(gòu)和語言前端)。Emscripten實質(zhì)上是將C++轉(zhuǎn)換為JavaScript。
Asm.js是Emscripten的一個可選目標(biāo),可以提供近乎原生的性能,與經(jīng)優(yōu)化的原生代碼相比,開銷通常降低2倍,而目前的全JavaScript則約為5倍。雖然JavaScript使用動態(tài)類型,但asm.js的要求(如類型推斷和注釋)仍然完全基于JavaScript規(guī)范。使用asm.js,用戶能夠編寫被證明是靜態(tài)類型的代碼。因此,在裝載時,用戶能夠驗證代碼實際上是靜態(tài)類型。提前編譯器能夠生成極其高效的代碼而無需進(jìn)行額外檢查,這與動態(tài)類型語言不一樣;這有助于同時提高靈活性和代碼效率。
如我們所說,這些語言都在不斷發(fā)展演變,將能夠把大段計算密集型代碼(如性能庫和游戲引擎)轉(zhuǎn)換為JavaScript,并使其可應(yīng)用于全球每一個設(shè)備成為可能。JavaScript正在成為高級語言的目標(biāo)語言。
ISA:目前有哪些與JavaScript相關(guān)的語言項目?
MH:現(xiàn)在有一種叫CoffeeScript*的語言,Microsoft也在開發(fā)TypeScript*語言,它是JavaScript的超集。Google的Dart*是一種采用類概念的新語言,也編譯為JavaScript。我不認(rèn)為有人能讓整個Web都更換Web瀏覽器的主語言。然而我相信,各種語言的優(yōu)異特性匯集到一起,將會對JavaScript規(guī)范產(chǎn)生影響,而這些特性也將會添加到規(guī)范中。這基本上實現(xiàn)了演變、向后兼容性以及增量改變。
ISA:英特爾直接推動了HTML5和JavaScript的發(fā)展。您能否給我們介紹一下這方面的相關(guān)工作?
MH:英特爾在并行技術(shù)領(lǐng)域一直居于領(lǐng)先地位,并行性使HTML5能夠滿足多核的要求。您需要利用并行性提高響應(yīng)速度和電源利用率。我們對Firefox*布局引擎的CSS規(guī)則匹配實現(xiàn)了并行化,使其具有可擴(kuò)展性。從編程語言的角度看,HTML5有一個稱作“Web Workers”的并行性API。它非常適用于粗粒度的后臺線程,但如果您希望執(zhí)行大量小型并行[任務(wù)],Web Workers則無法勝任。英特爾一直與Mozilla在并行陣列方面開展合作;我們在英特爾實驗室的同事首先建立了它的原型。目前我們正在努力解決實施中的所有問題,以使其進(jìn)入到ECMAScript,即JavaScript的官方語言規(guī)范中。
另外,我們還與Mozilla和Google進(jìn)行合作,以確?,F(xiàn)在已有(如Sandy Bridge和Ivy Bridge等等)的SIMD矢量功能可以真正采用JavaScript進(jìn)行編程。也就是說,如果您的JavaScript代碼對數(shù)據(jù)進(jìn)行并行的操作,那么該代碼會真正實現(xiàn)矢量化,同時開發(fā)人員使用這些功能時能夠保證代碼的執(zhí)行。這些功能終將進(jìn)入標(biāo)準(zhǔn)之中。
結(jié)束語
面對操作系統(tǒng)和設(shè)備不斷增多的趨勢,全球許多開發(fā)人員都在尋找經(jīng)濟(jì)高效的方法來創(chuàng)建他們的應(yīng)用。開發(fā)人員一度將Java視為跨平臺開發(fā)解決方案。與較老的語言相比,Java有許多優(yōu)勢,但Java沒有跟上移動平臺的快速創(chuàng)新步伐。開發(fā)人員現(xiàn)在轉(zhuǎn)為使用HTML5及其核心技術(shù),即JavaScript和CSS,來實現(xiàn)所需的最新功能和跨平臺可操作性,以便在當(dāng)今的應(yīng)用市場上取得成功。
據(jù)Haghighat說,英特爾工程師繼續(xù)在英特爾平臺上對HTML5引擎進(jìn)行優(yōu)化,并為HTML5增加新功能。英特爾將HTML5視為邁向透明計算時代的重要步驟。為進(jìn)一步加快HTML5的廣泛采用,英特爾現(xiàn)在還提供了英特爾® XDK,這是一個完整的開發(fā)套件,可幫助開發(fā)人員在Android、Firefox* OS和iOS等各種平臺上,構(gòu)建、測試、調(diào)試、打包及部署其HTML5應(yīng)用。
資源
英特爾® XDK HTML5開發(fā)環(huán)境:http://html5dev-software.intel.com/
英特爾® 開發(fā)人員專區(qū): http://software.intel.com/zh-cn/html5
關(guān)于作者
Edward J. Correia自1980年以來一直在計算機行業(yè)工作,那時他便開始銷售(并偶爾侵入)Atari 公司和 Commodore公司的電腦。除了為RH+M3撰稿,Correia目前還擔(dān)任CRN Test Center的編輯主任。CRN Test Center是一家計算機與網(wǎng)絡(luò)測試實驗室,于1995年在Correia的協(xié)助下成立。在脫離CRN的母公司United Business Media的10年期間,Correia曾擔(dān)任《Software Test & Performance》雜志的編輯和SD Times的執(zhí)行主編。