Comments 12
Круто…
+1
Респект за подобное! И плюс в карму.
+6
Отличная возможность, а мне как начинающему рубисту не придется долго переучиваться и можно сразу держать в голове готовящийся функционал версии 2.0 )
0
Ну джедай…
+4
То есть вся выгода в том, что в цепочках будет создаваться только 1 массив, вне зависимости от размера этой цепочки? Выгодно ли будет использовать его на небольших и средних массивах, где длинная цепочка вызовов?
Функция будет полезна, спасибо за реализацию!
Функция будет полезна, спасибо за реализацию!
-1
Да имеено — результат высчитывается за один проход.
Второй вопрос хороший — сам о нем подумывал.
Если переформулировать — каково соотношение между длинной цепочки и размером массива при котором выгодно использовать ленивый подход.
Это просто бенчмаркнуть — gist.github.com/2146084
У меня получилось что при массиве из трех элементов ленивый подход в 6-7 раз медленнее.
При этом на массиве в 300 элементов — получаем выигрыш почти в 10 раз.
Второй вопрос хороший — сам о нем подумывал.
Если переформулировать — каково соотношение между длинной цепочки и размером массива при котором выгодно использовать ленивый подход.
Это просто бенчмаркнуть — gist.github.com/2146084
У меня получилось что при массиве из трех элементов ленивый подход в 6-7 раз медленнее.
При этом на массиве в 300 элементов — получаем выигрыш почти в 10 раз.
0
Да уж, за 2 уикэнда с внутренностями руби разобраться, еще и свое дописать… Даже и не рискну повторить этот подвиг :) Спасибо и за вклад в опен сорс, и за пост, и за подборку ссылок :)
-1
>… за 2 уикэнда с внутренностями руби разобраться
Если б это было возможно… К сожалению это только начало — первое знакомство так сказать.
Чтобы действительно понять и разобраться как все работает внутри — нужно колоссальное кол-во времени и усилий. С патчем в какой-то мере даже и повезло — оказался в нужное время в нужном месте и с сильным желанием это сделать.
По поводу ссылок — стоит упомянуть еще и RHG — ruby hacking guide — он сильно помог на первых порах.
Если б это было возможно… К сожалению это только начало — первое знакомство так сказать.
Чтобы действительно понять и разобраться как все работает внутри — нужно колоссальное кол-во времени и усилий. С патчем в какой-то мере даже и повезло — оказался в нужное время в нужном месте и с сильным желанием это сделать.
По поводу ссылок — стоит упомянуть еще и RHG — ruby hacking guide — он сильно помог на первых порах.
0
Не могу взять в толк, как же тогда вот этот бенчь? Причём проверенный мной уже на Ruby 2.1.2p95. От приведённого в ссылке мой результат отличается не сильно. Выполнение
Результат (real):
А вот результат увеличенной в два раза цепочке
Если увеличить цепочку ещё — то результат аналогичен. Идея хороша, но с реализацией уже где-то не сошлось.
.select{ |i| i%2 == 0 }.map{ |i| i*2 }
на миллионном массивеРезультат (real):
0.423104 # без lazy
1.065144 # с lazy
А вот результат увеличенной в два раза цепочке
.select{ |i| i%2 == 0 }.map{ |i| i*2 }.select{ |i| i%4 == 0 }.map{ |i| i + 1 }
и 50-ти миллионного массива:52.351417 # без lazy
92.194890 # с lazy
Если увеличить цепочку ещё — то результат аналогичен. Идея хороша, но с реализацией уже где-то не сошлось.
0
Sign up to leave a comment.
Ruby 2.0 Ленивый Enumerable