赞 | 0 |
VIP | 0 |
好人卡 | 7 |
积分 | 1 |
经验 | 5012 |
最后登录 | 2014-2-28 |
在线时间 | 163 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 163 小时
- 注册时间
- 2011-11-12
- 帖子
- 56
|
Ruby 1.9 加入了 Enumerator(枚舉器)的功能,默認情況下調用 #each 會在每次迭代過程中也同時進行枚舉器的處理,這是 1.8 沒有的開銷。你把這個 for 循環換成 while 應該就能看到速度的提升了(這裡的 for 循環調用的是 Range#each)。當然,這段代碼最終也不會和 1.8 有太大差距,因為這段代碼測的只不過是 Ruby 的堆和 GC 性能罷了,而在這兩個方面 Ruby 1.9 並沒有多大改進。
有興趣的話可以看 1.9 源 range.c 中有關 Range#each 的部分:- static VALUE
- range_each(VALUE range)
- {
- VALUE beg, end;
- RETURN_ENUMERATOR(range, 0, 0);
- beg = RANGE_BEG(range);
- end = RANGE_END(range);
- ...
- }
复制代码 其中 RETURN_ENUMERATOR 就是額外的開銷。
VX比起XP新的Ruby脚本解释引擎到底优秀在哪里?
VX 和 XP 用的 Ruby 版本是相同的,都是 1.8.1。VX Ace 升級到了 1.9.2,這個可以在幫助菜單裏查到,或是自行在腳本中打印 RUBY_VERSION 這個常量的值。
@各种压力的猫君
Ruby是靠虚拟机运行的,.Net最后总说还有个编译器不是。
Ruby 1.9 之前的實現是純粹的抽象語法樹求值器,也就是純解釋性實現,直到 1.9 才有了虛擬機 YARV。.NET 在微軟平臺下的虛擬機是 CLR,但它和 YARV 面向的語言完全不同,YARV 主要是服務 Smalltalk 式(類 Smalltalk 面向對象模型)高度動態語言的,而 CLR 的模型更類似於 JVM。前者在執行效率上很難超過後者,但後者在動態性能上(如各種元編程能力)也別想超過前者。
|
评分
-
查看全部评分
|