Ruby1.9を使うにあたり1.8と違う部分

エンコーディングの指定

1.9だと内部のエンコーディングが固定されてないので、文字列のエンコーディングを指定します。

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

p "あいうえabcd" 

文字列のサイズ

Ruby1.8

p "あいうえabcd".size #=> 16

Ruby1.9

p "あいうえabcd".size #=> 8

1.9の場合文字列のサイズは文字数になります。

Fiber

f = Fiber.new do
   n = 0
   loop do
     Fiber.yield(n)
     n += 1 
   end
end

p f.resume #=> 0
p f.resume #=> 1
p f.resume #=> 2

アッカーマン関数

手元のマシン環境で計測してみた。

#!/usr/bin/env ruby

require "benchmark"

def ack(m, n)
  if m == 0 
    return n + 1
  elsif n == 0 
    return ack(m - 1, 1)
  else
    return ack(m - 1, ack(m, n - 1))
  end
end

Benchmark.bm do |b|
  b.report "ack" do
    ack(3, 7)
  end
end

Ruby1.8

      user     system      total        real
ack  1.290000   0.040000   1.330000 (  1.330020)

Ruby1.9

      user     system      total        real
ack  0.190000   0.000000   0.190000 (  0.190003)