目睹某网络新闻,开篇明义便包含如下几行文字【程序员Artur Ventura,这位超级大牛,用JavaScript写了一个java虚拟机BicaVM】
继而再读,惊见其中“超级大牛”、“神人”等溢美之词不绝于耳,崇拜、神往之心溢于言表。仿佛BicaVM是天上有地下无的创举,仿佛Artur Ventura是继比尔盖茨,乔布斯之后的第三位IT业领军人。然而很可惜,小弟准备要“侮辱”一下这位“大牛”了。
只因在小弟看来,这篇文章,乃 至其中介绍的BicaVM,都如某女士对某御用文人的评价一样“实无耻之尤,足令人作三日呕”。什么“自动化的沙盒”、“具有支持JNI接口,DOM模型 等特点”,说起来果然天花乱坠,似乎有什么高明玄妙。

  其实归根结底,BicaVM无非由两种东西所构成,一种叫炒作,而另一种,叫做扯淡。

  众所周知,本来JS是解释性的语言,而BicaVM是什么东西,是一个能够让JS运行字节码(直接读取class)的WEB版JVM。也是说,他要用
自身还需浏览器进行解释的JavaScript,再去“解释”已编译为Class的Java Byte Code……上苍啊!即便不讨论性能问题,这也根本是“让翻译找翻译去翻译句子给你听”式的绕口令了吧?别的不讲,单如此脑残的行为,还有人管这叫“大 牛”?别“牛”了,不被评价为“猪”,算别人嘴下积德!

  再看看BicaVM的类库,既然实现目的是在浏览器中使用JVM,按理说应该是为前端WEB开发搞的吧?可号称已经模拟了“60% Byte Code”功能的BicaVM中,我却连半个可视化组件也看不见(当然,可以调取JS指令构建出“窗体”,但这和Java有半毛钱关系吗?直接写不更快, 本来语法近似),半个网络工具也找不到,能找到的,是一堆堆冗余却无用的类加载器与Java基础数据类型的JS实现(N多对于JS来讲重复的“轮 子”……)

  比如Java中的Long,在BicaVM中需要如此实现(部分源码,太长无法显示全,位于22KB的long.js中)。

图1:

  不知道各位都看见了什么,我所见者,仅仅是一个蠢货为了让BicaVM中基本数据类型与标准Java保持一致,而强迫弱类型的JS去做冗长的强类型运算 而已——凡有点JS开发经验者,你们能相信在客户端跑着如此海量的科学计算的后果吗?能相信这是正常人类想出来的办法吗?(BicaVM的基本数据类型全 是这样“造”出来的,所以只要用,这些运算没完了)

  可以说,BicaVM仅仅只是一个概念,一个看上去也不美的,JS仿“完整版Java”的概念(而且主要部分都没实现),可以说,其中真正能起作用的东西,连半个也不存在。(另外,连概念也不是他先想到的,下文有论及)

  此外,不单这个项目毫无价值,下载BicaVM后我还愕然发现,该项目作者居然在BicaVM项目中要求使用Python运行服务…… 你,你玩Javaer呢?!

  去看看他的webserver文件夹吧,可以说已经把BicaVM与Python绑死在一起了。这多像一个Java Byte Code被翻译为JavaScript后(其实是翻译String,然后解析为JS),再由JS向Python服务器发送请求处理Java代码的—— “Python马甲”啊!(PS:BicaVM所谓的JNI接口未来是这样,除了JS能执行的,一律让Python服务器按照请求去访问某接 口,再把执行结果返回给客户端)

  借用香港江湖片的名词,这简直是“小弟”Java向“话事人”JavaScript求援,再由“话事人”JavaScript找到“龙头”Python求帮,后由龙头大哥Python亲自出面帮Java小弟“摆平”问题的一系列标准动作。

  额滴神啊,堂堂“编程兵器谱”位的Java,居然要向Python“摇尾乞怜”?!别的先不说,既然已经用JS解释JVM了,你又何苦不直接用 Java服务器运行你的演示程序呢?楞把Python做为BicaVM运行的容器,你让吾辈Java程序员情何以堪啊?!欺负我们搞Java的没活人了 吗?!从来有Jython存在的理由,也从来没有Pava存在的必要!

  归根结底,用JS跑执行JVM行不行?行。解释字节码行不行?也行,怎么会不行?不过,还是等JavaScript自己先能编译成机器码后再说吧。

  但上面所提及的,也无外是皮毛中的皮毛,真正让小弟深恶痛绝的事情,还要从下面两个项目讲起。

  JSVM(JavaScript Virtual Machine)项目

  JSVM。路过的大家有谁听说过这个项目没有?我估计2008年以前学编程的朋友估计有的听说过,有的没听说过,而2008年以后出来混的恐怕凤毛麟角 了,小弟这里也不强求。总之,这是一个由国人万常华(wch3116)在2003年搞出来的,结构上仿照标准Java,原理上酷似于BicaVM的开源项 目(第一版像,JSVM2差点,当然,正确的语序应该是BicaVM酷似JSVM)。

  一句话,对比BicaVM而言,JSVM的实用性比BicaVM强太多了。

  要知道,JS的语法结构本与Java非常近似,如果按照JSVM的思路整合到一个统一的OOP框架下,那么结合当今的HTML5风潮,实在是大有可为。 可惜这么好的东西,不但没多少人帮助发展,更可恨当年还有几个拉便宜手说便宜话的假牛出来捣乱,结果闹得该项目“无疾而终”!实在是可惜,可恨,可怒,可 恼,可叹!