Ruby2.0のlazyを試してみる

Ruby2.0のプレビュー版がでたとのことで、新機能のlazyを試してみる。

#!/usr/bin/env ruby
# coding:utf-8

exit unless RUBY_VERSION >= '2.0.0'

require "benchmark"
require "prime"

a = b = nil

Benchmark.bm(10) do |x|
  x.report("not lazy:") {
    a = (1..100000).select(&:prime?).take(10)
  }
  x.report("lazy:") {
    b = (1..100000).lazy.select(&:prime?).take(10).force
  }
end

puts "-"*20
puts "a = #{a.join(',')}"
puts "b = #{b.join(',')}"
$ ruby -v
ruby 2.0.0dev (2012-11-01 trunk 37411) [i686-linux]

$ ruby hoge.rb
                 user     system      total        real
not lazy:    3.010000   0.000000   3.010000 (  3.019988)
lazy:        0.000000   0.000000   0.000000 (  0.000410)
--------------------
a = 2,3,5,7,11,13,17,19,23,29
b = 2,3,5,7,11,13,17,19,23,29

ふむふむ。