根据这个 rubyquiz,外部迭代器过去很慢,但现在更快。这是仅在 YARV(基于 C 的 ruby 1.9 实现)中可用的改进,还是在基于 C 的 ruby 1.8.7 实现中也可用?
另外,是否enum_for
依赖外部迭代器?
根据这个 rubyquiz,外部迭代器过去很慢,但现在更快。这是仅在 YARV(基于 C 的 ruby 1.9 实现)中可用的改进,还是在基于 C 的 ruby 1.8.7 实现中也可用?
另外,是否enum_for
依赖外部迭代器?
Ruby 1.9 使用纤维来实现Enumerator#next
,这可能比 Ruby 1.8 更好,但仍然使它成为一个昂贵的调用。
enum_for
返回一个Enumerator
但不依赖于外部迭代器。只有在需要时才会创建纤维/延续,即如果您调用next
但如果您调用each
或任何其他继承自Enumerable
.
Rubinius 和 JRuby 正在next
针对内置类型进行优化,因为它很难实现,尤其是在 JVM 上。有趣的睡前阅读:ruby-core 上的这个线程
Rubinius 也有一些主要的性能增强,但它是 Ruby 1.8 实现,而不是 1.9。