2010-06-17 2 views
2

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

Также, enum_for полагается на внешние итераторы?

ответ

2

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

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

Rubinius и JRuby оптимизируют next для встроенных типов, потому что их очень сложно реализовать, в частности, на JVM. Забавное время сна: this thread on ruby-core

0

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