用JavaScript编写一个Java虚拟机?谈谈哗众取宠的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马甲”啊PSBicaVM所谓的JNI接口未来100%就是这样除了JS能执行的一律让Python服务器按照请求去访问某接口再把执行结果返回给客户端借用香港江湖片的名词这简直就是“小弟”Java向“话事人”JavaScript求援再由“话事人”JavaScript找到“龙头”Python求帮最后由龙头大哥Python亲自出面帮Java小弟“摆平”问题的一系列标准动作。额滴神啊堂堂“编程兵器谱”排名第一位的Java居然要向Python“摇尾乞怜”别的先不说既然已经用JS解释JVM了你又何苦不直接用Java服务器运行你的演示程序呢楞把Python做为BicaVM运行的容器你让吾辈Java程序员情何以堪啊欺负我们搞Java的没活人了吗从来就有Jython存在的理由也从来就没有Pava存在的必要归根结底用JS跑执行JVM行不行行。解释字节码行不行也行怎么会不行不过还是等JavaScript自己先能编译成机器码后再说吧。但上面所提及的也无外是皮毛中的皮毛真正让小弟深恶痛绝的事情还要从下面两个项目讲起。JSVMJavaScript Virtual Machine项目JSVM。路过的大家有谁听说过这个项目没有我估计2008年以前学编程的朋友估计有的听说过有的没听说过而2008年以后出来混的恐怕就凤毛麟角了小弟这里也不强求。总之这是一个由国人万常华(wch3116)在2003年搞出来的结构上仿照标准Java原理上酷似于BicaVM的开源项目第一版最像JSVM2差点当然正确的语序应该是BicaVM酷似JSVM。PS在iteye上有个关于该项目讨论的“影子”残留不清楚来龙去脉的可以先预习http://www.iteye.com/topic/7252一句话对比BicaVM而言JSVM的实用性比BicaVM强太多了。要知道JS的语法结构本就与Java非常近似如果按照JSVM的思路整合到一个统一的OOP框架下那么结合当今的HTML5风潮实在是大有可为。可惜这么好的东西不但没多少人帮助发展更可恨当年还有几个拉便宜手说便宜话的假牛出来捣乱结果闹得该项目“无疾而终”实在是可惜可恨可怒可恼可叹而让我恨得牙根发痒的是我在某网站的BicaVM文章评论中又看到了这样的说法图2国内没人才我呸倒退十年国内就有这样的人才我敢拿人头保证绝对是先有JSVM后有BicaVM虽然两者实现上有差别但原理并无二致都是结构上的JS仿Java而且JSVM直接使用原生JS(当然也有自己的JSC语法甚至允许自由扩展)不模拟“完整版Java”绝对效率更高可结果呢只因JSVM作者是某国人空有人才却很难遇人识才最后更被归结到“不是人才”的那群里去了。小弟不知道JSVM的作者还在不在人世应该还在吧-_-如果您恰巧看到本文小弟这里顺便跟您说一声“我佩服您您在十年前就搞出来的东西洋人十年后才做出来才被某国人夸”公道自在人心大家有空时可以结合2004年的JSVM旧文再结合当前的BicaVM也比较一下国内对中西同性质不同效率项目明显JSVM更快的不同评价吧。PS个人始终喜欢JSVM第一版也就是高仿Java结构的那版后来的JSVM2或许因前版性能被某些闲人诟病于是作者牺牲了太多Java特性而搞了JSVM2改的已经不像Java类库更贴近JQuery之类也因此失去了原有的优良特性遗憾。Avian项目说完了国内的小弟再来介绍介绍国外的“不知名”JVM项目——Avian这是一个非常精巧的JVM虚拟机项目。Avian最大的特征就在于可以构建不足1MB的完整Java应用且无需额外的JRE。小弟粗略归纳了一下Avian的要素总结为如下四点。1、avian基于OpenJDK构建代码结构上与标准Java如出一辙没有丝毫例外存在。2、avian默认不支持AWT/SwingSWT等图形库但可以引入比如作者的示例中就引入了SWT库仅有io、lang、net、nio、security、text、util这七个标准Java工具包被预装近似于JavaME中CVM的实现。因此代码量相当之小。七个包的Java源码累积仅400多KB压缩后简直就是“微缩景观”。某种意义上说用avian写Java病毒也没问题不用图形库连微型虚拟机带class压缩后超过不过300KB。3、avian微型JVM默认支持Linux、Mac OS、Windows三种环境的运行及编译。不过因为开源从技术角度看移植到Android、iPhone等平台未尝不可(如果微软WP向普通用户开放C/C的支持那么也一样)。4、当然avian目前的缺点也有不少比如本身没有提供自执行的启动方式仅能通过C/C代码调用main函数启动需要用户对C/C有初步了解纯Java技术员难以上手。执行速度虽然并不比OpenJDK逊色因为主体就是从中提取的虽然作者替换了部分实现但始终不同于标准JRE有存在隐患之风险在更多示例出现前商业恐怕还难以让人放心。怎么样这还算是好东西吧但不是小弟说话张狂我要不提Avian的名字全中国Jav