タグ

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

  • ブロックのはなし - mirichiの日記

    RubyのProcやlambdaについての記事は検索するとよく出てくるが、ブロックはなぜかいまいちスポットライトが当たらない。あってもProcの説明のオマケみたいな感じが関の山。 この記事ではそんな不遇なブロックについて焦点を当ててみたい。 ブロックとは何か まずはここの認識を合わせておこう。Rubyの構文において、メソッド呼び出しの後ろにくっつくことがあるdo〜end、もしくは{〜}の間にあるコードの塊をブロックと呼ぶ。 すべてがオブジェクトであるRubyでも、言語の文法を構成する要素はオブジェクトではない。例えばifとか、代入式の=や、変数などはオブジェクトではない。当たり前といえば当たり前なのだが、同様に、文法を構成する要素であるブロックはオブジェクトではない。 Procオブジェクトと一緒に「似たようなもの」と説明されると地味に理解しづらいのだが、ProcはRubyの文法とは何の関係

    ブロックのはなし - mirichiの日記
  • 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の日記
  • 1