根據this rubyquiz,外部迭代器過去很慢,但現在速度更快。這是僅在YARV(基於C的ruby 1.9的實現)中才有的改進,還是在基於C的ruby 1.8.7實現中也可以使用?在哪些版本的ruby中,外部迭代器的速度有所提高?
另外,enum_for
是否依賴外部迭代器?
根據this rubyquiz,外部迭代器過去很慢,但現在速度更快。這是僅在YARV(基於C的ruby 1.9的實現)中才有的改進,還是在基於C的ruby 1.8.7實現中也可以使用?在哪些版本的ruby中,外部迭代器的速度有所提高?
另外,enum_for
是否依賴外部迭代器?
Ruby 1.9使用光纖來實現Enumerator#next
,這可能比Ruby 1.8更好,但仍然使得昂貴的調用成爲可能。
enum_for
返回Enumerator
但不依賴外部迭代器。只有在需要時纔會創建光纖/延續,例如,如果您撥打next
,而不是撥打each
或從Enumerable
繼承的任何其他方法,則不會。
Rubinius和JRuby正在爲內建類型優化next
,因爲它很難實現,特別是在JVM上。有趣的睡前閱讀:this thread on ruby-core
Rubinius也有一些主要的性能增強,但它是一個Ruby 1.8的實現,而不是1.9。