kiyoka.2012_04_07 RSSPLAIN

Related pages: !kiyoka.blog.list !kiyoka.blog.2012_04
55555555555555555555555555555555555555555555555555555
5

[Ruby][Nendo] Ruby 2.0(開発版)に入ったEnumerable::Lazyを試してみた(Nendo編)

5

kiyoka.2012_04_01[Ruby][Nendo] Ruby 2.0(開発版)に入ったEnumerable::Lazyを試してみた」の続き。

5

Ruby 2.0をビルドする手順は先日の記事を参照してほしい。

5

今日は、Nendoでも試してみた。

5
 3389153383_a26bb54126_m もうひとつLazyな写真
5

 

5

Nendo 0.6.4でもそのままLazyの効果は出た。

5

そういえば、書き忘れていたが、Lazyは使用メモリを削減するだけじゃなくて、計算量も削減するのだった。実際に必要な分しか計算しない。

5

今回のサンプルプログラムでは、take 5 しているので、grepして見つかった最初の5行が見つかったところで計算を打ち切る。

5

 

5

Lazyの効果

5

実際に大きなサイズのtest.txtを用意した。

5
$ du -sh test.txt
5
58M     test.txt
5

 

5

Lazyなし

5
$ time nendo ./lazy_sample.nnd 
5
[without Lazy]
5
ruby
5
ruby's
5
rubying
5
ruby
5
ruby's
5
=> VmPeak:        428816 kB  (418MByte)
5
65.48user 0.43system 1:11.54elapsed 92%CPU (0avgtext+0avgdata 1572592maxresident)k
5

 

5

Lazyあり

5
$ time nendo ./lazy_sample.nnd lazy
5
[with    Lazy]
5
ruby
5
ruby's
5
rubying
5
ruby
5
ruby's
5
=> VmPeak:         65544 kB  ( 64MByte)
5
2.19user 0.04system 0:02.45elapsed 91%CPU (0avgtext+0avgdata 132704maxresident)k
5

 

5

メモリ消費量が減ったと同時にCPU消費も減ったことも確認できた。

5

すばらしい。

5

 

5

実験したソースコード

5

先日のRubyコードはリファクタリングして読みやすくした。

5
 lazy_sample.rb
5
 sample for Enumerable::Lazy of Ruby 2.0 — GistEXT
5

 

5

Nendo版はRuby版と対比させやすいようなコーディングにしてあるので比較してみてほしい。

5
 lazy_sample.scm
5
 Nendo sample for Enumerable::Lazy of Ruby 2.0 — GistEXT
5

 

5

感想

5

Nendoに変更を加えなくてもとりあえずLazyになった。素晴らしすぎるぜ。

5

 

5

...comment disabled...