Спасибо за статью!
Опечатка: в разделе «Категория Hask» в 4-ом пункте про ассоциативность вместо «y» должен быть «x»:
λx → h (g (f y)) ==> λx → h (g (f x))
С бенчмарком дал маху первый раз. Проапдейтил пост на эту тему — смотрите секцию Update. Там же есть ссылка на issue на ruby-lang.org (в прикрепленном к issue файле сам бенчмарк).
Да имеено — результат высчитывается за один проход.
Второй вопрос хороший — сам о нем подумывал.
Если переформулировать — каково соотношение между длинной цепочки и размером массива при котором выгодно использовать ленивый подход.
Это просто бенчмаркнуть — gist.github.com/2146084
У меня получилось что при массиве из трех элементов ленивый подход в 6-7 раз медленнее.
При этом на массиве в 300 элементов — получаем выигрыш почти в 10 раз.
>… за 2 уикэнда с внутренностями руби разобраться
Если б это было возможно… К сожалению это только начало — первое знакомство так сказать.
Чтобы действительно понять и разобраться как все работает внутри — нужно колоссальное кол-во времени и усилий. С патчем в какой-то мере даже и повезло — оказался в нужное время в нужном месте и с сильным желанием это сделать.
По поводу ссылок — стоит упомянуть еще и RHG — ruby hacking guide — он сильно помог на первых порах.
Опечатка: в разделе «Категория Hask» в 4-ом пункте про ассоциативность вместо «y» должен быть «x»:
λx → h (g (f y)) ==> λx → h (g (f x))
Второй вопрос хороший — сам о нем подумывал.
Если переформулировать — каково соотношение между длинной цепочки и размером массива при котором выгодно использовать ленивый подход.
Это просто бенчмаркнуть — gist.github.com/2146084
У меня получилось что при массиве из трех элементов ленивый подход в 6-7 раз медленнее.
При этом на массиве в 300 элементов — получаем выигрыш почти в 10 раз.
Если б это было возможно… К сожалению это только начало — первое знакомство так сказать.
Чтобы действительно понять и разобраться как все работает внутри — нужно колоссальное кол-во времени и усилий. С патчем в какой-то мере даже и повезло — оказался в нужное время в нужном месте и с сильным желанием это сделать.
По поводу ссылок — стоит упомянуть еще и RHG — ruby hacking guide — он сильно помог на первых порах.