【问题标题】:What are the things you would like improved in the Ruby language?您希望在 Ruby 语言中改进哪些方面?
【发布时间】:2009-02-25 10:25:33
【问题描述】:

您希望 Ruby(以及更普遍的 Ruby 社区)能够改进哪些方面?

我读到 somewhere 说 Ruby 是 Smalltalk 和 LISP 的爱子,Perl 小姐是保姆。

我非常尊重 Ruby 的父母,但我不确定我是否喜欢 Perl 小姐对孩子的影响。具体来说,我不喜欢预定义的变量:我需要cheat sheet 才能知道它们的含义。你可以说“只是不要使用它们”。嗯,我没有……但其他人有。当我在网上下载一个插件时,如果我需要去接触源代码,我别无选择,只能获取我的备忘单。我只是希望他们能从语言本身中删除这些内容。

另外,我认为 Ruby 是一个移动的目标。我的代码在每次新的 Ruby 升级时都会中断,即使在次要版本中也是如此。 Ruby on Rails 和我使用过的大多数 Rails 插件也是如此:它们一直在变化,似乎没有人关心这些变化是否会破坏一切。恕我直言,虽然我喜欢 Ruby 中的很多东西,但这种缺乏稳定性几乎是一个障碍。

【问题讨论】:

  • 您可以回答自己的问题,但如果您担心不礼貌,请在社区回答中提出。
  • 嘿,我以前从未注意到那个复选框!感谢您的提示。
  • 我认为这更像是 Perl 和 Smalltalk 是直接父母,而 Lisp 是家人的朋友。
  • 嘿,我不知道。我认为 Ruby 有 Lisp 的眼睛。 ;-) 一个症状是我一直在到处定义 lambda,而且我更倾向于使用递归。
  • 郑重声明:Ruby 的块与 Smalltalk 的块的关系似乎比 Lisp 的 lambda 函数更密切。

标签: ruby stability


【解决方案1】:

我希望人们在发布新语言(或库或框架)版本时将次要版本之间的向后兼容性视为牢不可破的规则。

【讨论】:

  • 您指的是 1.8.x 和 1.8.y 之间的“次要版本”更改吗?您遇到过什么样的问题?
  • 是的,我的意思是 1.8.x 和 1.8.y 之间的变化。这些更改应该是 100% 无痛的,但事实并非如此。从 1.x 到 1.y 的更改可能涉及一些小的重构。从 1. 更改为 2. 可以破坏一切,没关系。
  • 在 1.8.x 和 1.8.y 之间切换时遇到了哪些问题?
  • 我不知道MiniQuark指的是不是这个,但是1.8.6和1.8.7之间有很大的变化。
【解决方案2】:

我希望标准库中一些较少使用的模块被记录在案。

【讨论】:

  • 幸运的是,您无需成为 Ruby 核心贡献者即可解决此问题。
  • 几个月前有个帖子问标准库是不是一个贫民窟。
【解决方案3】:

require-ing 文件不那么痛苦。不要问我怎么做,但也许有一个文件专门用于了解所涉及的路径,然后从其他所有内容中删除相对路径。

【讨论】:

  • Ruby 1.9 有require_relative,这让我大部分时间都可以轻松地要求外部文件,但我同意应该有某种project rootapplication path 可以使用。
【解决方案4】:

摆脱模块和类之间的人为区别会很好。

模块和类都是命名空间。模块也是 Mixin,而类不是。类也可以被实例化,而模块则不能。这种区别是不必要的。只需摆脱 Modules 并允许 Classes 用作 Mixins。

这种工作的语言示例是Newspeak

【讨论】:

  • +1 有趣。我在 Python 中使用 mixins:它们只是类。您只需使用继承来“包含”它们。
  • 继承和混入是不同的。
  • 你不能把一个类混入一个类,即使Class < Module?这肯定违反了liskov替换原则吗?
  • @CameronMartin: ClassModule 的子类,但它不是Module子类型。类继承和子类型是不同的东西。 LSP 适用于子类型,而不是子类。
  • ruby 中的子类和子类型有什么区别?关于子类型的维基百科文章对我没有任何启示,因为在 ruby​​ 中,类型不是表示为类吗?
【解决方案5】:

我希望能够将 ruby​​ 1.9 作为 RPM 安装,而不必使用源代码。

【讨论】:

  • 您的发行版负责为您提供软件包。如果没有,快速搜索将产生 Ruby 1.9.1 RPM 的结果。这与 Ruby 完全无关。
  • @Nathan:我明白你的意思了。但它与语言本身无关的事实并不意味着它是对 Ruby 使用的无关紧要的抱怨。例如,我可以抱怨 Ruby 开发人员很昂贵:我不是在抱怨语言本身,而是在抱怨它的环境。
  • 顺便说一句,“rubygems 与 debian”之战必须结束。
  • 真的,我们都应该使用 RVM。我完全放弃了 Fedora 的软件包,一次也没有回头。
【解决方案6】:

使 Ruby 完全基于消息发送,摆脱所有不是消息发送的东西:局部变量、全局变量、实例变量、类层次结构变量、常量、魔术全局变量、魔术常量、内置运算符、内置关键字,甚至是文字.请参阅 SelfIokeNewspeak,了解由此获得的令人难以置信的力量和优雅。

【讨论】:

    【解决方案7】:

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

    【讨论】:

    • 如果你不喜欢神秘的全局变量,你总是可以包含 English.rb(它是标准库的一部分)。 ruby-doc.org/core/files/lib/English_rb.html
    • 有趣,感谢您的链接。但我的观点是,只要 任何人 使用这些预定义变量,我仍然需要准备好我的备忘单。
    【解决方案8】:

    我希望支持静态编译时元编程。 Converge Programming Language 可能是一个很好的起点。

    【讨论】:

      【解决方案9】:

      将 Mixin 系统替换为 Traits 系统。

      【讨论】:

      • 检查。 (嗯,好吧,不是替换,而是添加。)
      【解决方案10】:

      用 Common Lisp 样式 Conditions 系统替换异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 2010-11-10
        • 1970-01-01
        • 2011-02-12
        • 2010-10-29
        相关资源
        最近更新 更多