Ruby 1.9 использует волокна для реализации Enumerator#next
, что может быть лучше, чем Ruby 1.8, но все же делает его дорогим вызовом.
enum_for
возвращает Enumerator
, но не полагается навнешние итераторы.Волокно / продолжение будет создано только при необходимости, т.е. если вы вызываете next
, но не если вы вызываете each
или любой другой метод, унаследованный от Enumerable
.
Рубиниус и JRuby оптимизируют next
для встроенных типов, потому что это очень сложно реализовать, в частности на JVM.Веселое чтение перед сном: эта тема на ядре ruby