Rubyで遊んだ日々の記録。あくまで著者視点の私的な記録なので、正確さを求めないように。
Rubyと関係ない話題にはその旨注記しているはず。なので、一見関係無いように見える話題もどこかで関係あるのかもしれません。または、注記の書き忘れかもしれません...
_ キター!
厳密には、1.8側が別ブランチになったので、1.9はMAINです。
_ いやまだほとんど変化はないんだけどね。
この日記はruby 1.9.0 (2003-12-25) [i386-mswin32]で生成しています。
WEBrick::HTTPUtils.parse_form_dataで、引数ioがnilの場合、空のハッシュを返すようになりました。includeされたモジュールのメソッドも報告されるようになったようです。SOAP::Property#loadというメソッドが追加されました。WEBrick::HTTPRequest#meta_varsメソッドで、Content-TypeとContent-Lengthはselfからは拾ってこないようになりました。WEBrick::HTTPRequest#parseメソッドで、httpsを実際に使用するかどうかは、ソケットがcertメソッドを持っているかどうかを見るようになりました。今まではソケットがOpenSSL::SSL::SSLSocket(の子孫)のインスタンスかどうかをみていました。Document-class:という文字列もクラス名の検索に用いるようになりました。Rational#**で、self < 0の時、Complex(self, 0)ではなくComplex.new!(self, 0)に対して処理を行うようになりました。Marshalのバージョンを4.6決めうちで出力していたのをやめました。instance_evalする代わりにinstance_variable_getを使うようになっています。OptionParser::Completion::completeで、単語境界の見方が間違っていた問題が修正されました。OptionParser::make_switchで、no-プレフィクスを忘れていた問題が修正されました。WEBrick::CGI#startで、NPHスクリプトではStatus:フィールドではなくステータス行そのものを出力するようになりました。WEBrick::CGI::Socketクラスの幾つかのメソッドの条件文が修正されました。WEBrick::HTTPRequest#meta_varsメソッドで、Content-TypeとContent-Lengthの正規表現が修正されました。TkScrollbar#assign・TkScrollbar#assign_listが追加されました。Pathname#+で、引数先頭の".."の解決が再実装されました。Pathname#joinは、後ろから順に結合していくようになりました。Pathname#parentは、Pathname#+を使用するようになりました。rb_check_inheritable()が実装されました。引数であるクラスが継承を許さない場合、例外が発生します。superclass()内にあった同様のチェックはこれを利用するように変更されました。Class.newに継承元になれないものを引数として与えた時にSEGVしていた問題も、これを利用してチェックすることにより修正されました。[ruby-dev:22316]SOAP::Propertyのフック系メソッドは、ブロックを参照で受け取るようになりました。HAVE_SETTIMERマクロが定義されていましたが、configureスクリプトにその指定は移動されました。これ合わせて、一部のファイルで直接プラットフォーム単位でsettimer()の有無をハードコードしていた部分が修正されました。Module#initialize_copyで特異メソッドもコピーするようになりました。[ruby-dev:22325]Class#initialize_copyが、実装されてるのになぜかメソッド定義されていなかったのですが、ちゃんと定義されるようになりました。map_charset()が常に文字列を返すように修正されました。URI::Generic::check_opaqueのtypoが修正されました。
_ 12月23日分。
読んでる人も疲れただろうけど、書いてる人ももうへろへろです。
WEBrick::CGIにmod_rubyサポートが追加されました。OpenSSLの有無をチェックするようになりました。WEBrick::CGI::Socket#cipherは、OpenSSL::SSLSocket#cipherに似た値を返すようになりました。Connection: closeヘッダを出力するようになりました。今まではkeep aliveでないときはConnectionヘッダを出力していませんでした。URI::Generic#check_user・URI::Generic#check_passwordは共に@registryと@opaqueの少なくとも一方がnilの場合は例外InvalidURIErrorを投げるようになりました。URI::Generic#user_infoにあった同様のチェックはなくなりました。URI::Generic#check_passwordは第二引数にユーザコンポーネントを受け取るようになりました。この引数のデフォルト値は@userです。IO#ungetcすると環境によっては誤動作する問題が修正されました。そんなことしようとすると例外が発生するようになっています。[ruby-dev:22330]Array#packでの、不要な負数チェックが取り除かれました。
_ perl 5.8.1だとCVSwebがうまく動作しないことが判明。
久しぶりにperlスクリプトを読んだよ。
_ どうも、-T指定時のexecのtaintチェックが厳しくなっているらしい。
従来は一つ目の引数がtaintedならはねていたのが、他の引数がtaintedでもはねるようになったみたい。
_ というわけで、しばらく前から動かなくなっていたjarpのPorting Libraries to Win32 CVS Repositoryも直りました。
例の問題もばっちりですよカテジナさん!
dupしたものを投げるようになりました。IOのように振舞うオブジェクトについて、read時にEOFだった場合、nilではなく""を返すようになりました。というわけで、まずIOとARGFがそのように変更されました。[ruby-dev:22334]constant re-assignment警告発生後、SEGVしていた問題が修正されました。[ruby-dev:22360]IO・ARGFの変更に追従し、EOF時のreadは""を返すようになりました。[ruby-dev:22334]StringIO#readはIO#readのように第二引数を受け付けるようになりました。[ruby-dev:22350]chompしていましたが、"\n"を選択的に取り除くようになりました。Test::Unit::Assertions#assert_raise・Test::Unit::Assertions#assert_nothing_raisedで、例外がクラスとは限らない(モジュールかもしれない)場合にも対応しました。$:の操作にちょっと気を使うようになりました。余計な重複がなくなるようになっています。StringIO#readがnilを返すシチュエーションで、第二引数が与えられている場合、IO#readと同様に第二引数の中身を空にしてから返るようになりました。[ruby-dev:22363]OpenSSL::SSL::SSLSocket#sysread・OpenSSL::SSL::SSLSocket#syswriteで、実際のソケットに対する読み書きでエラーが返されたとき、そのエラーを確認して、必要ならばリトライするようになりました。 この結果、一部の環境でむやみにエラーが出ていた問題が修正されました。って具体的には私んちの環境です。catch_timer()の中でrb_thread_schedule()は呼ばれなくなりました。システムコール中の割り込みは、TRAP_ENDの中でEINTRによって検出されます。これもpthread対応です。ungetc()絡みの修正。[ruby-dev:22364]かな。fflush()前後のTRAP_BEG・TRAP_ENDの除去は上の変更絡みかもしれません。flock()前後のTRAP_BEG・TRAP_ENDが取り除かれました。前日のfflush()と似てます。IOシリーズの仕様変更にZlib::GzipReader#readも追従しました。=begin/=end絡みでなんかバグがあったのが直ったそうです。nanosleep()を使うのにrtライブラリをリンクする必要があるのに対応しました。[ruby-core:2059]nanospleep()がない環境ではselect()を使うようになりました。getcontext()などを使用するとリンク時になってエラーを出すプラットフォームもに対応しました。[ruby-list:38984]ruby_1_8が切られました。以後、main trunkは1.9.0系列となります。requireしようとすると既に読み込まれているものとみなされていた問題が修正されました。この修正は1.9.0からのマージです。rb_str_update()は内部でrb_modify()を呼ぶようになりました。[ruby-dev:22417]getcontext()・setcontext()が使えるかどうかをconfigureで判定するようになりました。1.9.0からのマージです。quad intに範囲チェックが追加されました。1.9.0からのマージです。rtライブラリがリンクされていなくてnanosleep()を使えないままだったという問題が修正されました。1.9.0からのマージです。ARGF.readが引数としてnilを受け付けなくなっていた問題が修正されました。[ruby-dev:22433]ARGFからの読み込みがエラーとなってしまっていた問題が修正されました。[ruby-dev:22434] あってるかな...IO#readの第二引数が文字列かどうかをちゃんとチェックするようになりました。Array#packで、'I'の時に、MSBが立っていると例外が発生していた問題が修正されました。この条件では、従来、'i'と'I'で例外が発生し、'l'と'L'では例外が発生していなかったのですが、今回の修正によって、'i'と'l'で例外が発生するようになっています。[ruby-dev:22427] 1.9.0からのマージです。Init_process()のように、クラス名・モジュール名とInit_xxx()関数のアンダーバー以降で大文字小文字が異なる場合があることに対応しました。1.9.0からのマージ。Document-method:指定に対応しました。1.9.0からのマージ。StringIO.new.sysreadとしても例外EOFErrorが発生していなかった問題が修正されました。[ruby-core:2078] 1.9.0からのマージ。gzfile_read_all()が""を返したとき、行番号カウンタがインクリメントされていなかった問題が修正されました。[ruby-core:2078] 1.9.0からのマージ。
よく「1.9.0からのマージ」とか書いてありますが、実際には、1.8と1.9.0に同時にcommitされているのがほとんどです。今のところほとんど差がないですからね。
個人的にはもっともっと差を増やして欲しいところ。そうでないと複数のChangesを記述する意味がない1.9.0を追っかける意味がないですもんね。
_ そしてこっちが本命1.9.0の分。
なんで1.8はmajor.minor表記で、1.9.0がmajor.minor.teeny表記かというと、1.9からバージョン命名ルールが変わるからです。
いちおうおさらいしておくと、
ということになってます。
開発版に細かいバージョン番号を振る意味はほとんどないので、新しいルールの方が貴重なバージョン番号という資源を浪費しなくて合理的です。
_ 12月25日分。1.9.0はこの日の途中から生まれたので、当然記述も途中から。
requireしようとすると既に読み込まれているものとみなされていた問題が修正されました。dlfcn.hが#includeされていなかった問題が修正されました。rb_str_update()は内部でrb_modify()を呼ぶようになりました。[ruby-dev:22417]CLASS_OFマクロがrb_obj_class()関数呼び出しに置き換えられています。なんででしょう?getcontext()・setcontext()が使えるかどうかをconfigureで判定するようになりました。quad intに範囲チェックが追加されました。rtライブラリがリンクされていなくてnanosleep()を使えないままだったという問題が修正されました。ARGF.readが引数としてnilを受け付けなくなっていた問題が修正されました。[ruby-dev:22433]ARGFからの読み込みがエラーとなってしまっていた問題が修正されました。[ruby-dev:22434]IO#readの第二引数が文字列かどうかをちゃんとチェックするようになりました。Array#packで、'I'の時に、MSBが立っていると例外が発生していた問題が修正されました。この条件では、従来、'i'と'I'で例外が発生し、'l'と'L'では例外が発生していなかったのですが、今回の修正によって、'i'と'l'で例外が発生するようになっています。[ruby-dev:22427]Init_process()のように、クラス名・モジュール名とInit_xxx()関数のアンダーバー以降で大文字小文字が異なる場合があることに対応しました。Document-method:指定に対応しました。StringIO.new.sysreadとしても例外EOFErrorが発生していなかった問題が修正されました。[ruby-core:2078]gzfile_read_all()が""を返したとき、行番号カウンタがインクリメントされていなかった問題が修正されました。[ruby-core:2078]_ 暇な人は[Changes] 1.8と[Changes] 1.9.0を比較して、何が1.8にマージされてないか確認しておきましょう。
被捕捉アンテナ類
[\ay antenna (testing)]
[Ant]
[Antenna-Julia]
[LayserあんてなV2]
[nAntenna]
[nuance de Antenna]
[Rabbit's Antenna]
[Read List]
[Ruby hotlinks 五月雨版 (るるりん。)]
[してたま (私的アンテナ with たまてばこ)]
[ただのあんてな]
[ちゃらんぽらん]
[でこぽんリンク]
[なよろアンテナ]
[にっきトレーサー]
[偽善者あんてな - 2nd season -]
[湘南日記放送局(SDB)]
[はてなの各アンテナ]