编译为JavaScript:不兼容性的另类解决方案
创始人
2024-06-09 05:10:24
0

搞过Web开发的都或多或少摸过JavaScript,而尽管Javascript无处不在,但还是很难让人喜欢它。在类似Google V8、Apple/WebKit的Nitro/SquirrelFish Extreme和Firefox的TraceMonkey这样的VM出现之前,Javascript的性能并不理想。多个浏览器间互不兼容的实现也让开发十分痛苦。jQuery和其他一些类库提供了方便好用的抽象,可以用同一种API进行编程,甚至消除不兼容性。

另一种解决方法:编译为JavaScript

解决该问题的另一种方法是彻底隐藏Javascript,将其作为编译目标。Google的GWT就是一个很成熟的例子,它接受Java代码(用Java API的一个子集写的),并将它编译为针对浏览器的Javascript。现实中GWT的真实案例之一就是Google Wave客户端。最近,一些其他语言的实现也加入了这一行列。

Avi Bryant,Smalltalk Seaside Web框架的作者,开发了Clamato,这是一种能编译为常见Javascript的Smalltalk方言。Avi在FutureRuby时InfoQ对他的采访中描述了Clamato的设计原则。

Clamato的指南页面允许你在浏览器中打开一个Clamato(Smalltalk)类浏览器,查看并编辑Clamato源代码。要查找类的话,就使用类浏览器左上角的文本框。比较有意思的是那个自托管的基于PEG的Clamato解析器(在文本框中键入“PP”可以看到解析器和各种组合程序的类)。从Seaside风格的HTML构造器(Clamato浏览器中的HTMLCanvas类)中我们可以看到Seaside的影子。可视化组件能用它来构造GUI,例如,指南中的计数器组件:

  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这一行定义了一个新的方法,范例的其他部分是方法体,它构建了带一个页眉和两个按钮的HTML,两个按钮配置了事件处理器。无独有偶,最近还出现了另一个基于浏览器的Smalltalk——GWT Smalltalk。它的作者Peter Fisk之前创造了Vista Smalltalk,它可以基于.Net,也可以基于ActionScript。GWT Smalltalk使用了GWT来生成运行在浏览器中的Jaavscript。

GWT Smalltalk刚处于起步阶段,但发展很快。目前已经支持使用XMPP,这让它能方便地与Google Wave进行交互(XMPP是Google Wave极其重要的一部分)。你可以从Industry Misinterpretations对Peter Fisk的采访播客和GWT Smalltalk的博客上获得更多细节。

讲完了Smalltalk,再来看看Python,它也有自己的Javascript编译器——pyjamas:

pyjamas是一个独立的Python到Javascript的编译器、一个AJAX框架/类库和一种Widget集API作为入门,最好的去处是在线pyjamas图书。

另一种能编译为Javascript的语言是Moby Scheme。让它如此引人注目的是它针对移动设备(目前是Android)的方式——将代码编译为Javascript。这一做法是可行的,因为有PhoneGap,而且Android里那个基于WebKit的浏览器自带了一个高效的Javascript VM。PhoneGap是一个允许Javascript访问本地设备功能的类库,这设备可以是加速度计、GPS、摄像头,也可以是类似通讯簿之类的东西。 PhoneGap的作者用它建起了沟通不同智能电话设备间的桥梁,它们可以有不同的编程环境,只要都有WebKit和快速的Javascript VM就可以了。通过让Javascript访问设备功能,就能为智能电话开发跨平台的应用。

【编辑推荐】

  1. IBM的EGL新工具:更强大的JavaScript?
  2. 十个最常用的JavaScript自定义函数
  3. JavaScript 2.0新特性抢先看 向经典语言靠近
  4. 开源语言排行榜:PHP与JavaScript受青睐
  5. 揭秘史上最昂贵的一行Javascript代码

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...