自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

方便編譯成JavaScript的熱門(mén)工具

譯文
開(kāi)發(fā) 前端 開(kāi)發(fā)工具
現(xiàn)在市面上有大量的小巧語(yǔ)言,可以將你的代碼搬到Web上,異常輕松,而且很少有不足之處。

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

每個(gè)編程人員都有自己青睞的一兩種語(yǔ)言。這年頭,要數(shù)JavaScript愛(ài)好者最幸運(yùn)了,因?yàn)樗麄兦嗖A的語(yǔ)言風(fēng)靡互聯(lián)網(wǎng),而互聯(lián)網(wǎng)風(fēng)靡全世界。然而,那些鐘情于其他編程語(yǔ)言的人卻陷入了困境。他們要么在一旁觀望,詛咒勢(shì)不可擋的HTML、CSS、JavaScript和Node.js,要么想辦法喜歡上它。

[[131743]]

幸好,還有第三種方法讓你可以享受你所青睞的語(yǔ)言帶來(lái)的樂(lè)趣,同時(shí)仍可以將編寫(xiě)的代碼部署到地盤(pán)越來(lái)越龐大的JavaScript:你只要轉(zhuǎn)換代碼,這個(gè)過(guò)程異常容易。性能可能會(huì)受到一點(diǎn)影響,但常常不如你想象的輕得多。然后,你可以將你的代碼發(fā)送到瀏覽器,擯棄試圖讓人們安裝可執(zhí)行文件的做法。

堅(jiān)定分子可能會(huì)覺(jué)得這是可鄙的投降,甚至有些人會(huì)覺(jué)得這有點(diǎn)是背叛,這種行為實(shí)在是叛逆之極,以至于你不想讓同行知道。還有些人則認(rèn)為,事實(shí)不是這么簡(jiǎn)單,確實(shí)如此。讓代碼運(yùn)行起來(lái)是一回事,將各部分組合起來(lái)、構(gòu)建一個(gè)用戶(hù)界面需要大量的額外工作。

別再自憫自憐了,不過(guò)有相當(dāng)充分的理由使得這個(gè)想法更受人歡迎。首先,JavaScript引擎運(yùn)行起來(lái)比過(guò)去要快得多。其次,構(gòu)建一個(gè)Web用戶(hù)界面從來(lái)沒(méi)有這么容易過(guò),這歸功于眾多框架和充足的HTML/CSS設(shè)計(jì)人才。第三,JavaScript變得有點(diǎn)像是一種通用語(yǔ)。如果你能把所有這些語(yǔ)言轉(zhuǎn)換成JavaScript,這些語(yǔ)言多得出奇,你還能把它們都聯(lián)系起來(lái)。

我們?cè)谶@里看一下眾多的小巧語(yǔ)言,它們讓一些***的編程語(yǔ)言能夠編譯成JavaScript。將來(lái)一篇文章會(huì)介紹一些日漸式微的語(yǔ)言如何因遇上到瀏覽器而迎來(lái)重生。沒(méi)有理由好可憐或厭惡的。這些技術(shù)讓你在享受自己青睞的語(yǔ)言的同時(shí),還可以在JavaScript運(yùn)行的任何環(huán)境下運(yùn)行。

#p#

Ruby

有許多選擇讓你在JavaScript環(huán)境下運(yùn)行時(shí)可以像Ruby編程人員那樣思考問(wèn)題。

[[131744]]

比如說(shuō),RubyJS就是一個(gè)JavaScript庫(kù),它把許多基本數(shù)據(jù)類(lèi)型添加到一個(gè)JavaScript對(duì)象中。你編寫(xiě)的嚴(yán)格上來(lái)說(shuō)是JavaScript,但特殊的Ruby對(duì)象在大多數(shù)時(shí)候運(yùn)行起來(lái)如同Ruby代碼。字符串(String)、數(shù)值(Number)、迭代器(Iterator)和計(jì)數(shù)器(Enumerator)等著你來(lái)使用。

如果嫌編寫(xiě)運(yùn)行起來(lái)如同Ruby的JavaScript還不夠,Opal可以將Ruby源代碼直接轉(zhuǎn)換翻譯成JavaScript。其行為方式常常如同Ruby虛擬機(jī),但有時(shí)候則不然。比如說(shuō),Ruby的可變字符串可直接轉(zhuǎn)換成JavaScript的不可變字符串,這對(duì)一些應(yīng)用程序來(lái)說(shuō)應(yīng)該不是問(wèn)題,但會(huì)讓一些人抓狂。諸如此類(lèi)的其他小的影響會(huì)導(dǎo)致在邊緣情況下大吃一驚。

對(duì)想要更多功能的那些人來(lái)說(shuō),HotRuby提供了一種更全面的解決方案,這種JavaScript虛擬機(jī)可以迅速處理Ruby操作碼。代碼庫(kù)變得有點(diǎn)舊了,但它為真正的擁躉提供了另一種選擇。

Java

方便編譯成JavaScript的熱門(mén)工具

很難知道當(dāng)初是什么啟發(fā)谷歌開(kāi)發(fā)了Google Web Toolkit,這個(gè)預(yù)處理器可以將Java轉(zhuǎn)換成JavaScript。也許管理方熱愛(ài)Java,不想讓它消亡。也許是管理方有多余的Java人才無(wú)所事事,等著運(yùn)行Web。

無(wú)論是出于什么原因,谷歌出手了,經(jīng)常將Java用于***進(jìn)的Web產(chǎn)品。對(duì)有一大堆Java代碼,卻沒(méi)有時(shí)間重寫(xiě)的人來(lái)說(shuō),Java是***的禮物。這門(mén)語(yǔ)言的價(jià)值就擺在那里,不過(guò)缺少一些不太常用的類(lèi),比如BigInteger;話(huà)雖如此,你通常能找到添加這些類(lèi)的方法。用戶(hù)界面框架基本上是從Swing借鑒而來(lái)的,所以Swing開(kāi)發(fā)人員會(huì)覺(jué)得很熟悉。其他開(kāi)發(fā)人員不會(huì)覺(jué)得它太難學(xué)。

Google Web Toolkit絕不是Java編程人員的唯一選擇。Java2Script與Eclipse全面集成起來(lái),GrooScript則可以轉(zhuǎn)換與Java關(guān)系密切的Groovy。

有幾個(gè)工具可以與JavaScript一起運(yùn)行Java虛擬機(jī)(JVM)字節(jié)碼,這個(gè)巧妙的想法讓你可以部署JAR文件,即便你沒(méi)有Java源代碼。Doppio和Node-jvm等一些工具是解釋器,TeaVM或Dragome等另一些工具可以將字節(jié)碼***地轉(zhuǎn)換成JavaScript。

#p#

Erlang

方便編譯成JavaScript的熱門(mén)工具

Erlang愛(ài)好者有幾個(gè)選擇。一種解決方案就是使用Erjang,這個(gè)工具在JVM上運(yùn)行Erlang,然后被用來(lái)與上述一種Java選擇一起運(yùn)行Java字節(jié)碼。是不是覺(jué)得這聽(tīng)起來(lái)很簡(jiǎn)單?

Shen是一種編譯器,可以將Erlang及其“近親語(yǔ)言”(比如Elixir、Joxa和Lol)轉(zhuǎn)換成JavaScript。如果你想在Node.js中運(yùn)行該代碼,還有程序包erlang-shen-js。

第三種選擇是使用LuvvieScript,Erlang的這個(gè)嚴(yán)格子集被賦予了訪問(wèn)所有DOM對(duì)象的鉤子(hook)。你可以使用自己喜歡的Erlang結(jié)構(gòu),它可以將你的指令轉(zhuǎn)換翻譯成DOM能理解的指令。這并非一模一樣,但切實(shí)可行。

C

[[131747]]

許多人會(huì)驚訝地發(fā)現(xiàn)自己居然可以將C或類(lèi)似C的語(yǔ)言與JavaScript一起使用。當(dāng)然,基本的JavaScript語(yǔ)法與C很相似,但本質(zhì)不一樣。C讓你可以直接接觸內(nèi)存,而JavaScript隱藏了所有這些細(xì)節(jié)。C讓你可以處理指針,而JavaScript保護(hù)你避免危險(xiǎn)的功能。不過(guò),借助一番巧妙的手法,這些差異是可以克服的。

稱(chēng)LLJS是C的一個(gè)版本也許有失公允,但JavaScript的這個(gè)版本提供了靜態(tài)類(lèi)型變量,編程員可以控制內(nèi)存――其實(shí)不是內(nèi)存本身,而是JavaScript的版本。文檔承諾無(wú)暫停執(zhí)行,因?yàn)闆](méi)有廢料收集機(jī)制。

如果你想使用標(biāo)準(zhǔn)的C,Clue可以將C轉(zhuǎn)換成JavaScript和另外多種腳本語(yǔ)言(比如Perl或Lua)。開(kāi)發(fā)人員甚至聲稱(chēng),對(duì)這些動(dòng)態(tài)語(yǔ)言而言,一些代碼在JIT中運(yùn)行起來(lái)實(shí)際上比編譯成原生二進(jìn)制代碼后還要來(lái)得快。秘訣在于,JIT會(huì)在運(yùn)行期間注意到基本編輯器注意不到的方面,因?yàn)樗鼈儠?huì)觀察程序運(yùn)行。

名氣***的也許是Emscripten,LLVM的這個(gè)改裝版已經(jīng)過(guò)重新組合,可以吐出面向asm.js的指令,而不是機(jī)器碼。秘訣在于,asm.js是JavaScript的狹窄子集,旨在很容易被SpiderMonkey之類(lèi)的***JavaScript引擎所優(yōu)化。結(jié)果相當(dāng)出色:一些最有力的證據(jù)來(lái)自游戲界,Unity和Unreal這兩個(gè)引擎都可以在與HTML5兼容的瀏覽器中運(yùn)行游戲。

#p#

Python

[[131748]]

Python是另一種流行的動(dòng)態(tài)語(yǔ)言,很容易編譯成JavaScirpt。許多內(nèi)部功能很相似,一些***的差異在于語(yǔ)法方面。

更簡(jiǎn)單的選擇(比如RapydScript和PyvaScript)僅僅提供類(lèi)似Python的語(yǔ)法,可以直接轉(zhuǎn)換翻譯成JavaScript。它們會(huì)進(jìn)行幾個(gè)轉(zhuǎn)換,比如插入花括號(hào)與空白縮進(jìn)塊相匹配――它在瀏覽器中運(yùn)行。

更復(fù)雜的版本(比如PYXC-PJ和Pyjs)會(huì)積極地將Python轉(zhuǎn)換成JavaScript,常常形成可讀性很強(qiáng)的代碼――或者可讀性至少與原始代碼一樣易于強(qiáng)。Pyjs還隨帶窗口組件工具包,因而它與Google Web Toolkit很相似。

不過(guò),最有意思的也許是PyPy,它堪稱(chēng)軟件技術(shù)領(lǐng)域的杰作。Python進(jìn)去后,可以在用RPython編寫(xiě)的Python解釋器上運(yùn)行,而RPython是Python的一個(gè)子集,旨在易于編譯。然后,該RPython被編譯成類(lèi)似C的代碼,可以饋送到Emscripten。開(kāi)發(fā)人員聲稱(chēng),一些Python基準(zhǔn)測(cè)試在SpiderMonkey中運(yùn)行起來(lái)比在CPython中來(lái)得快。

如果他們用Python和C能做到這一點(diǎn),你也能做到。

JavaScript的另一幅面孔

當(dāng)然,即便說(shuō)到JavaScript,你也有替代方案。畢竟,一些人喜歡標(biāo)點(diǎn)符號(hào),而另一些人不喜歡。CoffeeScript就適合不喜歡標(biāo)點(diǎn)符號(hào)的人。如果你需要用JavaScript來(lái)編寫(xiě)程序,卻討厭輸入那么多的分號(hào)或花括號(hào),那么CoffeeScript很適合你。

CoffeeScript的本質(zhì)與JavaScript一樣,因?yàn)樗鋵?shí)并不是一種語(yǔ)言。它是一種預(yù)處理器,增添了分號(hào)和花括號(hào),所以你沒(méi)必要添加了。你可以打出程序,就像Ruby那樣簡(jiǎn)潔,CoffeeScript可以將它轉(zhuǎn)換成JavaScript的簡(jiǎn)化版。

這與用另一種語(yǔ)言來(lái)編程不一樣,因?yàn)槟愣x的變量和函數(shù)用起來(lái)仍然像JavaScript變量和函數(shù)。變量仍將是動(dòng)態(tài)類(lèi)型,所有煩人的小問(wèn)題都仍在那里。運(yùn)算和加運(yùn)算符那古怪、過(guò)載的行為仍會(huì)讓你不勝厭煩,但你可以在輸入代碼方面節(jié)省一點(diǎn)時(shí)間。

CoffeeScript領(lǐng)域相當(dāng)多樣化。一旦世人認(rèn)識(shí)到它可以預(yù)處理代碼,許多人會(huì)加入其中。比如說(shuō),Iced CoffeeScript就像常規(guī)的CoffeeScript,不過(guò)多了幾個(gè)額外構(gòu)件,讓異步調(diào)用輸入和閱讀起來(lái)清楚一點(diǎn)、簡(jiǎn)單一點(diǎn)。至少有十多個(gè)“近親語(yǔ)言”可以簡(jiǎn)化你的特定編程方式。

原文鏈接:http://www.infoworld.com/article/2906809/javascript/cool-tools-for-compiling-your-favorite-language-to-javascript.html

責(zé)任編輯:王雪燕 來(lái)源: 51CTO
相關(guān)推薦

2018-10-31 14:00:05

LispJavaScript編程語(yǔ)言

2009-12-16 10:15:58

VS2003編譯

2021-08-18 08:00:00

Emscripten開(kāi)發(fā)技術(shù)

2021-05-18 14:25:30

Linux運(yùn)維Linux系統(tǒng)

2019-05-24 16:20:11

Python 開(kāi)發(fā)編程語(yǔ)言

2009-09-10 13:17:50

matlab函數(shù)

2010-03-23 10:47:46

python代碼

2025-04-02 07:40:30

2014-03-13 11:22:00

JavaScriptJS框架

2009-08-14 15:07:00

C#編譯過(guò)程

2023-09-04 07:30:03

Wasm匯編語(yǔ)言

2023-09-22 14:33:24

微軟Rust開(kāi)發(fā)工具

2019-08-13 09:45:45

GitHubJavaScript開(kāi)發(fā)者

2022-07-11 22:53:59

JavaScrip編譯信小程序

2023-07-27 07:29:44

.NetMSIL工具

2024-02-20 08:56:50

JavaScript模塊打包器

2020-06-18 09:04:59

CC++程序

2023-05-29 14:07:00

WebHaikei應(yīng)用程序

2022-11-01 08:53:00

GradleMaven構(gòu)建工具

2024-08-06 12:22:42

ZephirPHP源代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)