设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

谁说Ruby效率低[防误解:Ruby被运行效率低,但运行效率高]

查看数: 3987 | 评论数: 15 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-2-20 13:26

正文摘要:

本帖最后由 晴兰 于 2015-2-20 21:26 编辑 同样给640x480的位图染成红色,1次时间太短,重复100000次观察: VM使用纯Ruby实现 Bitmap#fill_rect是RGSS3自带的C实现 结果↓↓↓↓↓↓↓↓↓↓↓↓↓ 当然, ...

回复

凌童鞋 发表于 2015-2-21 12:53:07
已被触瞎(;´Д`)
小传子 发表于 2015-2-21 11:36:24
好慢啊。。
gonglinyuan 发表于 2015-2-21 10:44:54
语言的速度还是靠实现来决定的

LZ既然搞过OI,那我就介绍一道最近冬令营的一道题目(那个测试点我当时一分都没拿到)

题面的意思是给你一个C++程序和输入,但这个程序在比赛时间5小时以内跑不出解,必须借助人为的优化。要求给出输出。

最后一个任务是一个很长很长的C++程序,内容大概是这样的:
  1. void A() {++ans;}
  2. void B() {A();A();A();A();A();A();A();A();A();}
  3. void C() {B();B();B();B();B();B();B();B();B();}
  4. ..........
  5. void AB() {A(); A(); B(); B();}
  6. void AC() {A(); A(); C(); C();}
  7. .........
复制代码
主程序里就是一堆函数调用,要求输出最后的ans

这样的程序按照正常的情况跑得出来才有鬼呢。但办法也是有的。有牛人编了个程序分析语义的;大多数人开了个map(或者是hash)记忆化;最强的是我的一个同学:他用clang开优化开关直接编译,结果把这个神奇的程序直接优化掉了,一秒出解!

所以即使是同一种语言,不同的实现对效率的影响也是很重要的。比如RGSS对安全性的要求很高、对效率要求不高,因此不仅效率低,还有调用栈的层数限制等等蛋疼的设定。

光看语言的话,理论上静态的的确会快,但是也不绝对。比如scanf和printf是运行时决定I/O的数据类型,而cin/cout是编译时就已经决定了数据类型,但前两者的运行速度却要快得多。因此主要还是具体实现的问题吧。

点评

调用栈就这么大嘛= = 你可以设定 RubyVM 的编译选项,不记录调用栈  发表于 2015-2-21 12:21
寒冷魔王 发表于 2015-2-21 10:44:47
本帖最后由 寒冷魔王 于 2015-2-21 10:50 编辑

CRuby用C实现的,相比JRuby运行效率要高许多。

Ruby解释器运行效率确实很高,嘛,毕竟是用C写的嘛

点评

窝只看标题,直接把正文Pass掉了  发表于 2015-2-21 14:53
你是不是完全没看懂楼主在说什么- -  发表于 2015-2-21 12:20
yagami 发表于 2015-2-20 23:39:07
yagami 发表于 2015-2-20 23:28
确切的说 静态语言高效  动态语言灵活 编译那等待的时间不是白等的

编译期做掉了很多事情 网上随便找个极端点的 一般C不太用的元编程
  1. template <int N>
  2. struct Factorial
  3. {
  4.     enum
  5.     {
  6.         value = N * Factorial<N - 1>::value
  7.     };
  8. };

  9. // 特化版本
  10. template <>
  11. struct Factorial<0>
  12. {
  13.     enum
  14.     {
  15.         value = 1
  16.     };
  17. };

  18. int main()
  19. {
  20.     cout << Factorial<5>::value << endl; // 输出120
  21. }
复制代码
在编译期,Factorial<5>::value就被翻译成了5 * 4 * 3 * 2 * 1,在运行期直接执行乘法即可。

点评

毕竟这是有快速造轮子能力的ruby  发表于 2015-2-21 00:04
这东西不失快速性的,如果重点是快速开发,一堆dsl已经写好了  发表于 2015-2-21 00:03
vm这东西太底层了 估计也就cto级别的会去纠结 自从入了手游坑 只求快速开发了  发表于 2015-2-21 00:00
这也算是个要在乎性能的点吧。对于二次开发者当然是透明的。  发表于 2015-2-20 23:55
我的VM其实主要是两个目的,一个是写Ruby写起来不那么好写的回调,一个是给我手上的DX加速,一堆一堆相同的com调用,用我传统的方法写浪费太多了  发表于 2015-2-20 23:54
yagami 发表于 2015-2-20 23:28:23
确切的说 静态语言高效  动态语言灵活 编译那等待的时间不是白等的

点评

其实 算法写的糟糕一点可以完爆语言带来的 那点性能 不用那么纠结  发表于 2015-2-20 23:44
我用了快速生成加人脑编译kira  发表于 2015-2-20 23:32
永恒の未知数 发表于 2015-2-20 22:43:57
不行了,刚开始学C语言的渣渣基本看不懂

评分

参与人数 1星屑 +25 收起 理由
晴兰 + 25 塞糖

查看全部评分

chd114 发表于 2015-2-20 21:44:29
说人话大快人心

评分

参与人数 1星屑 +25 收起 理由
晴兰 + 25 塞糖

查看全部评分

晴兰 发表于 2015-2-20 21:39:03
提示: 作者被禁止或删除 内容自动屏蔽
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-10-3 10:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表