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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: 晴兰
打印 上一主题 下一主题

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3570
在线时间
3064 小时
注册时间
2011-11-17
帖子
980
11
发表于 2015-2-20 23:28:23 | 只看该作者
确切的说 静态语言高效  动态语言灵活 编译那等待的时间不是白等的

点评

其实 算法写的糟糕一点可以完爆语言带来的 那点性能 不用那么纠结  发表于 2015-2-20 23:44
我用了快速生成加人脑编译kira  发表于 2015-2-20 23:32
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3570
在线时间
3064 小时
注册时间
2011-11-17
帖子
980
12
发表于 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
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1024
在线时间
1389 小时
注册时间
2010-8-9
帖子
3471
13
发表于 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
SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
705 小时
注册时间
2007-12-23
帖子
874
14
发表于 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
买了正版RMMV的同学进来看一下,谢谢~
https://rpg.blue/thread-393237-1-1.html
回复 支持 反对

使用道具 举报

Lv2.观梦者


  • 更新完成啦

梦石
0
星屑
779
在线时间
6267 小时
注册时间
2006-6-7
帖子
8462
15
发表于 2015-2-21 11:36:24 | 只看该作者
好慢啊。。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
100
在线时间
5250 小时
注册时间
2011-10-7
帖子
1885

开拓者贵宾

16
发表于 2015-2-21 12:53:07 | 只看该作者
已被触瞎(;´Д`)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-10-3 08:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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