新聞中心
現(xiàn)在市面上有大量的小巧語言,可以將你的代碼搬到Web上,異常輕松,而且很少有不足之處。

站在用戶的角度思考問題,與客戶深入溝通,找到雙湖網(wǎng)站設(shè)計(jì)與雙湖網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋雙湖地區(qū)。
每個編程人員都有自己青睞的一兩種語言。這年頭,要數(shù)JavaScript愛好者最幸運(yùn)了,因?yàn)樗麄兦嗖A的語言風(fēng)靡互聯(lián)網(wǎng),而互聯(lián)網(wǎng)風(fēng)靡全世界。然而,那些鐘情于其他編程語言的人卻陷入了困境。他們要么在一旁觀望,詛咒勢不可擋的HTML、CSS、JavaScript和Node.js,要么想辦法喜歡上它。
幸好,還有第三種方法讓你可以享受你所青睞的語言帶來的樂趣,同時仍可以將編寫的代碼部署到地盤越來越龐大的JavaScript:你只要轉(zhuǎn)換代碼,這個過程異常容易。性能可能會受到一點(diǎn)影響,但常常不如你想象的輕得多。然后,你可以將你的代碼發(fā)送到瀏覽器,擯棄試圖讓人們安裝可執(zhí)行文件的做法。
堅(jiān)定分子可能會覺得這是可鄙的投降,甚至有些人會覺得這有點(diǎn)是背叛,這種行為實(shí)在是叛逆之極,以至于你不想讓同行知道。還有些人則認(rèn)為,事實(shí)不是這么簡單,確實(shí)如此。讓代碼運(yùn)行起來是一回事,將各部分組合起來、構(gòu)建一個用戶界面需要大量的額外工作。
別再自憫自憐了,不過有相當(dāng)充分的理由使得這個想法更受人歡迎。首先,JavaScript引擎運(yùn)行起來比過去要快得多。其次,構(gòu)建一個Web用戶界面從來沒有這么容易過,這歸功于眾多框架和充足的HTML/CSS設(shè)計(jì)人才。第三,JavaScript變得有點(diǎn)像是一種通用語。如果你能把所有這些語言轉(zhuǎn)換成JavaScript,這些語言多得出奇,你還能把它們都聯(lián)系起來。
我們在這里看一下眾多的小巧語言,它們讓一些***的編程語言能夠編譯成JavaScript。將來一篇文章會介紹一些日漸式微的語言如何因遇上到瀏覽器而迎來重生。沒有理由好可憐或厭惡的。這些技術(shù)讓你在享受自己青睞的語言的同時,還可以在JavaScript運(yùn)行的任何環(huán)境下運(yùn)行。
#p#
Ruby
有許多選擇讓你在JavaScript環(huán)境下運(yùn)行時可以像Ruby編程人員那樣思考問題。
比如說,RubyJS就是一個JavaScript庫,它把許多基本數(shù)據(jù)類型添加到一個JavaScript對象中。你編寫的嚴(yán)格上來說是JavaScript,但特殊的Ruby對象在大多數(shù)時候運(yùn)行起來如同Ruby代碼。字符串(String)、數(shù)值(Number)、迭代器(Iterator)和計(jì)數(shù)器(Enumerator)等著你來使用。
如果嫌編寫運(yùn)行起來如同Ruby的JavaScript還不夠,Opal可以將Ruby源代碼直接轉(zhuǎn)換翻譯成JavaScript。其行為方式常常如同Ruby虛擬機(jī),但有時候則不然。比如說,Ruby的可變字符串可直接轉(zhuǎn)換成JavaScript的不可變字符串,這對一些應(yīng)用程序來說應(yīng)該不是問題,但會讓一些人抓狂。諸如此類的其他小的影響會導(dǎo)致在邊緣情況下大吃一驚。
對想要更多功能的那些人來說,HotRuby提供了一種更全面的解決方案,這種JavaScript虛擬機(jī)可以迅速處理Ruby操作碼。代碼庫變得有點(diǎn)舊了,但它為真正的擁躉提供了另一種選擇。
Java
很難知道當(dāng)初是什么啟發(fā)谷歌開發(fā)了Google Web Toolkit,這個預(yù)處理器可以將Java轉(zhuǎn)換成JavaScript。也許管理方熱愛Java,不想讓它消亡。也許是管理方有多余的Java人才無所事事,等著運(yùn)行Web。
無論是出于什么原因,谷歌出手了,經(jīng)常將Java用于***進(jìn)的Web產(chǎn)品。對有一大堆Java代碼,卻沒有時間重寫的人來說,Java是***的禮物。這門語言的價(jià)值就擺在那里,不過缺少一些不太常用的類,比如BigInteger;話雖如此,你通常能找到添加這些類的方法。用戶界面框架基本上是從Swing借鑒而來的,所以Swing開發(fā)人員會覺得很熟悉。其他開發(fā)人員不會覺得它太難學(xué)。
Google Web Toolkit絕不是Java編程人員的唯一選擇。Java2Script與Eclipse全面集成起來,GrooScript則可以轉(zhuǎn)換與Java關(guān)系密切的Groovy。
有幾個工具可以與JavaScript一起運(yùn)行Java虛擬機(jī)(JVM)字節(jié)碼,這個巧妙的想法讓你可以部署JAR文件,即便你沒有Java源代碼。Doppio和Node-jvm等一些工具是解釋器,TeaVM或Dragome等另一些工具可以將字節(jié)碼***地轉(zhuǎn)換成JavaScript。
#p#
Erlang
Erlang愛好者有幾個選擇。一種解決方案就是使用Erjang,這個工具在JVM上運(yùn)行Erlang,然后被用來與上述一種Java選擇一起運(yùn)行Java字節(jié)碼。是不是覺得這聽起來很簡單?
Shen是一種編譯器,可以將Erlang及其“近親語言”(比如Elixir、Joxa和Lol)轉(zhuǎn)換成JavaScript。如果你想在Node.js中運(yùn)行該代碼,還有程序包erlang-shen-js。
第三種選擇是使用LuvvieScript,Erlang的這個嚴(yán)格子集被賦予了訪問所有DOM對象的鉤子(hook)。你可以使用自己喜歡的Erlang結(jié)構(gòu),它可以將你的指令轉(zhuǎn)換翻譯成DOM能理解的指令。這并非一模一樣,但切實(shí)可行。
C
許多人會驚訝地發(fā)現(xiàn)自己居然可以將C或類似C的語言與JavaScript一起使用。當(dāng)然,基本的JavaScript語法與C很相似,但本質(zhì)不一樣。C讓你可以直接接觸內(nèi)存,而JavaScript隱藏了所有這些細(xì)節(jié)。C讓你可以處理指針,而JavaScript保護(hù)你避免危險(xiǎn)的功能。不過,借助一番巧妙的手法,這些差異是可以克服的。
稱LLJS是C的一個版本也許有失公允,但JavaScript的這個版本提供了靜態(tài)類型變量,編程員可以控制內(nèi)存――其實(shí)不是內(nèi)存本身,而是JavaScript的版本。文檔承諾無暫停執(zhí)行,因?yàn)闆]有廢料收集機(jī)制。
如果你想使用標(biāo)準(zhǔn)的C,Clue可以將C轉(zhuǎn)換成JavaScript和另外多種腳本語言(比如Perl或Lua)。開發(fā)人員甚至聲稱,對這些動態(tài)語言而言,一些代碼在JIT中運(yùn)行起來實(shí)際上比編譯成原生二進(jìn)制代碼后還要來得快。秘訣在于,JIT會在運(yùn)行期間注意到基本編輯器注意不到的方面,因?yàn)樗鼈儠^察程序運(yùn)行。
名氣***的也許是Emscripten,LLVM的這個改裝版已經(jīng)過重新組合,可以吐出面向asm.js的指令,而不是機(jī)器碼。秘訣在于,asm.js是JavaScript的狹窄子集,旨在很容易被SpiderMonkey之類的***JavaScript引擎所優(yōu)化。結(jié)果相當(dāng)出色:一些最有力的證據(jù)來自游戲界,Unity和Unreal這兩個引擎都可以在與HTML5兼容的瀏覽器中運(yùn)行游戲。
#p#
Python
Python是另一種流行的動態(tài)語言,很容易編譯成JavaScirpt。許多內(nèi)部功能很相似,一些***的差異在于語法方面。
更簡單的選擇(比如RapydScript和PyvaScript)僅僅提供類似Python的語法,可以直接轉(zhuǎn)換翻譯成JavaScript。它們會進(jìn)行幾個轉(zhuǎn)換,比如插入花括號與空白縮進(jìn)塊相匹配――它在瀏覽器中運(yùn)行。
更復(fù)雜的版本(比如PYXC-PJ和Pyjs)會積極地將Python轉(zhuǎn)換成JavaScript,常常形成可讀性很強(qiáng)的代碼――或者可讀性至少與原始代碼一樣易于強(qiáng)。Pyjs還隨帶窗口組件工具包,因而它與Google Web Toolkit很相似。
不過,最有意思的也許是PyPy,它堪稱軟件技術(shù)領(lǐng)域的杰作。Python進(jìn)去后,可以在用RPython編寫的Python解釋器上運(yùn)行,而RPython是Python的一個子集,旨在易于編譯。然后,該RPython被編譯成類似C的代碼,可以饋送到Emscripten。開發(fā)人員聲稱,一些Python基準(zhǔn)測試在SpiderMonkey中運(yùn)行起來比在CPython中來得快。
如果他們用Python和C能做到這一點(diǎn),你也能做到。
JavaScript的另一幅面孔
當(dāng)然,即便說到JavaScript,你也有替代方案。畢竟,一些人喜歡標(biāo)點(diǎn)符號,而另一些人不喜歡。CoffeeScript就適合不喜歡標(biāo)點(diǎn)符號的人。如果你需要用JavaScript來編寫程序,卻討厭輸入那么多的分號或花括號,那么CoffeeScript很適合你。
CoffeeScript的本質(zhì)與JavaScript一樣,因?yàn)樗鋵?shí)并不是一種語言。它是一種預(yù)處理器,增添了分號和花括號,所以你沒必要添加了。你可以打出程序,就像Ruby那樣簡潔,CoffeeScript可以將它轉(zhuǎn)換成JavaScript的簡化版。
這與用另一種語言來編程不一樣,因?yàn)槟愣x的變量和函數(shù)用起來仍然像JavaScript變量和函數(shù)。變量仍將是動態(tài)類型,所有煩人的小問題都仍在那里。運(yùn)算和加運(yùn)算符那古怪、過載的行為仍會讓你不勝厭煩,但你可以在輸入代碼方面節(jié)省一點(diǎn)時間。
CoffeeScript領(lǐng)域相當(dāng)多樣化。一旦世人認(rèn)識到它可以預(yù)處理代碼,許多人會加入其中。比如說,Iced CoffeeScript就像常規(guī)的CoffeeScript,不過多了幾個額外構(gòu)件,讓異步調(diào)用輸入和閱讀起來清楚一點(diǎn)、簡單一點(diǎn)。至少有十多個“近親語言”可以簡化你的特定編程方式。
本文標(biāo)題:方便編譯成JavaScript的熱門工具
文章來源:http://fisionsoft.com.cn/article/coigggj.html


咨詢
建站咨詢
