Ruby 求一种转换 Ruby 到其他语言的简洁、高端、大气、上档次的方法

seiran · 2013年06月03日 · 最后由 realwol 回复于 2014年02月10日 · 4127 次阅读

嗯,就是效率问题,个人是做 Ruby 有关的游戏开发的。 原本考虑采用 Rubinius 的,但 Windows 下还没有移植成功,而且貌似很难的样子。 接受任何方法,包括 YARV 字节码编译或者文本替换预处理为 C++ 之类的,也包括重新考虑移植 Rubinius 的建议,或者用 ripper/sexp 过渡一下。 但是现在知道的方法操作起来貌似都比较复杂,求建议。 底线是写业务逻辑的语言是 Ruby。

server? client?

#1 楼 @jjym 可以想象成 RPGMaker 那种,或者 RubySDL 的,或者 Rubygame 的那种风格

还是 cruby 最快。要求吃内存少可以 mruby, 增量 gc 也不会卡帧,但速度会差点。

如果把 ruby 代码转换到其它格式能更快还能保持能力,官方 ruby 就不用做了... 或者你可以学 rubymotion 那样,牺牲部分能力然后转换成 objc (objc 对象模型比较接近,如果要转换成 c++ 就很困难), 但是就要消耗很多精力去开发。

windows 要快可以试试 vc 编译...

瓶颈处用 C/C++ 就好了,不纠结

只要不做浮点运算,性能就足够了...

#2 楼 @seiran 那你们一定做的很牛 X 的游戏,一般来说这些效率还行吧..

#3 楼 @luikore luikore 大牛出现了~~ 嗯,现在的问题是 C++ 不能正确传递异常,比如 DL::CPtr 中的 win32 异常,或者干脆就是 C++ 中的错误指针就直接崩了,fiddle/dl/win32api 都试过……,感觉 Ruby 或者 C++ 单独都 hold 不住全局的样子……

目前的想法是转换成 C++,objc 不太了解,打算去了解下……

#4 楼 @jjym 可能这个实践不太好,准确说是不打算把 Ruby 当做一个 lua 那样的脚本,而是整体就作为框架语言的感觉。

#5 楼 @seiran 嗯... 而且混合 c++ 和 ruby 栈会很悲剧...

你可以主程是 c++, 嵌入 mruby, 划分好职能 (例如 c++ 调 opencl 做各种计算,ruby 只负责脚本)

主程是 ruby 的话,就要用 try ... catch ... 包住进入 c++ 的调用,想速度快就尽量写扩展 或者 swig 不要用 DL... win32 异常查阅 errno 应该可以吧?

另外 windows 的 W 系列函数用的字符串都是 utf-16 内码的,ruby 里倾向用 A 系列,各种比较不好弄...

#7 楼 @luikore 然后就是 3D 渲染有效率问题……,直接用 Ruby 操作矩阵肯定不行,但是间接一点,矩阵作为 C++ 实现的对象,Ruby 只是决定他们乘起来的顺序,感觉效率还是有点低的样子,也不知道怎么封装比较好。。?

#8 楼 @seiran 矩阵运算都是用 opengl / directx 的库函数比较快... 内部表示就这些库自带的矩阵表示好了

#9 楼 @luikore 感觉 1F 内透过 swig 界面调用这些函数,还是效率损失比较大的样子? 能不能把这些函数的调用批量化。。

#10 楼 @seiran 速度是 ext > swig > DL, 但 ext 和 DL 写起来都有点费劲。如果暴露的函数都遵守一些约定 (限制了类型之类的), 可以自己写批量接口生成的工具 (也是个小坑)

关于矩阵的接口可以参看 nmatrix

不带 vm 的方案是可以用 ripper 搞,但是一些地方你要做类型推导的,可以参考 macruby, mirahdruby

#12 楼 @luikore 恩恩,感谢,druby 这种风格的可能是我要找的,我去看看这几个

如果想自己分析 c++ 源码做自动转换,可以用 llvm / clang 的前端工具,很好用

#14 楼 @reus 其实有考虑过用 llvm 来 jit 或者产生代码(但并不是即时)……

不知道 ruby 圈有没有 pygame 类似的项目 pygame 写点小游戏还算行

#16 楼 @leopku 有 rubygame,不过好久没更新了。经常更新的有 gosu,还有基于 gosu 的 chingu 和 gamebox gamebox 作者前两天还发布了个游戏 https://github.com/shawn42/foxy

关注一下,不知道现在 ruby 做游戏一般都是用的那些库。

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