瞎扯淡 大家谈谈对 Ruby 和 Rails 的不满之处吧

ery · 2012年02月28日 · 最后由 veggie 回复于 2013年06月08日 · 6657 次阅读

任何实物都不是完美的, 这是一个不变的真理, RubyAndRails 也受此约束。

没有最好,只有更好, 要想更好,首先需要知道哪里不好, 然后进行补足。

所以请大家说说对 Ruby 和 Rails 的不满。

比如, ruby 中,函数参数没有类型,无法简单地实现静态代码检查。

Ruby 1.9 添加了类 json 的 Hash 格式觉得没必要。

#1 楼 @Rei 同意,json 的 hash 风格在 JS 里面看着就非常顺眼,但是在 Ruby 里面怎么看都不舒服。

rails 还不熟,不下论断,不过 Ruby 嘛,其他都好,就是有一点:正则表达式匹配符号,我总是在心里读作"约等于", 然后就打成了"~=".

#2 楼 @lgn21st 不舒服还是其次,只是我总是要提醒自己:“这里是 symbol,不是 string”,而看起来又像是 string

目前最不爽的就是 Rails 的启动速度

rails 版本帝

没法静态代码检查。动态语言不都这样么。。

v 层和设计制作配合比较难,通常要一手包办

我觉得 ruby 应该把 class_eval 之类的方法去掉,这个太影响调试和浏览代码了。

#10 楼 @hhuai 但是这一系列的方法很不错,如果没有 class_eval 之类的东西,就没有元编程了

跨平台各种 bug,不如 Java。 相当讨厌 Rails 的 Mac 一边倒风气!

#11 楼 @sunzheng91 我不支持这个说法,用 method_missing、动态添加方法都可以,但不要用 class_eval 调用一段字符串来凭空生成类,这个看得真的好恶心的。

#12 楼 @camel 我是用 Linux 的,目前没有转 Mac 的意愿

#12 楼 @camel 在 Linux(fedora) 上我五分钟就配好的环境,在 MAC 上却弄了好几天,但是配置好以后确实无比舒畅。最后,在 Linux 上开发 rails 绝对是很好的选择。

#15 楼 @jean #14 楼 @Rei 所以“Rails 最好的平台是 Mac,最好的编辑器是 Textmate”这句话真的要过时了。

Rails 这种升级不考虑向后兼容的特性,很难让他进入企业开发领域。 JavaEE 就一点我喜欢:现在虽然到 7.0 了,但 4.0 的程序跑起来基本没问题。

@Rei 这个我倒蛮喜欢,json,yaml 不都是冒号吗。我刚开始学 ruby 的时候老嘀咕咋 hash 是用=>,要按 3 个键才能打出来。

当时我们做 java 项目时,更倾向于使用 iBATIS 而不是 hibernate,就因为 iBATIS 一简单,二 sql 可控。 现在 rails 中 AR 抽象级别也挺高也,有类似 hibernate 的担心。

Json 式的 Hash 在 DSL 时有用,让语法更像英语而不是 ruby 代码,坏处就是和已有的 Symbol 太像了。

让时间检验吧,像 size count length 这样的冗余一直就有了……

@hhuai 用 class_eval 的目的主要是为了性能考虑的,sinatra 可以不怎么考虑性能,所以它的源码里貌似没怎么用 eval 形式(我不是很确定,但确定 sinatra 里有些地方是用 define_method 这样阅读性比较好的方式),但 rails 就必须考虑性能了。

墙外的人搞的

#13 楼 @hhuai 嗯,有道理,我仔细想了一下,的确我能想到的应用场景都是可以用 method_missing 和动态方法实现的。但是,个人觉得,还是 class_eval 比较方便,因为在 class_eval 后面加上 block 后可以嵌入 class 的环境,这样打函数、变量什么的就可以像 class 那样打了,比较“面向对象”。

#12 楼 @camel 我是用 Linux(Gentoo) 的,感觉特别方便,下一个 rvm,后面一切都搞定了

class_evalinstance_eval 的命名有些搞-前者 eval 在 class 上,所以是给所有的 instance 用。后者 eval 在当前 class instance 上,所以只有当前这个 class 可以用。

我刚刚转 ruby,还在摸索阶段。

除了性能,目前没什么不满

#27 楼 @hysios 性能还好啦,web app 够用了,其实上面的不满我都顶。

最讨厌 end end end end end end

应该像 python 用 indentaion 来作判断,感觉清爽很多。

Ruby 不能支持 pattern matching. Haskel, ML 语言都有这个功能,连新的语言 Scala 也有。要是对 pattern matching 不熟可以看看。 http://sites.google.com/site/steveyegge2/choosing-languages

#1 楼 @Rei 自己手写还是习惯了 => 用生成器的时候加上rails generate xxx --old-style-hash

#29 楼 @zhang_victor 其实关于end是各有所爱了。和 Python 的强制缩进一样。有人很喜欢,有人就挺反感。我对 python 的强制缩进就不感冒。对 end 反而挺喜欢。呵呵

目前我对 Ruby 最满意的地方是 DSL 语言,基本上,我们配置好基础的东西,剩余的可以完全交给业务人员,比如表单、调查、后台管理的数据呈现。

对 Ruby 最不满意的则是与科学相关的这块,这几天很郁闷,前面几个步骤都很顺利,一写到跟科学计算相关的这块,翻 Ruby 库,全是三年前更新的,再翻 python 库,则是三个月前更新的,可替代的选择还很少,用的人与案例也基本找不到。比如这个库:igraph

我原本的想法是,让 Ruby 专注于 web 处理,然后 R 专注于数据处理,但是现在一翻,发现 python 太成熟了,我们用的几个大库,社会网络分析、认知神经,Python 库都很活跃,这几个月几本新教材也出版了。

是不是有必要全部整合到 python 中去?

ruby 标准库中有很多改变 original_object 但是 method 名字不以 ! 结尾的。

#33 楼 @Saito 其实这些方法本身的意思已经明确了。。比如 delete

版本帝 插件哥

#32 楼 @ouyang 这两天还正在看你博客上面推荐的斯坦福大学的 ruby 免费开发视频。 ruby 慢慢也渗透到学术界了,估计这些科学计算库不远了。

#37 楼 @nouse

I did hear that Strobe (company who was hiring Carl Lerche, Yehuda Katz and contracted Jose Valim) used to have an ActionPack based, mini stack but it was never released and apparently only Rails core members really knew what was going on there.

这是真的吗?

#34 楼 @hooopo 我觉得这个不成立。slice 跟 slice! .. 之前碰到"str".force_encoding 也会改变原本的 string 对象。

! 会对 original object 有影响这个成立,但是正常 method 不对 original method 影响这个还是要看文档..

#2 楼 @lgn21st { 'str': 'whatever' } 字符串作为 key 的会出错,这个比较奇怪; {key: :sym} ,这个也比较恶心。不过还是比原来 =>方便一些吧

#36 楼 @camel 对视频感兴趣,求地址

#10 楼 @hhuai 没有了 eval 就没有了 ERB,没了 ERB 也就没有了 Rails.....

#42 楼 @fsword 对 ruby 最大的不满在于社区里面会有这种人(fsword)

如果 ruby 强制缩进就好了,把 end 干掉就好了,那样就和 coffee,sass,haml/slim 风格统一了

hooopo Method end with Bang means dangerous 提及了此话题。 04月03日 10:56
需要 登录 后方可回复, 如果你还没有账号请 注册新账号