一、方法的查找。 都是动态语言,属性和方法都是动态,ruby 的就是一些老过时的方法,查找还是优化查找。v8 的,直接 hidden class,放到变量 offset 偏移处,native code 的时候直接调用。
二、虚拟机 ruby2.0 了还是那个没长进的老虚拟机吧,v8 直接就编成 native code。
依我看,到 3.0 也不会有太大长进。
哎,大家下个 express 启动玩一玩,体验一下飞速吧。
@hhuai 我有一个问题想请教:请问 LZ 是怎么学到这些底层的东西的?我想学 cruby 和 js 底层的一些知识,苦于没有资料学习,LZ 有资料吗?
#3 楼 @whitecrow 我会的也只有点皮毛,资料: v8 在这 https://developers.google.com/v8 cruby 在 javaeye 中有点好东东,看看就可以了, http://thinkinginruby.group.iteye.com/group/wiki
你自己去实现一个虚拟机引擎就知道难点在哪了,变量,方法怎么存放,我写过一个很垃的,内存回收没搞定。
记得以前看过一个性能评测,即使是 lua-jit 也没能干过 V8,呵呵,当然更别说 Python 和 Ruby 了。 这也是有原因的: 比如 Ruby 和 Python 都有历史包袱问题等,完全从头另起炉灶实现 VM 阻力较大。 另外大多数 VM 性能极好的语言,背后都有强大的支持(财力和人力),比如:V8 是 Google, .Net 是微软,Java 以前是 Sun,现在是 Oracle。而 社区推动的语言 如:Ruby 的核心团队就是那几个 Orz。
function(){
v8(function(){
is(function(){
very(function(){
fast();
})
})
})
}
语言的好用性,永远和性能成反比。c 性能高,不好使,ruby 好使,性能低。 因为 ruby 干的活多啊!功能多啊,什么的,c 哪有闭包啊,这些实现都是要 code 的啊
代码实现上。ruby 真是挺乱,比 lua 乱。
V8 里面很多核心代码为了追求性能用汇编语言写的,这个没办法比。
但具体到做实际的项目,考虑的因素很多:语言的完备性,库的成熟度等等。
非实时性的项目,其实用 Ruby 性能也不会差到哪里去,但是语法和库会好很多。目前 Node.js 虽然库很多,但是大多都不太成熟,真正拿来做大项目,还是很坑爹的,比如说著名的 socket.io,我们用下来就非常非常坑爹,项目下一个版本将彻底扔掉,自己实现。
说到写非实时性的 web,用 node.js 的 express 虽然不是不可以,但是一旦服务器端逻辑复杂,特别是涉及到带有事务性分支流程判断,你的 js 回调我保证你写的吐血。
总之,更多关注应用的场景吧。node.js 绝对不是万灵药。