В каких версиях ruby ​​улучшены скорости внешнего итератора? - PullRequest
2 голосов
/ 17 июня 2010

Согласно этому rubyquiz , внешние итераторы раньше были медленными, но теперь быстрее. Это улучшение доступно только в YARV (реализация ruby ​​1.9 на основе C) или же это доступно в реализации ruby ​​1.8.7 на основе C?

Кроме того, enum_for полагается на внешние итераторы?

Ответы [ 2 ]

2 голосов
/ 17 июня 2010

Ruby 1.9 использует волокна для реализации Enumerator#next, что может быть лучше, чем Ruby 1.8, но все же делает его дорогим вызовом.

enum_for возвращает Enumerator, но не полагается навнешние итераторы.Волокно / продолжение будет создано только при необходимости, т.е. если вы вызываете next, но не если вы вызываете each или любой другой метод, унаследованный от Enumerable.

Рубиниус и JRuby оптимизируют nextдля встроенных типов, потому что это очень сложно реализовать, в частности на JVM.Веселое чтение перед сном: эта тема на ядре ruby ​​

0 голосов
/ 17 июня 2010

Rubinius также имеет ряд существенных улучшений производительности, но это реализация Ruby 1.8, а не 1.9.

...