运行Java代码——在Javascript里
Joho Resig (即 JQuery 之神),是一位知名的“ JavaScript is the next big things”论者。他最近有机会参加了一个日本的 JavaScript 交流活动,给我们带回了一个有趣 JavaScript 项目 orto 的介绍。
这个名字看起来特别象 orz 的日本项目,可比它的名字看起来可要牛逼不少,它的野心是能让 java 代码运行在 JavaScript 之上,我的意思是 —— 用 JavaScript 做一个 JVM 出来。虽说可能不会全面支持 java 的所有特性,但至少能做一些有意思的东西,比如这个性能还不错的俄罗斯方块。
它的做法相当有意思,乃是将 java 的 byte code 转换为 JavaScript 代码,比如,你会看到这样的代码:
var orto336=orto350(orto333);
if(orto336.orto340!=orto310){orto223("java/lang/IllegalThreadStateException",null);
return ;
}
...
case 117:orto246[orto247-2]={high:(~orto246[orto247-2].high)
&0xffffffff,low:(~orto246[orto247-2].low+1)&0xffffffff};
if(orto246[orto247-2].low==0){orto246[orto247-2].high++;
orto246[orto247-2].high&=0xffffffff;
orto246[orto247-2].low=0;
}break;
...
case "CHECKBOX":orto171=orto188["orto/ui/CheckBox"];
break;
case "IMAGE":orto171=orto188["orto/ui/ImageButton"];
break;
case "RADIO":orto171=orto188["orto/ui/RadioButton"];
break;
显然“不是给人读的程序”(因为是给机器读的嘛)。orto 的特性包括:
* The result is able to handle threaded application code (translating the threads into a series of yields with setTimeout (mentioned in the presentation and demonstrated in the Tetris example).
* The application can use regular Java conventions for designing and constructing the UI (as shown here, as well). User Interface components are translated to, similar, HTML ones. It’s not apparent to what extent functionality is implemented, but it is to a certain degree.
* Keyboard interactions are able to be handled and translated to normal Java callbacks.
说起来,这和 gwt 很有一些“异曲同工”的意思。这让我联想到了 rhino,呵呵,你来实现我,我又来实现你,真是一个互操作的时代。畅想一下,如果在 rhino 的基础用上跑 orto 又或者在 orto 的基础上跑 rhino ,那会是一副什么光景,又有着怎样的意义呢?
也许是我个人食古不化的误解——私下里,个人认为 orto/gwt 这种项目让我有种“狗拿耗子多管闲事”的感觉,JavaScript 这样的脚本语言,不是正好适合于“需求变化迅猛”以及“强调快速原型化开发”的 UI 层么?找两个美工,一个 js 程序员就能做界面,不正是又快又好用么,为啥非要用 java 来写?追求语言上的纯粹?又或者是 js 程序员太难找?从后端的业务逻辑到前端的用户界面,全部都用 java 来包打天下,这是合适的做法么?如果说传统“应用程序”界面的程序,用用 swing/swt 什么的还可以理解,而在 web 一桶糨糊的现如今,这语言的 babel 之塔,就这么难以建立?
呵呵,JavaScript,我支持你。


Comments
这才是程序员的标准爱好
这个项目还是有他的意义所在,比如移植现在有的java app程序到不支持java 的终端上面,比如iPhone,
对于你最后一段的言论不是很认同!因为你的视角还只是停留在用js做网页设计上,其实JS等不知是做这些!
JohnnyMo,呵呵,我最后的一段意思是“用Java来包打天下也许并不是最好的做法”,也就是说“在合适的地方用合适的语言”也许更好。需要说明的是,Js确实是“最被误解的语言”,尤其是在适应“迅猛变化的需求”这一点上,它本应能够做得更多。只是在具体路径上,个人认为,应该是一条全新的,而不是orto这种“java跟随者”的路径。
Write a Comment