丁稚な日々

Rubyで遊んだ日々の記録。あくまで著者視点の私的な記録なので、正確さを求めないように。
Rubyと関係ない話題にはその旨注記しているはず。なので、一見関係無いように見える話題もどこかで関係あるのかもしれません。または、注記の書き忘れかもしれません...

[直前] [最新] [直後] [Top]

Nov.21,2003 (Fri)

Revision: 1.1 (Nov.21,2003 14:00)

[Changes]

_ 11月20日分。

  • nagai: 本体 [差分1,2,3,4] ネイティブスレッド(*1)を利用した拡張ライブラリがあると、その拡張ライブラリがうまく作られてないとGCで死んでしまうのですが、今現在のスレッドがrubyインタプリタの動いているスレッドかどうかを判定するAPIとしてis_ruby_native_thread()が追加されました。
    また、それを利用して、GCやRubyスレッドの切り替え時には、いつのまにか別のネイティブスレッドで動いてしまっていないか判定するようになりました。
    11月5日に追加された--with-pthread-extは、今回の変更に伴い削除されました。
    以上まとめて[ruby-dev:21961]からの議論。
  • eban: 2003-11-20
  • aamine: lib/fileutils [差分] 先日来のinoの扱いについて、OS/2(os2-emx)もWindowsと同じ扱いとなりました。また、逆に、djgppは外されました。
  • eban: 本体 [差分] mingw版でcygwinのpthreadライブラリを検出してしまっていた問題が修正されました。

付記

(*1) ネイティブスレッド
誤解を受ける書き方かも。RubyのThreadではなくて、OS側のスレッドということです。その実装がカーネルにあるかライブラリにあるかは関係ないです、この場合。

Nov.22,2003 (Sat)

Revision: 1.1 (Nov.22,2003 16:57)

[Changes]

_ 11月21日分。

  • ntalbott: lib/test/unit [差分1,2] sendじゃなくて__send__を使うようになりました。って今頃かよ!
  • nagai: 本体 [差分1,2,3] pthread.hをincludeせずにpthread_tを使用していたため、一部のプラットフォームでビルドできなくなっていた問題が修正されました。[ruby-dev:21987]
    また、HAVE_NATIVETHREADが定義されないときにはis_ruby_native_thread()をマクロとして定義するようになりました。
  • eban: 2003-11-21
  • nagai: ext/tk [差分] TkWindow#pack_propagateTkWindow#grid_propagateのバグが修正された、ということですが、差分をみたところ、それぞれの引数の初期値がnilからNoneにかわり、かつ、効果が反転したようです。
  • nagai: ext/tk [差分] TkEntry::ValidateArgs.scan_argsで、UTF-8のときに何か不幸があった問題が修正されたんだと思いますが、よくわかりませんごめんなさい。

_ 次回は超大作になっちゃう予定です。ひえぇ...

Nov.24,2003 (Mon) 振替休日

Revision: 1.3 (Nov.24,2003 16:37)

[mswin32] 拡張ライブラリうごかない

_ 仕事(そう、休日出勤なのです)でちょっとしたスクリプトを書いて実行してみたら、ソケットを使おうとするとなんかエラーが出る。
エラーが出る部分だけ切り出して試そう、と思ってirbを実行... したら、readline.soでSEGV。
じゃあミニマム再現コード、というわけでruby -r socket -e 0でエラー。
ついでにruby -r readline -e 0はSEGV。うぐぐ。
えーと、他のも試すか。ruby -r bigdecimal -e 0はエラー。要するに拡張ライブラリ全滅かよ。いつからだー。
SEGVはおいといて、エラーが出る物については、エラーはwrong argument type Fixnum (expected Class) (TypeError)というもの。うーん。

_ ではデバッグ用拡張ライブラリを作ってみますかね。

% cat test.c
#include "ruby.h"
static VALUE cTest;
void Init_test(void)
{
    cTest = rb_define_class("Test", rb_cObject);
}
% ruby -r mkmf -e "create_mkmf 'test'"
% nmake
(...)
% ruby -r ./test -ve 0
ruby 1.8.1 (2003-11-22) [i386-mswin32]
./test.so: wrong argument type Fixnum (expected Class) (TypeError)
% 

んぐむむむ。

% cat test.c
#include "ruby.h"
static VALUE cTest;
void Init_test(void)
{
    rb_warn("%p", rb_cObject);
    cTest = rb_define_class("Test", rb_cObject);
}
% ruby -r mkmf -e "create_mkmf 'test'"
% nmake
(...)
% ruby -r ./test -e 0
./test.so: warning: 201C25FF
./test.so: wrong argument type Fixnum (expected Class) (TypeError)
% 

なるほどFixnumだ。

_ さてどこから手をつけるかなぁ。
えーと、2003-11-21なバイナリだと大丈夫だなぁ。
えー、あの大量のコミットから原因切り分けないといけないのー?

_ ebanさんにIRCで相談してみたところ、ebanさんの手元(VC7最適化なし)だと大丈夫だということなので、最適化オプションを外してやってみる。
... うーん、同じだ。
あ、拡張ライブラリの方で最適化オプション外さないとダメか。... 同じ。

_ まてよ、そもそも本体と拡張ライブラリとどっちが悪いんだろう。両方?

% cd 20031121
% ./ruby -r ../20031122/ext/socket/socket -ve 0
ruby 1.8.1 (2003-11-21) [i386-mswin32]
./test.so: wrong argument type Fixnum (expected Class) (TypeError)
% cd ../20031122
% ./ruby -r ../20031121/ext/socket/socket -ve 0
ruby 1.8.1 (2003-11-22) [i386-mswin32]
% 

う、本体じゃなくて拡張ライブラリが悪いのか。むぎゅーん。
ebanさんのところでも、拡張ライブラリを再コンパイルしたら問題が再現できたとのこと。

_ すると、lib/mkmf.rbかなあ。違いはXCFLAGSだけなんだけど。
そもそも、XCFLAGSなんて空だよねぇ。

% grep XCFLAGS rbconfig.rb
  CONFIG["XCFLAGS"] = "-DRUBY_EXPORT"
% 

... ぎゃふん!
俺か、俺が悪いのか!
XCFLAGSが空だという思い込みが敗因かよー。

_ というわけで、bcc32/Makefile.sub・win32/Makefile.sub・wince/Makefile.sub(これだけ実は問題なかったけど、一応)を修正してcommit。

% ruby -r socket -ve 0
ruby 1.8.1 (2003-11-24) [i386-mswin32]
% 

よし、直った。

_ やー、preview3までに気づいてよかった。とゆーか一昨日の時点で気づけよ...

Nov.25,2003 (Tue)

Revision: 1.2 (Nov.25,2003 16:49)

[Changes]

_ さて、溜まりに溜まっております。

_ 11月22日分。

  • ntalbott: lib/test/unit [差分] Test::Unit::Util::BacktraceFilter#filter_backtraceで、例外がバックトレースを持たないときに正常に動作していなかった問題が修正されました。
  • matz: 本体, ext/curses, ext/etc, ext/pty, ext/socket, ext/syslog, lib/mkmf [差分1,2,3,4,5,6,7,8,9,10,11,12,13] NeXT・OpenStep・Rhapsodyサポートを改善するパッチが取り込まれました。[ruby-core:1596]
    かなり数が多いので、詳細についてはruby-coreかChangeLog(差分)を見てください。
  • matz: 本体 [差分1,2] getcwd()を直接使用するのではなく、util.cのmy_getcwd()を使用するようになりました。また、my_getcwd()getcwd()のない環境でもgetwd()を使って動作するようになりました。
  • matz: 本体 [差分] Exception#to_strException#to_sとは別に定義されました(デフォルトではException#to_sを呼びます)。また、Exception#messageは今まではException#to_sと同じでしたが、Exception#to_strと同じに変えられました。
  • matz: 本体 [差分] 新規にクラスが定義された場合のみrb_class_inherited()が呼ばれるようになりました。
    例外発生時に例外の位置が保存されない場合があったのが修正されました。で、あってるのかな...
  • matz: 本体 [差分] pthreadライブラリとリンクされると、使用可能なスタックのサイズが小さくなってしまう場合が多いため、--enable-pthreadな時はとりあえず使用するスタックサイズを1/4にするようになりました。
  • matz: 本体 [差分] marshal_dump()_dump()経由のダンプ時、特異メソッドはチェックされなくなりました。
  • matz: 本体 [差分] freezeされているクラス/モジュールに対してクラス変数を追加するなどした場合の例外のメッセージが、クラスとモジュールとで分離されました。
  • matz: ext/curses [差分1,2] 上記のNeXT・OpenStep・Rhapsodyサポートのパッチとかぶってますが、こちらはcursesの機能追加です。Curses.timeout=Curses.def_prog_modeCurses.reset_prog_modeの各クラスメソッドと、Curses#nodelay=Curses#timeout=の各メソッドが追加されました。[ruby-core:1707]
  • matz: lib/cgi [差分] StringIOが使える時に、CGIに10240バイトより小さいファイルを送ると例外NoMethodErrorが発生していた問題が修正されました。[ruby-dev:21925]
  • matz: lib/xsd [差分] OS/2サポート改善パッチがとりこまれました。[ruby-dev:21972]
  • eban: 2003-11-22
  • usa: 本体 [差分1,2,3] 上のNeXT・OpenStep・Rhapsodyサポート改善パッチの副作用で、bccwin32・mswin32・mswinceの各プラットフォームでビルドできなくなっていた問題が修正されました。
  • usa: ext/curses [差分] 上記のcurses機能追加の副作用で、NetBSDでビルドできなくなっていた問題が修正されました。
  • nagai: ext/tk [差分http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/ext/tk/lib/tk.rb?cvsroot=src&r1=1.96&r2=1.97] TkWindow#grab_releaseメソッドが追加されました。
    また、TkCompositeのバグが修正された、とのことです。が、どんなバグが修正されたのかはわかりません。
  • nagai: ext/tk [差分] バグ修正だそうです。が、どんなバグが修正されたのかはわかりません。
  • nagai: ext/tcltklib [差分] rb_thread_schedule()を呼ぶ前にnative threadチェックが追加されました。
  • nagai, eban: 本体 [差分] configureのオプション--enable-pthreadが追加されました。デフォルトはyesです。--disable-pthreadを指定することによって、pthreadライブラリをリンクしなくなります(つまり従来の挙動に戻る)。

_ とりあえずここまで。残りは後ほど。

Nov.26,2003 (Wed)

Revision: 1.3 (Nov.26,2003 00:51)

バグ

_ なんてこった... _| ̄|○
吊ってきます...
 ∧||∧
(  ⌒ ヽ
 ∪  ノ 
  ∪∪

Nov.27,2003 (Thu)

Revision: 1.4 (Nov.27,2003 12:36)

[Changes]

_ さぼりすぎ。

_ 11月23日分。
なし。Changesを始めてから初かな?

_ 11月24日分。

  • usa: 本体 [差分1,2,3] 11月22日の修正の副作用で、それ以降に作成した拡張ライブラリがrubyから呼び出せなくなっていた問題が修正されました。
  • usa: 2003-11-24
  • akr: lib/open-uri [差分] オプションが正しいかどうかをちゃんとチェックし、サポートしていないオプションが渡された場合は例外ArgumentErrorが発生するようになりました。
    また、content_length_procおよびprogress_procというオプションが追加されました。
  • eban: 本体 [差分] djgpp版で、curses・etc・zlibの各モジュールもサポートされました。
  • eban: ext/etc [差分1,2] djgpp版のため、passwd構造体のpw_passwdメンバの有無とgroup構造体のgr_passwdメンバの有無をチェックするようになりました。
  • akr: lib/open-uri [差分] CGI環境下(環境変数REQUEST_METHOD存在時)では、環境変数HTTP_PROXY(http_proxy)を見ずに環境変数CGI_HTTP_PROXY(CGI_http_proxy)を見るようになりました。[ruby-dev:22013]
  • akr: lib/open-uri [差分] リダイレクトの処理に、例外ではなくcatchthrowを利用するようになりました。
    また、HTTPとFTP間を除いては、スキームをまたがるリダイレクトは例外RuntimeErrorを発生するようになりました。これは、例えば、HTTPからローカルファイルへのリダイレクトなどを禁止するためです。

_ 11月25日分。

_ 11月26日分。

  • gotoyuzo: lib/webrick [差分1,2] クライアントからのリクエストにあるkeep-aliveフラグをそのままレスポンスに戻すようになりました。
    また、そのために、WEBrick::HTTPResponse#keep_alive=メソッドが追加されました。
  • why: ext/syck [差分1,2,3,4,5] 大きいblock scalar・コメント・quoted scalar・plain scalarでバッファオーバーフローが発生していた問題が修正されました。
    これに関連して、利用するバッファのサイズを外部から指定・参照するためのYAML::Syck::Loader#bufsize=YAML::Syck::Loader#bufsizeの各メソッドが追加されました。
    また、バッファサイズのデフォルト値は16KBから4KBに変更されました。
  • eban: 2003-11-26

_ これでようやっと追いついたぞ、と。

Nov.28,2003 (Fri)

Revision: 1.2 (Nov.28,2003 10:04)

殺意

_ 人はどういうときに殺意を覚えるのか、というのは、人によっていろいろ違うんだろうけど、とりあえずグラコロの話題を聞くたびに破壊衝動にかられる今日この頃です。
恵まれたる者たちよ、あなた方の一口の裏には幾千もの恵まれざる人々の涙があることを忘れないように。

_ てゆーか、"冬の定番"とか多くのお客様に愛され続けとか今年もいよいよグラコロの季節ですとかゆーの、喧嘩売ってるとしか思えません。
さらに、香川と岡山だけ飛び地でやってるのもますます敵意をそそります。

[Changes]

_ 11月27日分。

  • eban: 本体 [差分] mswin32/mingw32版で、FileTest.exist?("NUL")falseとなる問題が修正されました。ついでにFile.exist?("//host/share/.")falseになっていた問題も修正されました。
    ebanさんの日記も参照。
  • eban: 2003-11-27
  • nagai: ext/tk [差分] TkTimer#cancel_on_exception=TkTimer#loop_rest=は、それぞれ、引数の値ではなくselfを返すようになりました。
    TkTimer.callback内では例外を捕捉しなくなりました。
    TkTimer#do_callbackでは、今までは、@cancel_on_exceptiontrueの時に例外が発生した場合、nilを返していましたが、その発生した例外を返すようになりました。
    TkTimer#waitは、実行中に例外が発生した場合、その例外を投げるようになりました。
  • knu: 本体 [差分1,2] FreeBSD/ia64で、スレッドやGCが絡んだときに正常に動作していなかった問題が解消されました。
    make testも通ったそうで、おそらく実用的に使えるレベルになったのだと思います。

IRCネタ多し。


被捕捉アンテナ類
[\ay antenna (testing)] [Ant] [Antenna-Julia] [LayserあんてなV2] [nAntenna] [nuance de Antenna] [Rabbit's Antenna] [Read List] [Ruby hotlinks 五月雨版 (るるりん。)] [してたま (私的アンテナ with たまてばこ)] [ただのあんてな] [ちゃらんぽらん] [でこぽんリンク] [なよろアンテナ] [にっきトレーサー] [偽善者あんてな - 2nd season -] [湘南日記放送局(SDB)] [はてなの各アンテナ]