Project1

标题: 第一印象:ruby -> js 你会有更多的选择 [打印本页]

作者: LBQ    时间: 2015-8-8 11:11
标题: 第一印象:ruby -> js 你会有更多的选择
本帖最后由 LBQ 于 2015-8-8 11:14 编辑

看到兰触写了一篇,于是我也稍微写一点我的初步印象好了。

1. 大方向:生态系统开放了,生态系统扩大了
可怕的是Ruby生态环境没法被Rgss利用。Ruby别人写的库因为在Gems生态体系里面所以没法直接用。别人写的Native Extension我们没法直接用。Ruby的标准库我们没法用。RGSS还把数据库保存成了Marshal之后的二进制模式,使得其他语言没法利用,甚至普通的Ruby环境没法对RM数据库进行更改。

这也就代表了Rgss这个生态环境永远都是封闭的。即使无数人尝试开放这个环境(OpenRgss,MKXP)并且都取得了一定程度上的成功,整个生态系统还是没有改变。这次换成Js之后生态系统真的就开放了,别人的库我们可以用了。数据库估计也以类似Json或者Plain Javascript Object的形式保存了。技术上的开放让我们可以用一些世界前端的科技,也为第三方工具提供了很大便利。

同时也意味的生态系统的扩大,毕竟用Js写游戏的人比Ruby写游戏的人是多的,也就意味着我们有更多的物理引擎可以选(比如说Matter.js),更多的渲染引擎可以用(Pixi.js之类的)。生态系统直接从原有的很小的Rgss生态系统直接扩大到整个Js生态系统。

2. 效率提升数倍

仅仅从语言方面来说Js本身就比Ruby快好多倍


再加上我们也许可以成功用asm.js来写某些特别需要效率的代码(asm.js比C慢个3到4倍)。使得以前很多吃效率的算法MV都可以实现,分辨率扩大也不会那么卡了。


3. 也许我们可以调用GPU了

写3D之类的,写Shader之类的快了20倍吧,因为有了WebGL。也就意味着3D可以写的很效率(当然该不该写3D是另一回事),可以玩很多酷炫的画面效果了,所以说我们也许可以用Three.js造一个3d的战斗系统。

4. JS这门语言没有Ruby好用=》你可能需要第三方的库

在Ruby中可能已经习惯了map, each, find_all这些方法的你在Js中不会发现这些方法。更糟糕的是Ruby中的Class在Js中都不直接实现。

但是很幸运的是Underscore, FunctionalJs等库给你提供了这些功能,也就意味着你需要第三方的库来提供一些你在Ruby中习惯的功能。

当然这也意味着你有更多的语言特性的选择,比如说:monet.js(https://cwmyers.github.io/monet.js/)提供了Haskell引以为傲的Monad。https://github.com/jlongster/transducers.js 提供clojure的transducer。

还有比如说React.js或者Riot.js这些UI的库也许也可以用于RM的GUI编写中。

5. 干脆换一门语言好了

Javascript被普遍认为不适合写任何超过1000行的程序。所以说也许你可以去换一门语言:

https://github.com/jashkenas/cof ... -that-compile-to-JS 有一列能编译成Js的语言,其实总结下来就是:几乎所有主流语言都可以编译成Javascript

当然现实没有这么理想,最后你可能会去用那么几个主流的语言:coffeescript(更为简洁的js写法,更像Ruby),typescript(提供静态类型支持), livescript(更加函数化的写法),clojurescript(clojure的js版本,也许可以用来写一整个游戏用)。并且如果想要挑战的话可以用c, scala, java, ruby, ocaml, purescript(haskell般的语言), jsfuck, brainfuck等你能想到的几乎所有语言来写MV游戏。


6. 脚本门槛高了

Js语言没有Ruby那么容易写好,同时内置编辑器没了之后还得自开编辑器打代码,同时估计大家一上场就会用coffeescript, livescript之类的写东西。所以说也许改脚本不好改了(因为不一定是单纯的用js写的),写脚本门槛高了(因为js没有那么好学)。

7. 后话

我还记得我在某群里面说过我想重写一遍RM引擎,然后当时我就说了我也许会去用Js写,然后发现MV用Javascript了也是很欣喜。于是这次终于有一个技术上不是那么封闭的RM可以用了,技术上的革新势必可以带动整个生态链的发展,HTML5是已经被证明是有未来的技术,希望能以此重振RM。

并且这不仅影响新系统的产生,同时也意味着也许更多的工具可以被写出来(比如说更好的地图编辑器,数据库编辑器之类的)。底层技术换了一个档次之后生态系统肯定也会随之优化。






作者: maliut    时间: 2015-8-8 11:26
学js的时候各种继承方法看着都晕……

不过在支持度和第三方库上真的不错,也算是符合跨平台潮流吧
说不定mv以后就大火了
作者: 天地有正气    时间: 2015-8-8 11:30
换了js之后不能玩元编程了,真是郁闷 - -
作者: taroxd    时间: 2015-8-8 11:37
天地有正气 发表于 2015-8-8 11:30
换了js之后不能玩元编程了,真是郁闷 - -

js 为啥不能元编程。连 eval 都可以,内省反射什么的都有
作者: MeowSnow    时间: 2015-8-8 11:38
外行不太懂,HTML5是说可以直接输出网页游戏吗?
作者: 蓝儿    时间: 2015-8-8 12:00
所以说以前学js还是放弃了。。这东西怎么看怎么难受。
作者: chd114    时间: 2015-8-8 12:19
这么看来如果开了MV区的话···其他区版主能调去临时当MV区版主的人也并不多吧···活跃的调去2、3个?
作者: gonglinyuan    时间: 2015-8-8 15:14
不过难度提升、代码可读性下降的代价也是很大的,毕竟JS长代码几乎不可阅读。。
作者: acn00269    时间: 2015-8-8 15:37
我竟然觉得JS比Ruby容易,是我的错觉么
作者: KB.Driver    时间: 2015-8-8 16:05
一种都不会的觉得……恩。没有可比性……
作者: 龙和许也    时间: 2015-8-8 16:10
虽然MV要出让人很是心动,但是连RUBY都没练好的我。
还是先算了,有这个机会再碰吧……
作者: LBQ    时间: 2015-8-8 16:21
acn00269 发表于 2015-8-8 15:37
我竟然觉得JS比Ruby容易,是我的错觉么

稍微想了一下...

感觉貌似js有的东西ruby大部分也有,ruby还有更多的选择。
ruby貌似就缺 真正的function支持 还有javascript中的那种object

感觉应该还是javascript比ruby难一些
作者: LBQ    时间: 2015-8-8 16:23
KB.Driver 发表于 2015-8-8 16:05
一种都不会的觉得……恩。没有可比性……

假如真的只是抱着“学一门语言”的思想来学语言的话

我推荐是别学C而去学 javascript, ruby, python之类的
毕竟ruby python没有c的一些讨厌的东西并且也是简单易学的主流语言。
javascript虽然有些讨厌的地方不过毕竟非常主流并且实践机会很多。

当然如果是抱着学习计算机科学来学语言的话c估计在中国也是得学的...
作者: taroxd    时间: 2015-8-8 16:29
LBQ 发表于 2015-8-8 16:21
稍微想了一下...

感觉貌似js有的东西ruby大部分也有,ruby还有更多的选择。

Ruby 的 lambda 语法至少比 ES5 之前的 function 用起来舒服多了。(当然,coffeescript 也差不多)

需要 js 那种 Object 就加个 openstruct,不过估计没什么必要就是了。

最大的区别还是在于对象模型,而这个也是 Ruby 的更舒服。不过 Ruby 在这一点上比 js 难学一点(当然入门是容易的)

js 的主要好处就是你在主楼提到的那些了。当然最主要的好处是跨平台(不然 EB 没理由换语言)

如果 Ruby 能用 gem 的话我就一本满足了
作者: 冷俊逸    时间: 2015-8-8 17:40
很疑惑为何javascript拥有那么么多的<>。是不是只是网页有?
作者: fux2    时间: 2015-8-8 18:41
移动设备上js效率堪忧。
作者: 鑫の尘埃    时间: 2015-8-8 20:05
w意思就是说
网页版RM之日可待咯
作者: LBQ    时间: 2015-8-8 20:39
@冷俊逸
你说的估计是HTML,js我记得没有<>的

@fux2
貌似是的...并且opengl也受限也会很慢。不过这也不是RM的问题而是所有做到手机上游戏的问题了(手机就是慢OTL)

@taroxd
其实我的意思不是功能上的问题...更多的其实是比如说js中对于player这个对象的表达可以是
  1. player = {};
  2. player.x = 1;
  3. player.y = 1;
复制代码
而Ruby中一般的方法就是class Player然后生成Player对象。(OpenStruct也行,但是貌似不是解决这个问题比较Ruby的方法)

所以说当时我想的其实是也许是没有Javascript的这种纯对象导致很快就要接触面向对象的类所以可能说js更容易理解一些。

而对于function来讲我当时不是以可读性来想的,因为我认为Ruby中区分了Block和Proc和Lambda之类的可能导致初学者迷惑,而Js中直接一个Function解决一切我觉得还是更好理解的。

(不过好像当时假如表示的清楚一些就好多了
作者: taroxd    时间: 2015-8-8 20:48
本帖最后由 taroxd 于 2015-8-8 20:54 编辑
LBQ 发表于 2015-8-8 20:39
@冷俊逸
你说的估计是HTML,js我记得没有的


就是一个 function 解决一切,所以 Array.prototype.forEach 不能在中途中断啊。你看 ruby 的 each,一个 return 就能跳出来了,区分 Proc 和 Lambda 有什么不好的。

拿一个 Function 当类用好理解个球啦!!!prototype 和乱七八糟的 this 好理解个球啦!!!

js 里也是
  1. function Player() {
  2.   this.x = 1;
  3.   this.y = 1;
  4. }
  5. var player = new Player();
复制代码
这样的吧。单纯用一个 Object 不是很容易 OOP。再说了 Ruby 也基本兼容了 json 代码了,不过出来的是 Hash 而已。



另外我不是在黑js。我承认js的优点,并且觉得EB这么做是没错的只不过心里还是很不爽
作者: IamI    时间: 2015-8-8 23:36
一等公民和一等公民是不一样的。
想从 ruby 转过来的话,有无数个思想上的转变,和无数多的坑要踩。

可以说这种设计是时代的趋势,是没有问题的。
可惜 js 从设计时起,就注定无法是一门好语言。
作者: 怕鼠的猫    时间: 2015-8-8 23:54
会不会放弃ruby之后,直接遭到老玩家抵制,以失败告终!?

作者: grayuncle    时间: 2015-8-9 21:09
MeowSnow 发表于 2015-8-8 11:38
外行不太懂,HTML5是说可以直接输出网页游戏吗?

可以建个离线服务器【自己电脑】,通过WiFi就可以在自己手机上调试预览游戏。
作者: grayuncle    时间: 2015-8-9 21:13
LBQ 发表于 2015-8-8 16:21
稍微想了一下...

感觉貌似js有的东西ruby大部分也有,ruby还有更多的选择。

恩恩 ruby的教程我看的也晕。还说从是零开始学的。啥是0?
作者: 无名氏160510    时间: 2015-8-9 22:09
没准MV出了之后,可以跨平台运行了,可以用手机玩了,AppStore 里会出现 RM游戏。
作者: bugmenot    时间: 2015-8-23 23:50
gonglinyuan 发表于 2015-8-8 15:14
不过难度提升、代码可读性下降的代价也是很大的,毕竟JS长代码几乎不可阅读。。 ...

CoffeeScript (借鉴 Python 和  Ruby)的 JavaScript
作者: Shy07    时间: 2015-8-24 20:55
IamI 发表于 2015-8-8 23:36
一等公民和一等公民是不一样的。
想从 ruby 转过来的话,有无数个思想上的转变,和无数多的坑要踩。

用 coffee 的话,我觉得转变其实没多大难度,只要不去碰 class
这个脚本,完全可以用 coffee 无痛改写。

Ruby 强势的地方在于 DSL 造轮子的能力,RGSS 发展这么久了,其实还是最初的老一套,换用 JS 未必是件坏事。以 RMer 的创造力,加上 coffee 珠玉在前,我估计不久应该会有用 JS 实现的 Ruby 子集,我们可以好好期待一下。






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