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

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

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

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

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

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

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 将如何实现?能提供一下思路不?

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