`
javasee
  • 浏览: 992691 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

用JavaScript编写一个Java虚拟机?谈谈哗众取宠的BicaVM

 
阅读更多

【程序员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接口未来100%就是这样,除了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)。

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/Swing,SWT等图形库(但可以引入,比如作者的示例中就引入了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的名字,全中国Java程序员有一个算一个,知道这项目者,能“他XYZ的”超过1000人吗?

如此实用的东西,在某国却和JSVM一样,极少有人理会,可洋人丢出来个垃圾,倒真有不少起哄帮腔的。难怪海外会有一小撮人说:“某国人干事,非得把世界上所有错误的方式都尝试遍了,才可能找到正确的那项选择”。

3
5
分享到:
评论
3 楼 andilyliao 2011-11-25  
其实他的初衷估计是为了将js统一成一个不需要再写兼容的东西,只要使用各种浏览器的虚拟机版本可以不需要费力就能写出兼容的js来,不过这个东西用在js上确实没意义,而且如果真的想搞虚拟机最好是在浏览器中嵌入插件,然后再写编译性语言,不过这个不用他做了 flash就这个东西,不过目前貌似也不咋样,还是规范浏览器标准比较好 这个咱们说了也不算。
2 楼 yin_bp 2011-11-24  
这个kimho膜拜了不少人,呵呵
1 楼 xkorey 2011-11-24  
写的不错,厉害。

相关推荐

    用JavaScript编写Java虚拟机?谈谈哗众取宠的BicaVM

    目睹某网络新闻,开篇明义便包含如下几行文字【程序员Artur Ventura,这位超级大牛,用JavaScript写了一个java虚拟机BicaVM】 继而再读,惊见其中“超级大牛”、“神人”等溢美之词不绝于耳,崇拜、神往之心...

    BicaVM JS版 for Java

    **BicaVM JS版 for Java** 是一个独特的项目,它实现了用JavaScript来模拟Java字节码的编译器和解释器。这个项目是由一位技术爱好者创建的,他以极高的技术水平将Java虚拟机(JVM)的核心功能移植到了JavaScript环境...

    对旋轴流风机毕业设计说明书.doc

    对旋轴流风机毕业设计说明书.doc

    【人工智能导论】支持向量机算法分析预习报告:深入理解SVM原理与鸢尾花数据集分类实验设计

    内容概要:本文档为2024~2025学年第二学期的人工智能导论课程中的支持向量机(SVM)算法分析实验预习报告。报告的主要目的是深入理解SVM的基本原理、核函数的作用以及参数调节对模型的影响,同时掌握特征选取的方法和重要性,为后续处理更复杂的数据集积累经验。实验任务包括对鸢尾花数据集进行特征探索,通过绘制相关性矩阵、径向可视化或各特征之间的关系矩阵图,深入了解数据集特征,并利用SVM算法实现对该数据集的准确分类。实验设备和环境要求操作系统为Windows、Linux或macOS均可,编程语言为Python,并搭配NumPy、Pandas、Scikit-learn和Matplotlib等科学计算和数据处理库。; 适合人群:具有一定的数学基础和编程经验,正在学习或从事机器学习和数据挖掘领域工作的学生或研究人员。; 使用场景及目标:①适用于需要理解SVM算法原理及其应用的学习者;②帮助研究者掌握如何使用SVM进行分类任务,特别是针对线性不可分的数据集;③为后续更复杂的机器学习项目提供理论和技术支持。; 其他说明:实验将在图书馆附楼计算中心进行,时间为2025年4月15日,由教师王艳指导并批阅。实验预习过程应详细记录设计思想、设计步骤等初步方案,可以通过程序流程图、伪代码、预定相关测试数据和预期结果等方式来表示。

    步进式推刚机设计说明书.doc

    步进式推刚机设计说明书.doc

    遗传算法优化BP神经网络提升交通流量预测精度的技术实现与应用

    内容概要:本文详细介绍了如何使用遗传算法优化BP神经网络,以提高交通流量预测的准确性。文中首先解释了BP神经网络的基本结构及其局限性,即容易陷入局部最优解的问题。随后,作者展示了遗传算法的工作原理,并将其应用于优化BP神经网络的权重和偏置。通过定义适应度函数、选择、交叉和变异等步骤,实现了对BP神经网络的有效改进。实验结果显示,优化后的BP神经网络在交通流量预测中的精度显著高于传统的BP神经网络,特别是在处理复杂的非线性问题时表现出色。 适用人群:对机器学习、深度学习以及交通流量预测感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要进行精确交通流量预测的应用场景,如智能交通系统、城市规划等领域。主要目标是通过遗传算法优化BP神经网络,解决其易陷入局部最优的问题,从而提高预测精度和稳定性。 其他说明:文中提供了详细的Python代码实现,帮助读者更好地理解和实践这一优化方法。同时,强调了遗传算法在全局搜索方面的优势,以及其与BP神经网络结合所带来的性能提升。此外,还讨论了一些具体的实施技巧,如适应度函数的设计、交叉和变异操作的选择等。 标签1,标签2,标签3,标签4,标签5

    电镀生产线自动化:基于组态王6.53与S7-200PLC的仿真系统设计与实现

    内容概要:本文详细介绍了基于组态王6.53和西门子S7-200PLC构建的电镀生产线仿真系统的开发过程。主要内容涵盖IO配置表、PLC梯形图编程、组态王动画脚本编写以及故障模拟等功能。文中展示了如何通过PLC控制行车移动、槽位状态监测、溶液参数调节等关键操作,并通过定时器、互锁机制、PID调节等技术手段实现精确控制。此外,还提供了详细的调试经验和优化方法,如调整定时器参数、优化动画效果等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是熟悉PLC编程和组态软件使用的专业人士。 使用场景及目标:适用于需要进行电镀生产线自动化调试和仿真的场合。主要目标是帮助工程师理解和掌握电镀生产线的自动化控制逻辑,提高调试效率,减少实际生产中的错误。 其他说明:文章不仅提供了理论知识,还包括大量实际操作经验和调试技巧,有助于读者更好地应用于实际工作中。附带的运行效果视频进一步增强了理解和应用效果。

    基于模糊神经网络的风光互补系统负荷功率智能分配与Simulink/Matlab仿真

    内容概要:本文详细介绍了利用模糊神经网络在风光互补发电系统中进行负荷功率智能分配的方法及其在Simulink/Matlab环境下的仿真实现。文中首先阐述了光伏和风机的MPPT算法,分别采用了扰动观察法和叶尖速比控制来优化能量捕获。接着重点讨论了模糊控制器的设计,通过定义输入变量(电网频率偏差、直流母线电压、SOC储能状态)和输出变量(各级负荷的功率分配系数),以及隶属度函数和规则库的构建,实现了对不同等级负荷的智能分配。此外,文章还探讨了VSC逆变器的控制策略,特别是在锁相环参数设置和LC滤波器方面的优化措施。最后,通过一系列仿真实验验证了系统的有效性和稳定性。 适合人群:从事电力电子、智能控制系统研究的技术人员,尤其是对风光互补发电系统感兴趣的科研工作者和工程技术人员。 使用场景及目标:适用于希望深入了解风光互补发电系统中负荷功率分配策略的研究人员和技术人员。目标是掌握模糊神经网络在电力系统中的应用,提高风光互补发电系统的可靠性和效率。 其他说明:文章提供了详细的代码片段和仿真技巧,帮助读者更好地理解和复现实验结果。同时,强调了调参过程中的一些常见问题和解决方案,有助于减少实际项目中的调试时间和成本。

    人工智能原理及应用 王万森 课后习题答案解析

    人工智能原理及应用 王万森 课后习题答案解析

    毕业设计(论文) 直动式液压往复泵设计说明书.doc.doc

    毕业设计(论文) 直动式液压往复泵设计说明书.doc.doc

    基于S7-200 PLC和MCGS的四路抢答器控制系统设计与实现

    内容概要:本文详细介绍了基于S7-200 PLC和MCGS组态软件构建的四路抢答器控制系统。首先阐述了系统的硬件架构,包括四个抢答按钮、复位按钮、指示灯和蜂鸣器的连接方式及其对应的PLC输入输出点配置。接着深入解析了梯形图程序的关键逻辑,如抢答互锁机制、时间戳判断防止多选手同时抢答以及主持人控制的抢答允许标志。此外,还探讨了MCGS组态画面的设计,包括动态效果展示、触摸屏变量绑定和抢答超时处理。最后,分享了一些调试经验和优化技巧,如反向电动势防护、接线注意事项和系统性能测试。 适用人群:对PLC编程和工控系统感兴趣的工程师和技术爱好者,尤其是有一定PLC基础的学习者。 使用场景及目标:适用于竞赛类节目或培训场所,用于搭建高效可靠的抢答系统,提升互动性和趣味性。主要目标是帮助读者掌握PLC编程技巧和MCGS组态设计方法,能够独立完成类似项目的开发。 其他说明:文中提供了详细的梯形图代码片段和接线图示例,便于读者理解和实践。同时强调了硬件防抖和软件互锁的重要性,确保系统的稳定性和可靠性。

    【Python爬虫技术】从入门到实战:核心库框架、项目案例及反爬应对策略综述

    内容概要:本文档详细介绍了Python爬虫的学习资源,涵盖基础知识、实例教程、反爬机制及应对策略、学习资源推荐和法律道德注意事项。基础知识部分讲解了核心库与框架(Requests库、BeautifulSoup、Scrapy框架)及其使用方法,数据提取技术(正则表达式、XPath、JSON处理)。实例教程按初级、中级、高级分类,包括静态网页抓取、动态内容抓取、分布式爬虫等项目。反爬机制与应对策略中列举了常见的反爬技术(User-Agent检测、IP频率限制等)及相应的解决办法(请求头伪装、IP代理池等)。最后强调了学习过程中应遵守的相关法律法规。; 适合人群:对Python爬虫技术感兴趣的初学者或有一定经验的研发人员。; 使用场景及目标:①掌握Python爬虫的基本概念和技术工具;②通过实例项目提高实际操作能力;③了解并应对反爬机制;④确保爬虫活动符合法律和道德规范。; 阅读建议:建议读者按照由浅入深的原则进行学习,在实践中不断巩固所学知识,同时注意遵守相关法律法规。

    蛋白酶的工厂设计说明书.doc

    蛋白酶的工厂设计说明书.doc

    松下FP-XH六轴伺服控制系统:多工位转盘控制程序解析及其应用

    内容概要:本文详细解析了松下FP-XH六轴伺服控制系统在汽车零部件生产线上的多工位转盘控制程序。该程序分为五个主要模块:主程序循环控制、手动模式处理、自动流程控制、报警处理模块以及输出刷新模块。每个模块的功能明确,如主程序负责调用各个子程序,报警处理模块将故障类型分颜色显示,便于快速定位问题。此外,文中介绍了点动控制中的防呆设计、绝对定位中的环形地址计算法、状态机设计用于管理六个轴的状态,以及异常处理逻辑如断电后的数据恢复机制。这些设计不仅提高了系统的稳定性和安全性,还在实际应用中表现出色,经过三年的实际运行验证。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是对PLC编程和多轴伺服系统感兴趣的读者。 使用场景及目标:适用于需要深入了解PLC编程技巧、多轴伺服控制逻辑、异常处理机制以及提高系统稳定性的场合。目标是帮助读者掌握松下FP-XH PLC在复杂工业环境中的应用方法,提升实际项目的开发效率。 其他说明:本文不仅提供了详细的代码解析,还包括了许多实用的编程技巧和注意事项,如注释的规范书写、变量命名规则等,有助于读者更好地理解和应用这些技术。

    基于三菱PLC和组态王的煤矿通风机瓦斯浓度自动控制系统设计与实现

    内容概要:本文详细介绍了利用三菱FX3U系列PLC和组态王6.55软件实现煤矿通风机根据瓦斯浓度自动调整转速的控制系统。主要内容涵盖硬件配置、梯形图编程逻辑、组态王画面设计、调试技巧等方面。系统通过瓦斯传感器实时监测瓦斯浓度,采用双比较器进行区间判断,确保风机在不同浓度下自动调整转速,并设有多种保护机制如急停按钮、报警指示灯等。此外,还讨论了传感器零点漂移补偿、数据滤波处理、PLC与组态王通信设置等关键技术点。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和SCADA系统有一定了解的人群。 使用场景及目标:适用于煤矿井下通风系统的自动化改造,旨在提高通风效率,降低瓦斯爆炸风险,保障井下作业人员的安全。具体目标包括实现瓦斯浓度超标时快速响应、减少人工干预、提升系统稳定性。 其他说明:文中提到的实际案例表明,该系统能够显著缩短应急响应时间,减少瓦斯超限持续时间,提高生产安全性。同时提供了详细的编程技巧和调试经验,有助于读者更好地理解和应用相关技术。

    基于多目标粒子群优化(MOPSO)算法的微电网经济运行与需求侧响应

    内容概要:本文探讨了在“双碳”目标背景下,利用多目标粒子群优化(MOPSO)算法解决风光储荷微电网系统的多目标经济运行优化问题。文章详细介绍了MOPSO算法的特点及其在处理发电不确定性和负荷波动方面的优势,展示了该算法的具体实现方式,包括粒子类和仓库类的设计,以及目标函数的构建。此外,文中还讨论了通过分时电价机制引导需求侧响应的应用实例,验证了MOPSO算法的有效性,实现了光伏消纳比例提升15%,风电消纳比例提升20%,系统运行成本降低12%。 适合人群:从事电力系统优化、新能源技术研究的专业人士,尤其是关注微电网调度和多目标优化算法的研究人员。 使用场景及目标:适用于希望提高微电网经济效益和能源利用率的项目,旨在通过智能化调度减少弃风弃光现象,降低系统运行成本,增强微电网的稳定性。 其他说明:文章强调了算法的实际应用价值,并展望了未来结合深度强化学习进一步提升优化性能的可能性。

    计算机二级office2016版教材.pdf

    计算机二级office2016版教材

    5+1档轿车手动变速箱设计说明书.doc

    5+1档轿车手动变速箱设计说明书.doc

    裂缝检测数据集,支持yolo v11格式的标注,1673张原始训练集图片,正确识别率99.4%

    裂缝检测数据集,支持yolo v11格式的标注,1673张原始训练集图片,正确识别率99.4% 图片详情可查看博文:https://backend.blog.csdn.net/article/details/147232357

Global site tag (gtag.js) - Google Analytics