你希望改进Ruby语言的哪些方面?

10

你认为 Ruby(更广义的说,Ruby 社区)需要改进哪些方面?

我在某个地方读到,Ruby 是 Smalltalk 和 LISP 的结晶,由 Perl 女士担任保姆。

我非常尊重 Ruby 的父母,但我不确定我喜欢 Perl 女士对孩子的影响。具体来说,我不喜欢预定义变量:我需要一张备忘单才能知道它们的含义。你可以说“不要使用它们”。嗯,我不会用它们...但其他人会。当我从网上下载插件时,如果我需要去触碰源代码,我别无选择,只能找我的备忘单。我希望他们能把这些从语言本身中删除。

此外,我认为 Ruby 太过于不稳定。我的代码在每次新的 Ruby 升级时都会出问题,即使是小版本的升级也是如此。这也适用于 Ruby on Rails 和我使用过的大多数 Rails 插件:它们总是在变化,似乎没有人关心这些变化是否会破坏一切。在我看来,虽然我喜欢 Ruby 中的许多东西,但这种缺乏稳定性几乎是一个致命的问题。


你可以回答自己的问题,但如果你担心不礼貌,就在社区答案中提出它们。 - Slartibartfast
嘿,我以前从没注意到那个复选框!谢谢你的提示。 - MiniQuark
我认为这更像是Perl和Smalltalk是直系亲属,而Lisp则是家族中的朋友。 - Mike Woodhouse
嘿,我不知道。我认为Ruby有Lisp的眼睛。;-)一个症状是我一直在各个地方定义lambda,并且我倾向于比以前更多地使用递归。 - MiniQuark
记录一下:Ruby 的 block 看起来比 Lisp 的 lambda 函数更接近 Smalltalk 的 block。 - Chuck
10个回答

7

我希望在发布新的语言(或库或框架)版本时,人们能够将向后兼容性视为一个不可打破的规则。


您所指的“小版本发布”是指1.8.x和1.8.y之间的更改吗?您遇到了哪些问题? - Andrew Grimm
是的,我指的是1.8.x和1.8.y之间的更改。这些更改应该是100%无痛的,但实际上并非如此。从1.x到1.y的更改可能涉及一些小的重构。从1到2的更改可能会导致一切都崩溃,这没关系。 - MiniQuark
你在从1.8.x切换到1.8.y时遇到了哪些问题? - Andrew Grimm
我不知道MiniQuark所指的是不是这个,但1.8.6和1.8.7之间有重大变化。 - Andrew Grimm

3
让“require”文件的过程更加轻松。不知道怎么做,但可以专门有一个文件来了解相关路径,并将其他所有内容中的相对路径废弃。

Ruby 1.9有require_relative,这使得大多数情况下引用外部文件变得轻松,但我同意应该有一些“项目根目录”或“应用程序路径”可以从中工作。 - Matheus Moreira

3

我希望标准库中的一些不常用的模块能够被文档化。


2
幸运的是,这是您无需成为Ruby核心贡献者即可解决的问题。 - Sarah Mei
1
几个月前有人发帖问标准库是否像贫民区一样。 - Andrew Grimm

2

消除模块和类之间的人为区别会很好。

模块和类都是名称空间。模块还是混入,而类不是。类也可以实例化,而模块不能。这种区别是不必要的。只需摆脱模块,并允许使用类作为混入即可。

一个支持此功能的语言示例是Newspeak


3
继承和混入是不同的。 - nitecoder
你不能将一个类混入到另一个类中,即使 Class < Module?这违反了里氏替换原则吗? - Cameron Martin
@CameronMartin:ClassModule的子类,但它不是Module子类型。类继承和子类型是不同的概念。LSP适用于子类型,而不是子类。 - Jörg W Mittag
在 Ruby 中,子类和子类型有什么不同?由于在 Ruby 中,类型不是表示为类,因此 subtype 的维基百科文章对我来说没有任何帮助。 - Cameron Martin
对象的协议(即对象响应的方法)是它的类型(或者更确切地说,它的类型,因为一个对象可以有多个类型)。如果一个对象响应了另一个对象响应的所有方法,以及一些其他方法,那么该对象的类型就是另一个对象类型的子类型。换句话说:这是从另一个方向看LSP:如果一个对象可以替代另一个对象,那么它的类型就是那个对象类型的子类型。子类仅用于实现重用。它只是共享代码的工具。 - Jörg W Mittag
显示剩余3条评论

1
我希望能够安装Ruby 1.9的RPM包,而不是使用源代码。

你的发行版负责为你提供软件包。如果他们没有提供,快速搜索将会得到 Ruby 1.9.1 RPMs 的结果。这与 Ruby 没有任何关系。 - Nathan de Vries
@Nathan:我明白你的意思。但是,它与语言本身无关并不意味着这是关于Ruby使用的无关投诉。例如,我可以抱怨Ruby开发人员很昂贵:我不是在抱怨语言本身,而是关于其环境的问题。 - MiniQuark
顺便说一下,“RubyGems与Debian”的战争必须结束。 - MiniQuark
实际上,我们都应该使用RVM。我完全放弃了Fedora的软件包,从未回头过。 - Matheus Moreira

1

将Ruby完全基于消息发送,摆脱所有不是消息发送的东西:局部变量、全局变量、实例变量、类层次结构变量、常量、魔法全局变量、魔法常量、内置运算符、内置关键字,甚至连文字都要摒弃。参见SelfIokeNewspeak,了解这种方法所带来的惊人力量和优雅。


0

我希望他们能够摆脱预定义变量:$!$&$+等。


如果您不喜欢晦涩的全局变量,您可以随时包含English.rb(它是标准库的一部分)。http://www.ruby-doc.org/core/files/lib/English_rb.html - Charles Roper
1
有趣,感谢提供链接。但我的观点是只要任何人使用这些预定义变量,我仍然需要准备好我的备忘单。 - MiniQuark

0

我希望能够支持静态编译时元编程。Converge编程语言可能是一个不错的起点。


0

使用Traits系统替换Mixin系统。


检查。(好吧,它不是替换,而是添加。) - Jörg W Mittag

-2

使用Common Lisp风格的条件系统替换异常处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接