新型編譯器助JavaScript搞定類(lèi)型難題
譯文憑借專(zhuān)利技術(shù),JS++專(zhuān)注于編譯時(shí)類(lèi)型檢查,但并不屬于開(kāi)源項(xiàng)目。軟件供應(yīng)商O(píng)nux公司意識(shí)到JavaScript中的類(lèi)型安全問(wèn)題,并由此開(kāi)發(fā)出一種名為JS++的新語(yǔ)言,即JavaScript++。它能夠在編譯時(shí)中檢查類(lèi)型,而不再立足于運(yùn)行時(shí)執(zhí)行檢查。
Onux公司CEO兼JS++***Roger Poon表示,“Onux JS++編譯器將多種類(lèi)型統(tǒng)一為單一類(lèi)型,即統(tǒng)一外部類(lèi)型。通過(guò)提供完善的類(lèi)型系統(tǒng),各經(jīng)過(guò)聲明的類(lèi)型(例如字符串)將永遠(yuǎn)不會(huì)出現(xiàn)錯(cuò)誤,從而顯著提高應(yīng)用的開(kāi)發(fā)可靠性”。
Poon解釋稱(chēng),“JS++目前已經(jīng)發(fā)布早期預(yù)覽版本,其能夠編譯為JavaScript并繼承一切對(duì)JavaScript的支持能力,在編譯時(shí)中進(jìn)行錯(cuò)誤檢查使得JS++成為一種類(lèi)似于Java的語(yǔ)言”。
這項(xiàng)技術(shù)并非開(kāi)源,Poon表示該公司正在為其申請(qǐng)專(zhuān)利,這一防御手段主要是考慮到Facebook的Flow與谷歌的AtScript及SoundScript都在力爭(zhēng)解決同類(lèi)問(wèn)題。開(kāi)發(fā)者們無(wú)需刻意使用JS++,他指出。不過(guò)Onux公司的業(yè)務(wù)模式包括銷(xiāo)售支持服務(wù)以及針對(duì)特定用例提供附加庫(kù),例如圖表與圖形。標(biāo)準(zhǔn)庫(kù)以免費(fèi)形式發(fā)布。
Poon認(rèn)為JS++的閉源特性并不會(huì)嚇跑開(kāi)發(fā)者。事實(shí)上,他表示企業(yè)開(kāi)發(fā)者們樂(lè)于使用JS++,因?yàn)槠浣鉀Q了他們?nèi)粘9ぷ髦械囊淮笸袋c(diǎn)。“他們面對(duì)著數(shù)百萬(wàn)行JavaScript代碼,其中大部分屬于遺留代碼,”他表示。“而其中***的難題之一就是類(lèi)型檢查。”
JS++的競(jìng)爭(zhēng)對(duì)手為微軟的TypeScript,Poon表示后者的類(lèi)型系統(tǒng)“并不完善”。JS++符合ECMAScript 3,特定底層JavaScript的一套較早版本。Poon指出,大多數(shù)開(kāi)發(fā)者都在使用ES3或者ES5。
JavaScript開(kāi)發(fā)者與教育家Eric Elliott則對(duì)Onux公司的宣傳提出質(zhì)疑,他表示目前還沒(méi)有明確的證據(jù)表明完善的類(lèi)型系統(tǒng)能夠降低bug出現(xiàn)機(jī)率。“事實(shí)上,反倒有證據(jù)表明復(fù)雜的類(lèi)型系統(tǒng)有可能帶來(lái)更多bug,”他在最近的一篇文章中指出。“換言之,類(lèi)型正確性并不能保證程序的正確性。”Elliott個(gè)人更推崇測(cè)試驅(qū)動(dòng)型開(kāi)發(fā)機(jī)制。
Elliott表示,“我并沒(méi)用過(guò)JS++,但我沒(méi)有理由相信龐大的JavaScript社區(qū)會(huì)向其張開(kāi)懷抱。在此之前,很多項(xiàng)目都承諾為Web平臺(tái)帶來(lái)更出色的安全性,包括谷歌的SoundScript、谷歌的Dart語(yǔ)言、谷歌的Google Web Toolkit、微軟的TypeScript、Facebook的Flow以及我自己開(kāi)發(fā)的rtype項(xiàng)目等。”
























