ワナビーエンジニアのブログ

なんでもいいから文化的な生活を送りたい

C

Rubyのメソッド呼び出しの流れ(4)

前回の続き。今回はまず構造体の構成を確認していきます。 &me->def->body.cfuncのあたりです。 meというのはrb_callable_method_entry_t型ですが、このmeは見覚えがあって、send関数で使用しているrb_call_cache構造体のメンバとなっています。 240struct r…

Rubyのメソッド呼び出しの流れ(3)

前回からの続き。 rubyのメソッドのタイプをみていきます。 method.hのrb_method_type_tです。 100typedef enum { 101 VM_METHOD_TYPE_ISEQ, // ユーザー定義は基本これ 102 VM_METHOD_TYPE_CFUNC, // 組み込みメソッドはこれ 103 VM_METHOD_TYPE_ATTRSET, 1…

Rubyのメソッド呼び出しの流れ(2)

前回からの続き、rb_call_cache構造体を見ていきます。 コードの後に説明書くと分かりにくかったので、行ごとにある程度コメントを書いてみます。 rb_call_cacheはvm_core.hにあります。 237struct rb_call_cache; 238typedef VALUE (*vm_call_handler)(stru…

Rubyのメソッド呼び出しの流れ(1)

Rubyの#13053を読んでみる(1)から見ていった中で、 rubyでArray#select!を書いた後に、どうのようにrb_ary_select_bangが呼ばれているのか気になったので見ていきます。 (現在 svnのrevisionは57251) 以下、RubyのしくみとYarvManiacsを参考に、内容を咀嚼し…

Rubyの#13053を読んでみる(3)

前々回、 前回でlen[0]、len[1]が明らかになったので、select_bang_ensureをみていきます。 修正前コード static VALUE select_bang_ensure(VALUE a) { volatile struct select_bang_arg *arg = (void *)a; VALUE ary = arg->ary; long len = RARRAY_LEN(ary…

Rubyの#13053を読んでみる(2)

前回に続いてrb_ary_select_bang()を読んでいきます。 忘れた方も多いと思いますがArray#select!のことです。 rb_ary_select_bang()を読む static VALUE rb_ary_select_bang(VALUE ary) { struct select_bang_arg args; RETURN_SIZED_ENUMERATOR(ary, 0, 0, …

Rubyの#13053を読んでみる(1)

前回のあと、しばらくしてsvn updateし直してからmakeしてみたところ無事rubyのビルドが成功しました。やはり単に最新のrubyを使うだけでいろんなバグが踏めそうです。(普通にrubyを使うにはそれが目的でないとは無いと思いますが) Issue読んでみる さて、…

void関数にreturnを書くや否や

C

void関数にreturnを書くや否や きのこの山 vs たけのこの里 vim vs emacs tab派 vs space派 等々、様々な信条の争いを見てきましたが、昨日仕事でコードレビューをしていた時ふと気づきがありました。 戻り値の無い関数(及びメソッド)の終端に、returnを書…

C言語でgzip作ってみた

C

C言語でzlib.hを使ってgunzipを作る機会があったので、 作ってみたテスト。Ubuntu14.04にlibz.aがなかったのでインストールした。 下記を参考にさせてもらった。 zlib のインストール | 自宅サーバー Debian/Ubuntuコンパイルは $ gcc hogehoge.c -lz とする…

gist使い始めた

C

2015年初ポストです。 基本飽き性なのでブログ続きませんなー。この5ヶ月はgitサーバー構築やらDB試験やらC#勉強やらやってました。gitの使い方がようやく分かってきたので githubとgistを使い始めました。テストテスト。練習にDIR_NAMEにあるファイル…