我觉得 Ruby 不够动态…
Source: Dev.to
Introduction
这篇文章说实话更像是个人的随想,而不是技术文章。
过去几年里,我逐渐成为了 Crystal 的信徒。从这个角度审视 Ruby 最近的动向,我有时会想:“那正是 Crystal 社区多年来一直在深耕的领域,而 Ruby 的真正优势并不在这里,对吗…?” 我一直没法把这种感觉和很多人分享,这让我感到很沮丧。
我只真正了解 Ruby 和 Crystal,所以对自己的想法缺乏信心,常常处于一种模糊的状态。把这些想法写下来可以帮助我梳理思路,于是鼓起勇气写下这篇个人随笔。
Missing Reversibility in Ruby
我在 Ruby 中感受到的不完整之处在于许多操作缺乏可逆性。可以定义一个变量,但很难干净利落地删除它。模块有 include,却没有 de‑include。虽然有 remove_method、remove_const、undef_method、UnboundMethod、define_method 等机制,但似乎没有一个一致的可逆模型来把方法或行为从一个结构中取出并安全地移植到另一个对象结构中。
Ruby 被视为动态语言,允许在运行时进行各种修改。然而,这种自由似乎主要倾向于“以后添加东西”。能够删除已添加的内容、拆解结构并重新组装成另一种形式,或撤销这些更改的能力,并没有得到系统化的实现。
也许 Ruby 并没有足够的动态语言特质。
A More Dynamic Ruby?
理想情况下,如果有一种 Ruby 实现能够像机器学习那样,接受输入数据和期望输出,然后在运行时的元层面上探索如何优化其对象结构,那将会很有趣。作为其基础,我想它需要能够观察、转换和重构自身对象的机制——尽管我并不确定这是否真的可行。
即便实现了类似的东西,实际使用时可能也会被划分为两个阶段:
- 通过学习或编译生成对象结构。
- 执行生成的结构。
我觉得那样会相当乏味。
Comparison with Crystal
我对 Crystal 深入研究,已经稍微远离了 Ruby。有人可能会认为 Ruby 应该能够做更多类似 Crystal 的事。但实际上需要的恰恰相反。Crystal 有其无法逃脱的结构约束。它通过对类似 Ruby 的灵活性加以限制,来实现速度和低内存占用。作为一个 Crystal 信徒,我认为如果你想要一门语言能够做 Crystal 那样的事,Crystal 本身更适合。让 Ruby 去做同样的事并没有什么有趣的,我想看到的是只有 Ruby 能做到的东西。
与 Crystal 相比,Ruby 是一门面向工业的编程语言,因此在很多方面它不能随意行动。能够在运行时自由转换对象结构的语言会很危险,工业界大概也不欢迎。不过,奇怪的是,在主流语言中,Ruby 却常被视作最动态的语言之一。我的直觉是,语言的世界里仍有一个更为动态的广阔前沿等待被探索。
Conclusion
我希望有一天能看到有人尝试把编程本身的世界进一步扩展到更动态的领域。
This post was machine‑translated from Japanese into English using ChatGPT.