10 月,开发者不可错过的开源大数据大会-2021 WeDataSphere 社区大会深圳站 了解详情
写点什么

将 Javascript 作为编译目标:Clamato、GWT Smalltalk、Python、Scheme

2009 年 10 月 16 日

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

解决该问题的另一种方法是彻底隐藏 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,例如,指南中的计数器组件:

复制代码
renderOn: html
html h3 with: @counter.
html button
with: '+';
onClick: [@counter := @counter + 1. self reload].
html button
with: '-';
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 访问设备功能,就能为智能电话开发跨平台的应用。详见 InfoQ 对 PhoneGap 作者关于 PhoneGap 概览的采访

查看英文原文: Javascript as Compiler Target: Clamato, GWT Smalltalk, Python, Scheme - - - - - -

译者介绍:丁雪丰,网名 DigitalSonic,满江红开放技术研究组织核心成员, Spring Framework 2.0 & 2.5 文档翻译项目负责人,也参与了 Hibernate、Seam 等多份文档的翻译及校对工作。平时积极投身开源项目,是著名SFTP/SCP 软件WinSCP 的简体中文汉化者。参与翻译及编著的书籍有《Spring 攻略》《JRuby 实战》等。InfoQ 中文站内容团队,尤其是架构、SOA 和Ruby 社区需要您的参与,有意者请邮件至 editors【AT】cn.infoq.com

2009 年 10 月 16 日 08:281873
用户头像

发布了 135 篇内容, 共 52.9 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

AWS 发布 180 项新服务与功能

亚马逊云科技 (Amazon Web Services)

云计算 AWS

Week9总结

lggl

作业

《Python中的竞争性编程:128种提高编码技能的算法》PDF

计算机与AI

Python 算法

阿里大牛亲自总结整理的一线互联网公司面试真题及面经(阿里、网易、字节)

Java架构之路

Java 程序员 架构 面试 编程语言

java代码优化技巧及原理

积极&丧

万字庖解区块链跨链技术

CECBC区块链专委会

区块链

从“断臂求生”到一骑绝尘,航运巨头马士基如何利用区块链技术力挽狂澜?

CECBC区块链专委会

航运

架构师训练营第四周课后作业

万有引力

[架构师训练营第 1 期] 第 13 周学习总结

猫切切切切切

极客大学架构师训练营

mybatis一级缓存是啥?5个面试题回答你

田维常

mybatis

科普:区块链中的公链和私链的有什么区别?

CECBC区块链专委会

公有链 私有链

系统性能优化案例(秒杀系统)

积极&丧

架构师训练营第 13 周课后练习

薛凯

可视化指挥调度平台搭建,应急指挥调度监控中心建设方案

t13823115967

可视化 指挥调度

在wildfly中使用SAML协议连接keycloak

程序那些事

程序那些事 SAML openid SSO wildfly

性能优化总结(三)

Mars

封装 axios 取消重复请求

360技术

Web 开发

天下武功,唯”拆“不破之架构篇一 | 技术人应知的创新思维模型 (7)

Alan

架构 个人成长 思维 技术人应知的创新思维模型 28天写作

百分点助力常州科教城上线两大平台 打造国际智慧创新城

百分点认知智能实验室

AI 智慧城市

第十三周作业 (作业二)

Geek_83908e

架构师一期

Week9作业

lggl

北纬37°的浪漫与理性,穿越千年的信息之变

脑极体

泡泡玛特市值千亿背后,我们为什么会为盲盒买单?

脑极体

mybatis二级缓存,7个问题拿下它

田维常

mybatis

看了这个你还不懂mybatis缓存,单独找我

田维常

mybatis

Java架构速成笔记:五大专题,1345页考点 看完直接收获腾讯、京东、滴滴offer

比伯

Java 编程 架构 面试 计算机

智慧城市管理平台,多规合一平台搭建解决方案

t13823115967

智慧城市

架构师训练营第九周作业

丁乐洪

JVM 垃圾回收原理简述

Mars

架构师训练营 第九周课程

文江

联邦学习与安全多方计算

DataFunTalk

学习 AI

将Javascript作为编译目标:Clamato、GWT Smalltalk、Python、Scheme-InfoQ