一点一滴,编程人生
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
69 随笔 :: 0 文章 :: 25 评论 :: 0 Trackbacks
<
2012年1月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔分类
CentOS(1)
(rss)
debian(1)
(rss)
Hibernate框架(1)
(rss)
IE(2)
(rss)
iphone(28)
(rss)
java(4)
(rss)
javascript(5)
(rss)
JSTL(1)
(rss)
Linux(2)
(rss)
nutch(1)
(rss)
perl(1)
(rss)
php(1)
(rss)
Spring框架(2)
(rss)
SQLServer2000(1)
(rss)
tomcat(1)
(rss)
windows/dos(6)
(rss)
性能优化(2)
(rss)
感悟人生(4)
(rss)
数据库(3)
(rss)
网络(1)
(rss)
软件工程(2)
(rss)
随笔档案
2017年6月 (1)
2015年12月 (1)
2015年1月 (1)
2013年12月 (1)
2013年3月 (1)
2012年10月 (2)
2012年9月 (3)
2012年7月 (3)
2012年6月 (6)
2012年5月 (1)
2012年4月 (13)
2012年3月 (1)
2012年2月 (4)
2012年1月 (1)
2011年7月 (1)
2011年5月 (1)
2011年4月 (1)
2011年3月 (1)
2011年1月 (2)
2010年12月 (6)
2010年11月 (4)
2010年10月 (3)
2009年12月 (1)
2009年11月 (1)
2009年5月 (1)
2009年4月 (1)
2009年3月 (2)
2008年3月 (2)
2008年2月 (1)
搜索
最新评论
1. re: iphone线程中使用异步网络的悲催经历
用AFNetworking就省去这些麻烦了
--acc
2. re: java中split以"},{"分割
sdfghjkl;
--1234567
3. re: java中split以"."分割
原因是这样的,split的参数是String regex,也就是正则表达式,里面的.号有特殊作用
--cafewang
4. re: 控件类视图之UIControl的派生控件[未登录]
UIControlEventTouchChanged写错了吗,哥们
UIControlEventValueChanged
--wu
5. re: redis未授权访问缺陷导致系统被黑
@stone2083
谢谢您的建议
--writegull
阅读排行榜
1. java中split以"."分割(31359)
2. iPhone UIView的学习(9663)
3. iphone开发app icon 控件标准界面 大小,尺寸(8939)
4. UIScrollView的滑动(7664)
5. Eclipse Removing obsolete files from server 问题 (7266)
评论排行榜
1. redis未授权访问缺陷导致系统被黑(4)
2. java中split以"."分割(4)
3. SQLServer2000-1053错误(4)
4. 最近面试中遇到的海量数据库设计问题【转】(2)
5. 由12306.CN谈谈网站性能技术(2)
(转)用JavaScript编写一个Java虚拟机?谈谈哗众取宠的
今日目睹某网络新闻,开篇明义便包含如下几行文字
【程序员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)。
一句话,对比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一样,极少有人理会,可洋人丢出来个垃圾,倒真有不少起哄帮腔的。难怪海外会有一小撮人说:“某国人干事,非得把世界上所有错误的方式都尝试遍了,才可能找到正确的那项选择”。
目睹此情此景,我,真替某国的某些程序员感到悲哀。
posted on 2012-01-31 14:21
writegull
阅读(2252)
评论(1)
编辑
收藏
所属分类:
javascript
评论
#
re: (转)用JavaScript编写一个Java虚拟机?谈谈哗众取宠的
2012-02-03 23:33
allenny
也许人家只是好玩,但是我们都把他当正事儿了呢?
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
(转)用JavaScript编写一个Java虚拟机?谈谈哗众取宠的
jquery.validate使用攻略 第一部
jquery ajax cache问题
js实现页面跳转的几种方式
javascript getYear函数使用问题
Powered by:
BlogJava
Copyright © writegull