BicaVM:基于JavaScript的JVM-为什么呢?
上个周末,我曾去过Codebits,并做过关于计算机语言的介绍,你可以在这里看到它。如同这个帖子,我知道其语言组织的不好。
它的要点是:对于Javascript,我没有与其它人相同困难。Javascript当然是可爱的语言。每个人都喜欢它的函数特性,基于原型(prototype)的继承,但它缺乏一些我们20年前就确定是必不可少的东西(如模块化),甚至有一些严重的问题(如== VS ===是一种糟糕的处理标识的方式)。
还等什么?
我相信,浏览器应该有某种虚拟机,其中的语言之一,将是JavaScript,但如果你是用其他语言实现一个个项目,为什么不用相同的语言实现客户端功能呢?只要提供该语言的运行环境即可。越是如此,如我在讲演中指出的那样,我真正看到语言是作为工具的。你应该为每一问题争取最好的(结果)。
超越语言。
浏览器上的虚拟机,也有一些有趣的副作用。第一个是,你必须自动沙箱(automatically sandboxing),所以你可以允许页面中运行不可信的外部代码而没有问题。还可以冻结客户端的虚拟机,并将其发送回服务器端,让您有一个非常简单的方法,实现独立于浏览器的状态持久化。便携式设备没有插件架构,并不能运行Java Applets(并非我如此想但却是事实)。更激动人心的一点是,如果你的代码出现麻烦,你可以打包你的虚拟机,并将其发送回服务器端解剖分析。毫无疑问,写这样实现的最重要的原因是:因为我可以。
因为在一些项目中,我已经开始思考,我一直在寻找JavaScript虚拟机。我更倾向JVM,由于存在一个围绕它的很大的生态系统。然而,在JavaScript中唯一可用的JVM是Orto;我没有收集到没有任何文档或代码,是一个字节码到(Javascript)源码的转换器,转换器存在问题(诸如:在GWT中,你不能使用反射,因为在转换过程中将丢失所有类信息)。正因为如此,我决定从头开始一个JVM实现,这就是BicaVM出生的缘由。BicaVM是JVM实现的JavaScript实现,6个月前着手编写,上周五公布。
快或慢?
我所听到的最常见的抱怨之一是说Java和JV运行慢,在JavaScript中实现,它会更慢。我可以用很多解释来告诉你,你可以使用先发制人的代码转换,另外,在此类VM下,JIT实际上实现简单,你可以下载初始化包将加快初始化进程,但我想敬告克努特博士:“早期的优化是一切罪恶的根源”。
所以在这一点上BicaVM可以运行Java代码。您现在可以使用Java改变DOM,因为我对JNI的支持(映射为JavaScript函数)。哇!确实可以在iPad/iPhone上运行。
BicaVM下载:http://github.com/nurv/BicaVM。
附现场速写: