タグ

ブックマーク / mirichi.hatenadiary.org (2)

  • mrubyのVMざっくり解説 - mirichiの日記

    なんとなく、mrubyのVMの基的なところを書いておこうと思ったので。誰かの参考になれば。 大きな仕様的なところは、 ・32bit固定長のバイトコードを解釈して動作する。 ・レジスタをスタックに確保するタイプのレジスタマシンである。従って、スタックの任意の位置をレジスタ番号で指定して直接読み書き可能。 ・メソッドやブロックなどの単位でバイトコードがirep構造体にまとめられている。 みたいな感じ。 スタックの使い方 スタックトップがレジスタのR0となり、以下、R1、R2・・・と名前が付けられる。スタックの型はmrb_valueの配列であり、つまりmrubyオブジェクトが詰まっている。irepのコードを呼び出すとき、スタックの上から順に以下のような情報を積んでから呼ばれる。 (引数が2個あった場合の例) R0 |self | R1 |argument1| R2 |argument2| R3

    mrubyのVMざっくり解説 - mirichiの日記
  • mrubyのattr系メソッドの速度 - mirichiの日記

    mrubyのbenchmarkディレクトリにao-render.rb(AOベンチ)があるわけだが、このコードを見ると例えばVevtorクラスのgetter/setterは自前で定義されている。作った人(@miura1729さん)によると元はytl用のものでattr系メソッドが無かったからということなのだが、これをattr系で定義したら速くなるのだろうか。 Ruby1.9.3では速くなる。 require 'benchmark' class Foo def hoge @hoge end def hoge=(v) @hoge = v end end class Bar attr_accessor :fuga end Benchmark.bm do |bm| bm.report("Foo#hoge") do a = Foo.new 1000000.times do a.hoge = a.hoge

    mrubyのattr系メソッドの速度 - mirichiの日記
    goinger
    goinger 2012/08/25
  • 1