2007-02-01から1ヶ月間の記事一覧
最新版の ruby 1.9 (r11928) で下のコードを走らせてみると、以下のような結果になる。 class A @@v = "I'm A" def A.av @@v end end class B < A def B.bv @@v end def B.update_v @@v = "I'm B" end end puts B.bv # --> I'm A # B から A の @@v が見える…
今日は、クラス内で定義されたクラスメソッドからクラス変数を参照する場合の、ruby 1.9 内部の動作を調べてみる。調べる Ruby のプログラムは以下の通り。 class A @@a = "Hello" def A.test_in puts @@a end end A.test_in # --> Hello (test_in.rb) puts …
昨晩8時半ごろ突然停電した。アメリカでは停電自体は別に珍しくもないが、大抵は5分以内に復活する。ところが今回は10分たっても20分たっても復活しない。外に出てみると、数軒先のあかりはついている。どうやらごく狭い範囲の停電らしい。 こういう場…
昨日まで調べていた ruby 1.9 の新機能、クラスローカルインスタンス変数が、最新のリビジョン(11813)では取り除かれている。 どうやら、この辺りの事情のようだ。 ごもっともなご意見である。 というわけで、今日はターゲットを変更して、クラス変数を調べ…
前回のおさらい。 クラスローカルインスタンス変数を、クラスからしか見えなくするために、クラスとインスタンス変数名の組でしかアクセスできない仕組みが 1.9 で導入された (ivar2)。変数名はそのものずばり "@_a" のような名前だが、クラスは eval_get_cv…
1.9 で最近導入されたクラスローカルインスタンス変数について少し調べてみた。クラスローカルインスタンス変数とは、C++ のプライベート変数のようなもので、サブクラスから参照することができない。現在の 1.9 の実装では @_ で始まるクラス変数がクラスロ…
Ruby の内部データ構造は union やハッシュテーブルを駆使してあって、デバッガで直接データを読むのはかなりつらい。幸い、構造体からデータを取り出すための関数が充実している(と思われる)ので、それらを使えば効率的に内部構造を調べることができる。…
今日は gdb を使って構文木あたりの動作を調べていたら、足がすべって YARV の方まで突入してしまった。2日目にして早くも RHG から離れている。今日は注釈でもなんでもない、疑問。第15章 メソッド http://i.loveruby.net/ja/rhg/book/method.html obj.met…
第12章 構文木の構築 ファイル名と行番号 http://i.loveruby.net/ja/rhg/book/syntree.html ……ということは、行番号が 2^13=8192 を超えると行番号表示がおかしくなるはずである。試そう。 File.open('overflow.rb', 'w') {|f| 10000.times { f.puts } f.put…
先日、Ruby のまつもとさんに会う機会があった。 これを機に Ruby の開発に参加しようと Ruby のソースを svn から取ってきて読みはじめたが、十年以上 C から離れていた身には、なにやら雲のようで、とりつく島もない。いささか途方に暮れてネットをさまよ…