Ruby

インラインキャッシュ

最近のRuby処理系の話 この話とは多分関係ないと思うが、以前1.9のコードを読んでいたときに解らなかったことがある。 メソッドのinline cache情報(class, method, vm state counter)を登録するためにNODEを生成して、NODEへの参照をバイトコード列に埋め込…

演算子と可視性

1.9では、幾つかのクラスの演算子で、可視性変更が効かなくなっている。(protected, privateに変更しても実行できる) class Fixnum private :+ end p(1 + 2) class Array private :+ end p([1] + [2]) class String private :+ end p("1" + "2")高速化のため…

named captures assigning to local variables

名前の先頭文字が小文字でなければエラーにしているが、その名前を無視するだけで良いと思う。 チェックの仕方も変だ。ローカル変数に合わせるのであれば、先頭文字が大文字かどうかで判定するべき。(アンダースコアとマルチバイト文字は許可)

rb_enc_mbclen()

鬼車のmbc_enc_len()が文字列の終了位置を引数にもっていない理由は09/01の日記で説明しました。 そしてこの話は、ruby-dev:31651で、Ruby 1.9のrb_enc_mbclen()のインターフェースに、文字列の終了位置が引数にないという指摘が発端です。松本氏は、ruby-de…

Exponential Regexes (2)

昨日のメールに対して、Ruby 1.9の動作を調べた人がいた。 ruby-talk:2217061 でも、「is that a valid expression?」と言っているので、これがどういう問題なのかも知らないようだ。 Pythonでの動作も調べていて、「invalid expression」というエラーになる…

Exponential Regexes

ruby-talk:216975 Ruby 1.9について言及する人がいるだろうか?

makeでエラー (2)

「sandbox用の変更」というのは何だろう? bladeが止まっているのでruby-coreが見えない。 コミット前にコンパイルぐらいはして欲しい。

makeでエラー

CygwinでRuby 1.9のmakeに失敗した。 gcc -g -O2 -I. -I../../ruby_lang_org/ruby -DRUBY_EXPORT -c ../../ruby_lang_org/ruby/error.c gcc -g -O2 -I. -I../../ruby_lang_org/ruby -DRUBY_EXPORT -c ../../ruby_lang_org/ruby/eval.c ../../ruby_lang_org/r…

マージ

鬼車4.4.4をRubyにマージ。 あるMac OS Xユーザからは鬼車に対して、よく文字列の範囲外アクセスのバグ報告を受けるのだが、Ruby 1.9経由でそのような報告が来たことはほとんどない。Mac OS X上で使用している人が少ないのか、Ruby 1.9を使用している人自体…

SymbolとString (6)

SymbolとStringを区別しないで扱いたいという状況もあるだろうが、"a" == :a なのは過激すぎる。SymbolとStringを区別しないで文字列の内容が等しいかどうか比較するメソッドを追加するだけでよいのではないか? あとは、それに対応したHashクラスを追加する…

SymbolとString (5)

Symbolには、文字列の内容が同値であれば同一オブジェクトという性質があり、これは今の実装でも維持されている。しかし今でも意味があるだろうか? 対象をSymbolクラスだけではなくStringクラスまで拡げて考えると、現在の仕様では、"a" == :a である。同値…

SymbolとString (4)

結局、現在のRubyの実装と上記の方法の違いは、Symbol Tableに登録されていることを、別クラスで表現するか、ビットフラグで表現するかというだけである。 現在の実装方法は、文字列としての内容が同一であれば同一のものとして扱いたいのに、それが利用者か…

SymbolとString (3)

昨日書いたのは、最後の部分が少し変だった。(2) 同じ内容のSymbolとStringを、どこからみても同一のものとして扱いたい場合 Symbolクラスをなくして全てStringクラスにする。 SymbolとStringの差は、Symbol Tableに登録されている(従ってfreeze状態になって…

リリース方法

リリースが遅れるという問題を解決するのは、そんなに難しくないと思う。リリース直前にバグ報告が集中するのは、リリースが年に一度か二度しかないからだろう。毎月一日に機械的にリリースすればよい。人間が作業する必要も無い。リリース日付をバージョン…

SymbolとString (2)

結局どうしたいのかが良くわからないが、以下のようにすれば良いのでは? (1) 同じ内容のSymbolとStringをHashのキーとして使用した場合だけ同一のものとして扱いたい場合 今までのHashクラスはそのように改修して、SymbolとStringを完全に別のものとして扱…

SymbolとString

これはどういう意図なのだろう? ruby 1.9.0 (2006-09-08) [i386-cygwin] p("a" == :a) #=> true p("a" === :a) #=> true p(:a == "a") #=> false p(:a === "a") #=> false

並列実行がヤバイ (2)

regsをスレッドローカルに変更したら速くなったというのは、さっぱりわからない。単に気付いたから書いただけで、関係あるとは思わなかった。

追記

そうか、Rubyスレッドなら途中で切り替わらないからいいのか。だから今は大丈夫なのか。将来拙くなる可能性が高いというだけだった。

並列実行がヤバイ

re.cを見ると、regsがstaticなので並列実行が危険。 long rb_reg_search(VALUE re, VALUE str, long pos, long reverse) { long result; VALUE match; static struct re_registers regs; long range;そうは言っても、searchの度にregsをallocateするのはコス…

時差

Ruby CVSwebのAgeの表示が、9時間ずれているみたい。

講義資料

専修大学 ネットワーク情報学部 テキスト処理 (2006年度前期) 全部読んだ。

thread safe #2

昨日の件がわかった。 ネストしてメソッドコールしても大丈夫になるように、組込みメソッドを書くことにしているのだろう。例えばstring.cの中では、rb_funcall()を呼び出す前後にstr_mod_check()を実行して、文字列オブジェクトが他のスレッドで変更されて…

thread safe

それ以前に、RubyはRuby-threadに対してthread safeなのかどうかも知らなかった。どうなんだろう?

YARV thread

ささださんのコメントを最初に見たときには、YARVのことは頭の中に全くなかった。今日になって気になってきたので、るびまのバックナンバーのYARVの記事を読み直してみると、スレッドのことも書いてあるのに気付いた。 YARV Maniacs【第 5 回】の中に、YARV …

リリース

4.1.0をリリース。 2chで書かれていた、スレッドセーフになっていなかった部分を変更。 これに合わせてRuby 1.9(2006/05/15)も、onig_recompile()を使用しないように変更。

unused variable removed

parse.yの中に、使用していないローカル変数を残してしまったのは私です。すいませんでした。

thread safe

2chで、スレッドセーフになっていないと書かれていた。onig_search()の中で毎回排他制御するのはやりたくないので、あのようにコーディングしていたのだが、直すことにしよう。(Version 4.Xのみ) あの部分は、検索中の正規表現オブジェクトが他のスレッドに…

大変更内容予想

恐らく、Ruby M17Nか、GCアルゴリズムの変更のどちらか。

マージ

鬼車4.0.3をRubyにマージした。 最近、Ruby 1.9の更新が少ない。手元で大変更作業をしているのだろうか?

パターンコンパイル時点の速度改善

ruby-dev:28561の件について、改善できるかどうかを少しだけ調べた。 以下のスクリプトを実行して、gprofで処理時間を見てみた。 (妙なパターンだが、最初に報告した人が勘違いしたものだろう) for i in 0..200000 Regexp.new("/^\w+-\w+$/") end結果は、opt…