Project1

标题: 谁说Ruby效率低[防误解:Ruby被运行效率低,但运行效率高] [打印本页]

作者: 晴兰    时间: 2015-2-20 13:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: lanyaolove    时间: 2015-2-20 13:32
vm大法好
作者: 龙和许也    时间: 2015-2-20 14:06
我会学会RUBY的!(误)
作者: taroxd    时间: 2015-2-20 14:08
终于拿出来触人了吗

我怎么看到了 duff's device...
作者: 落华蜂    时间: 2015-2-20 14:25
幸好我看不懂没有被触到
作者: gonglinyuan    时间: 2015-2-20 15:55
本帖最后由 gonglinyuan 于 2015-2-20 16:09 编辑

填充矩形这个和内部具体实现方式也有关系吧,这个我也不太了解

有空可以去实验一下整数排序、矩阵赋值、浮点数运算、FFT之类的,而且要保证代码每句话基本等价,这才是真正体现运算效率的吧

C的效率肯定高,不然操作系统之类的怎么不用ruby写。。

可以看一下CodeChef上一道题的提交记录(CC上可以用ruby写题)




作者: myownroc    时间: 2015-2-20 21:09
空的for循环被C完爆
作者: 晴兰    时间: 2015-2-20 21:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: chd114    时间: 2015-2-20 21:44
说人话大快人心
作者: 永恒の未知数    时间: 2015-2-20 22:43
不行了,刚开始学C语言的渣渣基本看不懂
作者: yagami    时间: 2015-2-20 23:28
确切的说 静态语言高效  动态语言灵活 编译那等待的时间不是白等的
作者: yagami    时间: 2015-2-20 23:39
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,在运行期直接执行乘法即可。
作者: 寒冷魔王    时间: 2015-2-21 10:44
本帖最后由 寒冷魔王 于 2015-2-21 10:50 编辑

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

Ruby解释器运行效率确实很高,嘛,毕竟是用C写的嘛
作者: gonglinyuan    时间: 2015-2-21 10:44
语言的速度还是靠实现来决定的

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是编译时就已经决定了数据类型,但前两者的运行速度却要快得多。因此主要还是具体实现的问题吧。
作者: 小传子    时间: 2015-2-21 11:36
好慢啊。。
作者: 凌童鞋    时间: 2015-2-21 12:53
已被触瞎(;´Д`)




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1