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

編譯為JavaScript:不兼容性的另類(lèi)解決方案

開(kāi)發(fā) 前端
JavaScript很常用,但也因?yàn)槠洳患嫒菪院芰钊祟^疼。一個(gè)另類(lèi)的解決方法就是,將其他語(yǔ)言編譯為JavaScript。本文列舉了GWT、Smalltalk、Python等語(yǔ)言將JavaScript做為編譯目標(biāo)的情況。

搞過(guò)Web開(kāi)發(fā)的都或多或少摸過(guò)JavaScript,而盡管Javascript無(wú)處不在,但還是很難讓人喜歡它。在類(lèi)似Google V8、Apple/WebKit的Nitro/SquirrelFish Extreme和Firefox的TraceMonkey這樣的VM出現(xiàn)之前,Javascript的性能并不理想。多個(gè)瀏覽器間互不兼容的實(shí)現(xiàn)也讓開(kāi)發(fā)十分痛苦。jQuery和其他一些類(lèi)庫(kù)提供了方便好用的抽象,可以用同一種API進(jìn)行編程,甚至消除不兼容性。

另一種解決方法:編譯為JavaScript

解決該問(wèn)題的另一種方法是徹底隱藏Javascript,將其作為編譯目標(biāo)。Google的GWT就是一個(gè)很成熟的例子,它接受Java代碼(用Java API的一個(gè)子集寫(xiě)的),并將它編譯為針對(duì)瀏覽器的Javascript。現(xiàn)實(shí)中GWT的真實(shí)案例之一就是Google Wave客戶(hù)端。最近,一些其他語(yǔ)言的實(shí)現(xiàn)也加入了這一行列。

Avi Bryant,Smalltalk Seaside Web框架的作者,開(kāi)發(fā)了Clamato,這是一種能編譯為常見(jiàn)Javascript的Smalltalk方言。Avi在FutureRuby時(shí)InfoQ對(duì)他的采訪(fǎng)中描述了Clamato的設(shè)計(jì)原則。

Clamato的指南頁(yè)面允許你在瀏覽器中打開(kāi)一個(gè)Clamato(Smalltalk)類(lèi)瀏覽器,查看并編輯Clamato源代碼。要查找類(lèi)的話(huà),就使用類(lèi)瀏覽器左上角的文本框。比較有意思的是那個(gè)自托管的基于PEG的Clamato解析器(在文本框中鍵入“PP”可以看到解析器和各種組合程序的類(lèi))。從Seaside風(fēng)格的HTML構(gòu)造器(Clamato瀏覽器中的HTMLCanvas類(lèi))中我們可以看到Seaside的影子??梢暬M件能用它來(lái)構(gòu)造GUI,例如,指南中的計(jì)數(shù)器組件:

  1. renderOn: html  
  2.   html h3 with: @counter.  
  3.   html button  
  4.     with: '+';  
  5.     onClick: [@counter := @counter + 1. self reload].  
  6.   html button  
  7.     with: '-';  
  8.     onClick: [@counter := @counter - 1. self reload]. 

renderOn: html這一行定義了一個(gè)新的方法,范例的其他部分是方法體,它構(gòu)建了帶一個(gè)頁(yè)眉和兩個(gè)按鈕的HTML,兩個(gè)按鈕配置了事件處理器。無(wú)獨(dú)有偶,最近還出現(xiàn)了另一個(gè)基于瀏覽器的Smalltalk——GWT Smalltalk。它的作者Peter Fisk之前創(chuàng)造了Vista Smalltalk,它可以基于.Net,也可以基于ActionScript。GWT Smalltalk使用了GWT來(lái)生成運(yùn)行在瀏覽器中的Jaavscript。

GWT Smalltalk剛處于起步階段,但發(fā)展很快。目前已經(jīng)支持使用XMPP,這讓它能方便地與Google Wave進(jìn)行交互(XMPP是Google Wave極其重要的一部分)。你可以從Industry Misinterpretations對(duì)Peter Fisk的采訪(fǎng)播客和GWT Smalltalk的博客上獲得更多細(xì)節(jié)。

講完了Smalltalk,再來(lái)看看Python,它也有自己的Javascript編譯器——pyjamas:

pyjamas是一個(gè)獨(dú)立的Python到Javascript的編譯器、一個(gè)AJAX框架/類(lèi)庫(kù)和一種Widget集API作為入門(mén),最好的去處是在線(xiàn)pyjamas圖書(shū)。

另一種能編譯為Javascript的語(yǔ)言是Moby Scheme。讓它如此引人注目的是它針對(duì)移動(dòng)設(shè)備(目前是Android)的方式——將代碼編譯為Javascript。這一做法是可行的,因?yàn)橛蠵honeGap,而且Android里那個(gè)基于WebKit的瀏覽器自帶了一個(gè)高效的Javascript VM。PhoneGap是一個(gè)允許Javascript訪(fǎng)問(wèn)本地設(shè)備功能的類(lèi)庫(kù),這設(shè)備可以是加速度計(jì)、GPS、攝像頭,也可以是類(lèi)似通訊簿之類(lèi)的東西。 PhoneGap的作者用它建起了溝通不同智能電話(huà)設(shè)備間的橋梁,它們可以有不同的編程環(huán)境,只要都有WebKit和快速的Javascript VM就可以了。通過(guò)讓Javascript訪(fǎng)問(wèn)設(shè)備功能,就能為智能電話(huà)開(kāi)發(fā)跨平臺(tái)的應(yīng)用。

【編輯推薦】

  1. IBM的EGL新工具:更強(qiáng)大的JavaScript?
  2. 十個(gè)最常用的JavaScript自定義函數(shù)
  3. JavaScript 2.0新特性搶先看 向經(jīng)典語(yǔ)言靠近
  4. 開(kāi)源語(yǔ)言排行榜:PHP與JavaScript受青睞
  5. 揭秘史上最昂貴的一行Javascript代碼
責(zé)任編輯:yangsai 來(lái)源: InfoQ
相關(guān)推薦

2015-03-12 10:33:47

Javascript兼容性解決

2010-09-06 14:46:25

CSSXHTML

2013-06-17 15:26:35

WP開(kāi)發(fā)WindowsPhonWindows8兼容性

2010-09-16 10:50:55

CSS兼容IE6

2010-09-15 10:25:18

IE7IE8CSS兼容性

2010-08-26 09:09:11

CSS兼容性

2010-09-15 10:32:54

IE8兼容

2010-10-09 12:58:59

JS腳本兼容

2010-08-11 15:17:51

瀏覽器兼容性問(wèn)題

2010-08-17 15:26:38

IE7IE8CSS兼容性

2022-03-01 17:24:33

iOS兼容性方案

2010-09-16 11:08:50

JSIEFirefox

2023-04-17 19:43:54

兼容性測(cè)試軟件測(cè)試

2011-04-12 16:51:29

Javascript兼容性

2012-02-10 09:12:29

微軟WOAARM

2010-08-20 11:01:10

IE7IE8CSS

2010-08-17 15:58:01

IE8兼容性視圖

2010-10-08 15:00:08

FirefoxJavaScript兼

2009-03-07 09:49:07

Windows 7兼容性

2011-03-14 15:47:34

DB2數(shù)據(jù)庫(kù)代碼
點(diǎn)贊
收藏

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