mrubyだいぶ時間が立ってしまいましたが、技術書典6で新刊「mrubyバイトコードハンドブック」を頒布してきました。PDF版について、技術書典で頒布したものの内容を微修正したものを、対面電書とBOOTHにて、PDF版v1.1として本日更新反映しました。紙の本とPDF版をそれぞれBOOTHで販売してます。一万人を超える参加差があったようで、夕方まで会場は盛況でした。いろいろな人に実際に手にとって見てもらえるのはやはり刺激的です。訪れてくださった皆様、BOOTHから購入して頂いた方に心から感謝です。ネタが溜まってきたら同人誌書いて参加したいです。book質問@cloudear8さんから同人誌の内容について質問を頂いたので、分かる範囲で返答したいと思います。R(0)は常にselfが入ると書かれていたのに対して、OP_CALLではcallの戻り値をR(0)に代入すると書かれています。これは矛盾なく両立するのでしょうか?常に、というのは少し語弊がありました。通常、R(0)にselfが入っていますが、irepを抜けるとき、メソッドの戻り値をセットするための場所としても使用されています。OP_RETURNの処理を追うと該当する処理が見えます。OP_ONERRは命令の位置を、OP_EPUSHはirepを引数に取るようになっているかと思うんですが、この仕様の違いってなぜなんでしょうか?例外発生時に挙動を十分理解しているわけではないので、怪しい回答になっていることをご了承下さい。節のサンプルコードからわかるように、rescueブロックは、例外のキャッチの分岐があるので、irepではなくて、case式の実装と同じようにOP_JMPを使用した分岐の命令列になります。ensureブロックは、irepとして表現されています。このirepの中で使用した変数もirepローカルになることはなく、元irepと同じスコープとして扱われています。rescueブロックは、irep上の命令番地がわかれば十分で、ensureブロックはirep単位でスタックに積む必要があるので、このような使い分けになっていると思います。rescueブロックとensureブロックの実装方法の違いの理由については、私もよくわかりません。「aliasのために特別に命令を用意するほどでもないかな?」と書かれてますが、aliasってalias以外の機能で完全に代替ってできるんでしょうか?ここではaliasというメソッドは不要という意味ではなくて、OP_ALIASを準備せずとも、OP_SEND(:alias_method)でもよいのでは、という意味です。mruby1.4.1で同じサンプルコードをバイトコードに変換した結果は以下のとおりです。OP_ALIASの代わりに、alias_methodが実行されていることがわかります。normal限られた命令IDの一つを割いているので、OP_ALIASがあったほうが効率が良いケースがあるのでは、と思っています。OP_ARYDUPがあるのに、本の中のバイトコードではOP_ARRAYとOP_ARYCATを使って同等のことを行っている箇所が多く見られます。これは新しい命令だからバイトコード吐く側がちゃんと対応してないみたいな感じなんですかね?まつもとさんに聞いてみないとわからないですが、気になってた点をまず対応したのかと思います。*[1,2]“のユースケースを、比較してみると、命令の数が減っているのに加えて、レジスタが節約できていることがわかります。直近の対外的な活動予定を記載しています。開催しましたレポートを書こうと思っていたら、だいぶ遅くなってしまいました。...ディスカッションコメント一覧まだ、コメントがありませんコメントをどうぞメールアドレスが公開されることはありません。*ウェブサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。直近の対外的な活動予定を記載しています。...浦島太郎と辿るここ数年のmrubyこんにちは、kishimaと申します。...最近のお仕事2023年もそろそろ終わりということで、生存報告。さんしばらくブログから遠ざかってしまって返信おそくなりすみません。記事に関連する内容で教えて欲しいことがあります。さんコメントに気づくのが大変遅くなってすみません。Transcoderは自身でコンパイルする必要があります。さんお忙しい中失礼します。