Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

RubyによるRuby実装「Runinius」でRubyの挙動を学ぶ


Rubinius : Use Ruby™
Runiniusは、RubyLLVMによるRuby実装です。
聞いた所では、本家より高速だとか何とか・・・

例えば、文字列こんな感じです。
rubinius/string.rb at master · rubinius/rubinius · GitHub

each_charやeach_byteのようなイテレータまわりを覗いてみると・・・

  def each_char
    return to_enum :each_char unless block_given?

    bytes = 0
    while bytes < @num_bytes
      char = find_character(bytes)
      yield char
      bytes += char.num_bytes
    end

    self
  end

  alias_method :chars, :each_char

  def each_byte
    return to_enum :each_byte unless block_given?
    i = 0
    while i < @num_bytes do
      yield @data.get_byte(i)
      i += 1
    end
    self
  end