Ruby cruby 的实现和 js 引擎 v8 的实现,根本不在同一级别上。

hhuai · 2013年04月19日 · 最后由 cisolarix 回复于 2013年08月09日 · 5937 次阅读

一、方法的查找。 都是动态语言,属性和方法都是动态,ruby的就是一些老过时的方法,查找还是优化查找。v8的,直接hidden class,放到变量offset偏移处,native code的时候直接调用。

二、虚拟机 ruby2.0了还是那个没长进的老虚拟机吧,v8直接就编成native code。

依我看,到3.0也不会有太大长进。

哎,大家下个express启动玩一玩,体验一下飞速吧。

共收到 20 条回复

js的语法不受欢迎啊

#1楼 @chenge 你不喜欢还是? 试着写两句,其实还挺爽,比c爽多了,c的回调函数多难写,提出来写不说,关键是参数传得累啊,弄不好又得声明一个struct.

@hhuai 我有一个问题想请教:请问LZ是怎么学到这些底层的东西的?我想学cruby和js底层的一些知识,苦于没有资料学习,LZ有资料吗?

#2楼 @hhuai 你贴一个代码例子,与ruby对比下看。

可以找一些源代码贴出来大家一起分析看看,v8有钱支持,很多方面肯定做的好的也该学习学习:)

#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();
       })
     })
  })
}

#8楼 @jjym 可以用咖啡...

V8 不用支持运算符重载, 也完全不支持多线程, 只考虑沙箱运行, 是容易优化很多

#10楼 @luikore 连list comprehension、yield什么的都不支持的V8,除了刷benchmark比较好看,没啥用,难道有谁真心想在V8上写JavaScript...

#12楼 @luikore 改成速度比C++快,并行度比go高,库函数比haskell效率,bytecode比Java向前兼容时间长吧...

#10楼 @luikore 嗯,Ruby 的复杂度远大于 JavaScript.

语言的好用性,永远和性能成反比。c性能高,不好使,ruby好使,性能低。 因为ruby干的活多啊!功能多啊,什么的,c哪有闭包啊,这些实现都是要code的啊

代码实现上。ruby真是挺乱,比lua乱。

V8里面很多核心代码为了追求性能用汇编语言写的,这个没办法比。

但具体到做实际的项目,考虑的因素很多:语言的完备性,库的成熟度等等。

非实时性的项目,其实用Ruby性能也不会差到哪里去,但是语法和库会好很多。目前Node.js虽然库很多,但是大多都不太成熟,真正拿来做大项目,还是很坑爹的,比如说著名的socket.io,我们用下来就非常非常坑爹,项目下一个版本将彻底扔掉,自己实现。

说到写非实时性的web,用node.js的express虽然不是不可以,但是一旦服务器端逻辑复杂,特别是涉及到带有事务性分支流程判断,你的js回调我保证你写的吐血。

总之,更多关注应用的场景吧。node.js绝对不是万灵药。

#12楼 @luikore 怪不得你写了一篇语言比较的文章,原来原因在这里啊。一个错误的问题引发了一篇用处不大的文章,何苦......

#16楼 @robbin ...没说要拿express来替代rails啊,只是在吐槽ruby的实现性能。你说的也没错,语言性能 != 开发银弹。这个不冲突,不冲突。

#16楼 @robbin 请问 socket.io 将如何实现?能提供一下思路不?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册