有人告诉我 ruby 1.9.2 是 ruby 2.0,但 ruby 1.9.3 计划在不久的将来发布,它将包含一些性能增强。
那么他们对 2.0 有什么计划呢?它会与 ruby 1.9.x 有很大不同吗?
有人告诉我 ruby 1.9.2 是 ruby 2.0,但 ruby 1.9.3 计划在不久的将来发布,它将包含一些性能增强。
那么他们对 2.0 有什么计划呢?它会与 ruby 1.9.x 有很大不同吗?
YARV 中已经实现并且很可能最终会在 Ruby 2.0 中实现的两个特性是特征 ( mix
) 和Module#prepend
.
mix
与当前方法不同,该方法include
采用模块列表,并同时将所有模块混合在一起,确保它们没有冲突的方法。它还为您提供了一种轻松解决冲突的方法,例如,如果您想要混合的两个模块定义相同的方法。因此,基本上,虽然该include
方法允许您将模块视为 mixin,但该mix
方法允许您将模块视为 trait。
Module#prepend
将一个模块混合到一个类或模块中,就像这样include
做一样,但不是将它插入到类上方的继承链中,而是插入到类的下方。这意味着模块中的方法可以覆盖类中的方法,并且可以使用 委托给被覆盖的方法super
,这两者在使用时都是不可能的include
。这基本上alias_method_chain
已经过时了。
已经讨论了几个月(或 10 年,取决于您如何计算)的一项功能是细化。现在已经讨论了 10 多年,以添加一种方法来在 Ruby 中进行范围化、安全的猴子修补。即我可以猴子修补核心类的一种方式,但只有我的代码可以看到那个猴子补丁,其他代码没有。多年来,这种安全猴子补丁的领跑者是 Selector Namespaces,但最近,Classboxes 受到了很多关注,甚至最近,Classboxes 的变体 Refinements 的原型实现和规范被提出向前。
一般来说,Ruby 2.0 的大主题是可扩展性:扩展到更大的团队、更大的代码库、更大的问题规模、更大的机器、更多的内核。但也可以缩小到像嵌入式设备这样的小型机器。
我上面提到的三个功能用于扩展到更大的团队和更大的代码库。Enumerable
一些用于扩展到更大的问题规模和更多核心的提议功能是并行集合和方法的并行实现map
,以及更好的并发抽象,例如期货、承诺、代理、参与者、通道、连接模式或类似的东西。