`
javasee
  • 浏览: 980738 次
  • 性别: 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环境...

    li_3ck_02a_1118.pdf

    li_3ck_02a_1118

    基于MATLAB的牛顿迭代法实现

    基于MATLAB的牛顿迭代法实现

    mellitz_3ck_01_0319.pdf

    mellitz_3ck_01_0319

    2025探索银行业人工智能驱动技术转型的投资回报率

    内容概要:文章阐述了银行采用人工智能(AI)技术替代传统系统的紧迫性和收益,讨论了通过构建现代化的数据和技术平台实现效率提升的方法,同时强调实施过程中确保数据质量和建立信任的重要性。文中提及,在金融行业中,若想优化业绩则必须拥抱AI带来的机遇,并为此进行经营模式的革新。根据Workday主办的研讨会内容,PwC金融服务风险与监管领导和Workday金融服务高层指出了大部分银行对AI认知不足的问题,强调AI在金融、人力资源以及IT等领域的广泛应用潜力及具体应用场景,如欺诈检测、技能映射和财务管理方面的作用。并且提到了AI部署过程中可能出现的技术与非技术难题及相应解决办法,鼓励金融机构及时投资建设新型基础设施,以保持竞争力。 适用人群:银行及其他金融机构管理人员;金融科技领域的专业研究人员;对企业数字化和智能化转型感兴趣的商业分析师、投资者;从事信息技术咨询工作的顾问。 使用场景及目标:本文可以帮助金融机构制定合理的技术发展战略规划,评估是否有必要推进AI技术转型,同时也为希望涉足银行科技项目的开发者提供了宝贵的市场洞察,帮助理解行业内普遍存在的困难与潜在的市场需求。此外,对于想要了解银行

    matlab程序代码项目案例论文+程序 基于在线优化的快速模型预测控制Fast model predicitive control with matlab interface.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_043071]Phase Manager and a Scalable Batching Solution.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_044386]1769-SM2 Compact I-O to DSI Module - Multi Drive Mode Operation - with.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_041232]Monitor I-O Connections in Logix.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    chromedriver-linux64-136.0.7058.0.zip

    chromedriver-linux64-136.0.7058.0.zip

    [AB PLC例程源码][MMS_042504]Logix5000 interface to Atlas-Copco Tool Controller over EtherNet-IP.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_042349]How to read-write data to-from a PLC using OPC in Visual Basic 6.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    电力工程领域中背压热电联产电厂的设计与参数计算

    内容概要:本文档介绍了背压热电联产(CHP)发电厂的详细设计步骤,涵盖确定各状态点的压力、温度、比焓以及质量流率的具体方法。主要内容围绕计算净电功率、燃料消耗及其效率展开,并提供了T-s图绘制的指南。针对每个组件(如蒸汽轮机、冷凝器、除氧器等),都列出了详细的效率假设和压力损失表,为实际工程应用提供了宝贵的参考资料和操作指导。同时,该作业任务要求学生从给定初始值中选择合适的操作条件进行系统模拟,并利用课程讲义和Moodle平台资料完成计算流程。 适用人群:对能源转换和动力设备设计感兴趣的学生或者初涉该领域的工程师。 使用场景及目标:旨在帮助学员深入了解并掌握背压热电联产装置的工作原理和技术指标计算的方法论,通过实践练习提高他们的问题解决能力。 其他说明:文档强调了稳态运行假设的重要性,即物质平衡等于能量输入等于输出的原则,并鼓励参与者借助附录提供的典型操作参数图表来寻找解决问题的方向。此外,它还特别指出对于一些变量值求解可能需要迭代法来进行调整,直至获得稳定结果。提交的报告必须含有一份详细的T-s图和其他必要附件。

    机器学习-市财政收入分析(含数据集)

    机器学习_市财政收入分析(含数据集)

    [AB PLC例程源码][MMS_046989]KAT with Code Sequencer.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    tracy_3cd_01_0318.pdf

    tracy_3cd_01_0318

    lusted_3cd_01_0918.pdf

    lusted_3cd_01_0918

    基于51的自动分拣系统设计20250307

    题目:基于51的自动分拣系统设计 主控:AT89C52 测距模块:超声波测距模块 甲醛传感器(ADC0832+滑动变阻器模拟) 粉尘传感器(PCF8591+滑动变阻器模拟) 净化模块(继电器驱动蓝灯) 排风模块(继电器驱动绿灯) 电源电路(5V降压为3.3V供电) 显示模块(LCD1602) 声光报警 按键(3个,切换阈值选择,阈值加减) 检测物体:开关模拟 电机驱动模块(继电器驱动直流电机转动) 功能: 1.显示屏显示甲醛,粉尘浓度可以切换设置阈值。 2.通过甲醛传感器检测车间环境,大于阈值时声光报警并启动净化模块。 3.通过粉尘传感器检测车间环境,大于阈值时声光报警并启动排风模块。 4.采用超声波传感器进行物体超高监测异常(大于XX距离)时触发声光报警 5.检测到物体(开关闭合)直流电机转动(模拟传送带)

Global site tag (gtag.js) - Google Analytics