Hatena::ブログ(Diary)

PB memo このページをアンテナに追加 RSSフィード

2014-07-29 ruby-trunk-changes r46991 - r46998

[][]ruby-trunk-changes r46991 - r46998

今日は Marshal.load, dump での Symbol の扱いの修正などがありました。

nobu: r46991 2014-07-29 05:36:50 +0900

Marshal.load で Symbol を load する時に sym2encidx() の引数に r_symbol() と r_object() を直接書いていたのを、先に r_symbol() を呼んで結果を変数に代入するようにしています。 r_symbol() と r_object() は Marshal.load の読み込み元からの入力を読む副作用のある関数なので、呼ばれる順番に意味がありますが、関数引数は評価順が定まっていないので、明示的に r_symbol() を先に呼ばれるようにしています。

svn: r46992 2014-07-29 05:36:56 +0900

version.h の日付更新。

nobu: r46993 2014-07-29 12:28:43 +0900

Marshal.dump の Symbol の書き出しで、同じ Symbol を複数回書き出した時にちゃんと共有されていなかったのを修正しているみたいです。 String 化したものを書き出していたので元の Symbol のまま書き出すようにすることで参照を共有できる時は二重に Symbol の名前を書き出さないようにしています。おそらく load 時の結果には影響しないと思われますが(同じ名前で load したら Symbol は同じになると思うので)。

nobu: r46994 2014-07-29 16:41:35 +0900

emacs 用のスクリプト misc/ruby-additional.el の ruby-encode-unicode修正

nobu: r46995 2014-07-29 16:41:42 +0900

misc/ruby-additional.el の ruby-encode-unicode のキーバインディングの変更。 uncomment-region とかぶっていたので変更したそうです。

nobu: r46996 2014-07-29 17:22:33 +0900

compile.c の compile_data_alloc() で gcc-4.2 での警告抑制のため明示的なキャストを追加しています。

suke: r46997 2014-07-29 19:48:57 +0900

拡張ライブラリ win32ole の folerecord_method_missing() から内部的なインスタンス変数 fields (先頭が "@" でないので ruby スクリプトからは不可視)の操作部分を olerecord_ivar_get()、olerecord_ivar_set() として切り出すリファクタリング

suke: r46998 2014-07-29 22:25:02 +0900

拡張ライブラリ win32ole で WIN32OLE_RECORD から WIN32OLE_VARIANT への変換時にインスタンス変数 fields の Hash の値が nil のものはスキップするようにしています。

2014-07-28 ruby-trunk-changes r46974 - r46990

[][]ruby-trunk-changes r46974 - r46990

今日は主にドキュメントの変更でした。

zzak: r46974 2014-07-28 04:37:10 +0900

拡張ライブラリ openssl が HMAC のサポートされていない OpenSSL とリンクされている時に表示する警告メセージの英文を修正しています。 https://github.com/ruby/ruby/pull/665

svn: r46975 2014-07-28 04:37:23 +0900

version.h の日付更新。

zzak: r46976 2014-07-28 04:41:22 +0900

拡張ライブラリ zlib の rdoc 用コメントの typo圧縮率の指定の定数についての記述を変更しています。 デフォルトの値や定数の実際の数値を実装の詳細(リンクするライブラリによっては変化するかもしれない)として消しています。まあ確かにそうですね。しかし数値の大小どっちが圧縮率優先なのかというのがわからなくなるなぁ(そしてそれも実装依存と言えるのかもしれない)。 https://github.com/ruby/ruby/pull/682

zzak: r46977 2014-07-28 05:14:11 +0900

Time#wday の実装についての引用元(Perl の実装を参考にしたらしい)のリンクが切れていたので削除しています。 うーむ、残念。けど "The idea is borrowed from Perl" という一文と 2037年が抜けているのがわざとであることは残しておいたほうがいいんじゃないかなぁ(前者は respect として。後者は後で読んだ時のため)。 [ruby-core:63857] [Bug #10071]

zzak: r46978 2014-07-28 05:23:45 +0900

File.file? の symbolic link の扱いについて追記と、マークアップ修正[ruby-core:63842] [Bug #10067]

zzak: r46979 2014-07-28 05:34:18 +0900

標準添付ライブラリ uriURI.join は結合する前にそれぞれの文字列を RFC3986 に準じて URI として解釈することを追記しています。 チケットみるとわかると思いますが、まあ、報告者の気持ちもわからんではないですね…。 [ruby-core:63862] [Bug #10075]

zzak: r46980 2014-07-28 05:37:49 +0900

r46979 の ChangeLog エントリの typo 修正

nobu: r46981 2014-07-28 05:51:46 +0900

拡張ライブラリ win32ole の x86_64 cygwin での警告除去のためのキャスト追加。

zzak: r46982 2014-07-28 05:58:05 +0900

Time.strptime および Time#strftime の "%Y" 指示子についての rdoc コメントの記述を修正しています。私の英語力だと微妙なニュアンスの違いくらいにしか感じられませんが、strptime で4桁までない数値でも読み取れるということを表現しているのだと思います。 [ruby-core:57330] [Bug #8941] [ruby-core:63779] [Bug #10049]

zzak: r46983 2014-07-28 05:59:25 +0900

r46982 の ChangeLog のチケット番号を修正しています。 修正前のチケットも修正後のチケットから参照されているので、間違いというわけではないですが(なので ruby trunk changes では併記しました)。

zzak: r46984 2014-07-28 06:27:10 +0900

標準添付ライブラリ uriURI.parse の rdoc コメントに、URI として利用できない文字が含まれている可能性があるときはまず URI.escape でエスケープすることを推奨するコメントを追加しています。 これも、報告者の気持もわかるけどなぁ。勝手にエスケープしてくれよという。…あれ、なんか少し前にそういう変更があったような気がするなぁ。 [ruby-core:61078] [Bug #9563]

zzak: r46985 2014-07-28 06:35:47 +0900

Kernel#catch の rdoc 用コメントを修正しています。 throw が呼ばれた時のフローなどの説明を詳しくしているみたいです。 [ruby-core:60964] [Bug #9551]

zzak: r46986 2014-07-28 06:38:23 +0900

r46985 の続きみたいですが Kernel#catch の rdoc 用コメントの改行位置の変更のみみたいです。 [ruby-core:60964] [Bug #9551]

nobu: r46987 2014-07-28 14:38:26 +0900

common.mk の clean-platform ターゲットのコマンドで /dev/null を決め打ちで書いていたところがあったので Windows 環境などを考慮して $(NULL) という変数を利用するようにしています。

nobu: r46988 2014-07-28 17:15:42 +0900

Symbol GC の導入に絡んで、内部的に ID を利用していたけど ID を直接使う必要はないところでは ID ではなくて Symbol を使うようにして、不要な pindown による Immortal Symbol 化を防いでいます。

suke: r46989 2014-07-28 20:26:43 +0900

拡張ライブラリ win32ole で WIN32OLE_RECORD の method_missing の引数を可変にして、値の代入(setter 風のメソッド呼び出し)も可能にしているようです。

nobu: r46990 2014-07-28 20:28:55 +0900

定数 Bignum::GMP_VERSION、Dir::FNM_SYSCASE の rdoc 用コメント追加、nodoc タグの追加などドキュメントの修正

2014-07-27 ruby-trunk-changes r46961 - r46973

[][]ruby-trunk-changes r46961 - r46973

今日は Method#super_method、UnboundMethod#super_method という新機能の追加などがありました。

nobu: r46961 2014-07-27 01:13:21 +0900

メソッド呼び出しの可視性チェックのエラーで NameError 例外を発生させる処理を rb_print_inaccessible() という関数に切り出して使いまわすようにしています。

nobu: r46962 2014-07-27 01:13:33 +0900

rb_print_undef()、rb_print_undef_str() および r46961 で切り出した rb_print_inaccessible() で PRIsVALUE を利用するように、また必要に応じてクオートするようにしています。

svn: r46963 2014-07-27 01:13:35 +0900

version.h の日付更新。

nobu: r46964 2014-07-27 01:22:41 +0900

Method#super_method および UnboundMethod#super_method というメソッドを追加して Method/UnboundMethod オブジェクトがそこで super が呼ばれたら呼び出されるメソッドを Method/UnboundMethod オブジェクトとして返すようにしています。先日の開発者会議で採択された新機能みたいです。 [ruby-core:62202] [Feature #9781]

zzak: r46965 2014-07-27 01:47:27 +0900

r46964 で追加された Method#super_method の rdoc 用コメントを追加しています。

hsbt: r46966 2014-07-27 02:11:56 +0900

標準添付ライブラリ delegate から if __FILE__ == $0 で括られていたサンプルコードを sample/delegate.rb に切り出しています。

hsbt: r46967 2014-07-27 02:12:11 +0900

標準添付ライブラリ weakref でも if __FILE__ == $0 で括られたサンプルコードを sample/weakref.rb に切り出しています。

svn: r46968 2014-07-27 02:12:17 +0900

r46966 で新規追加した sample/delegate.rb の svn property 設定。

hsbt: r46969 2014-07-27 02:44:07 +0900

標準添付ライブラリ shell, tmpdir, uri/generic などで未使用のローカル変数を削除して警告除去。

zzak: r46970 2014-07-27 05:13:03 +0900

irb の rdoc 用コメントで IRB.conf の :PROMPT_I の値が nil だったけど nil は不正なので ">>" に修正しています。 https://github.com/documenting-ruby/ruby/pull/37

nobu: r46971 2014-07-27 10:46:50 +0900

文字列から Symbol や ID を取得する関数群がシンボルを管理しているテーブルの内部的な構造 st_data を直接返していたのをやめて VALUE 型や ID を返すようにリファクタリングしています。

nobu: r46972 2014-07-27 10:46:56 +0900

Symbol を管理する global_symbols テーブルの操作を register_symid_direct()、unregister_sym_str()、unregister_sym_id()、unregister_sym() といった関数として切り出しています。

hsbt: r46973 2014-07-27 20:04:28 +0900

標準添付ライブラリ cgi、erb、mkmf、net/http、optparse、prime、racc、rexml などでも未使用のローカル変数を削除して警告除去しています。

2014-07-26 ruby-trunk-changes r46950 - r46960

[][]ruby-trunk-changes r46950 - r46960

今日はメモリ確保+クリアをまとめて行う ZALLOC()/ZALLOC_N() というマクロの導入や、引き続いての構造体サイズの削減などがありました。

normal: r46950 2014-07-26 05:57:02 +0900

symbol.c で if のブロックの閉じかっこのあとに不要なセミコロン(空文)があったところがあったので削除しています。

svn: r46951 2014-07-26 05:57:15 +0900

version.h の日付更新。

normal: r46952 2014-07-26 06:34:35 +0900

ALLOC()/ALLOC_N() と MEMZERO() でのクリアを同時に行う ZALLOC()/ZALLOC_N() というマクロを導入しています。 xcalloc() を使うことでコードサイズの縮小を狙っているとのこと。拡張ライブラリ書く人にも関係します、が過去のバージョンでもビルドできるようにすることを考えると互換性のための自前の定義などが必要になるのですぐには利用しにくいでしょうね。 [ruby-core:63951] [Feature #10082]

normal: r46953 2014-07-26 06:36:58 +0900

r46952 の ChangeLog エントリに ML とチケットの番号の参照を追記しています。

normal: r46954 2014-07-26 06:47:20 +0900

parser.y の struct parse_params のメンバの順番をいれかえて効率よくパックされるようにして構造体サイズを減らしています。

nobu: r46955 2014-07-26 13:10:25 +0900

r46924 および r46928 の sizes.c の生成のためのルールの記法の nmake 対応で、結局 r46924 を revert しています。が先頭の "$" が残ってますね。 nmake 死すべし、とのことです。 nmake...

nobu: r46956 2014-07-26 15:16:19 +0900

r46955 で消しきれてなかった "$" を消しています。

normal: r46957 2014-07-26 16:30:26 +0900

構造体 rb_iseq_t をさらに iseq_size と line_info_size の型をそれぞれ long と size_t から unsigned int に変更することでサイズ削減しています。 命令列のサイズの上限が 4GB までになるということですが、まあ充分でしょ、ということです。

normal: r46958 2014-07-26 16:57:44 +0900

構造体 struct iseq_compile_data_storage でも pos, size を unsigned long から unsigned int に変更し、さらに別途メモリ領域を確保してそのポインタを buff に保持するようにしていたのを、char buff[1] のような配列として宣言しておいて必要なサイズのぶんこの構造体につけたしてまとめてメモリ確保するようにしてサイズを削減しています。 C ではよくやる手法ですが、いやーすごい執念だなぁ。

shyouhei: r46959 2014-07-26 17:28:05 +0900

拡張ライブラリ objspace の ObjectSpace.dump で全オブジェクトの情報を dump する時に、dump_append() に fflush() があるため1byte 出力するごとに system call が呼ばれて非常に非効率的だったそうで、fflush() の呼び出しを削除しています。

nobu: r46960 2014-07-26 19:06:49 +0900

r46958 の struct iseq_compile_data_storage の型の変更に伴なう追加修正だと思いますが、メモリ確保時にサイズの上限が INT_MAX を越えていないことをチェックするようにしています。

2014-07-25 ruby-trunk-changes r46927 - r46949

[][]ruby-trunk-changes r46927 - r46949

今日は拡張ライブラリ ripper の修正や win32ole の機能追加などがありました。

ko1: r46927 2014-07-24 20:13:19 +0900

GC の理由を表現するフラグを整理して GPR_FLAG_MAJOR_BY_RESCAN と GPR_FLAG_MAJOR_BY_STRESS は削除、かわりに GPR_FLAG_MAJOR_BY_FORCE を追加しています。 GC.stress による GC は GPR_FLAG_MAJOR_BY_FORCE を使うようにしています。GC.latest_gc_info で取得できる情報のキーも変化しています。

ngoto: r46928 2014-07-24 21:14:27 +0900

r46924 の nmake 用の sizes.c の生成ルールの書きかたがビルドエラーになっているとのことで再修正[ruby-dev:48446] [Bug #10089]

suke: r46929 2014-07-24 22:51:22 +0900

拡張ライブラリ win32ole の VT_RECORD サポートの追加。ちらっとしかみてないですが WIN32OLE_RECORD の WIN32OLE_VARIANT との相互の変換機能を追加しているっぽいです。

nobu: r46930 2014-07-25 00:28:01 +0900

parse.y でパーサ用と ripper 用で同じコードがあった部分をコメントの位置を移動して共有するようにしています。

nobu: r46931 2014-07-25 00:28:14 +0900

拡張ライブラリ ripper でメソッド内などの動的な環境での定数の代入が通常の代入だとエラーになってたのが多値の(splat による)代入ではエラーにされていなかったのを修正しています。

svn: r46932 2014-07-25 00:28:16 +0900

version.h の日付更新。

drbrain: r46933 2014-07-25 03:54:13 +0900

doc/keywords.rdoc に予約語の意味を追記しています。

nobu: r46934 2014-07-25 12:21:12 +0900

compile.c の defined_expr() のリファクタリングhttps://github.com/ruby/ruby/pull/681

charliesome: r46935 2014-07-25 13:17:50 +0900

拡張ライブラリ socket の Socket#gethostname でホスト名の最大サイズの定数 HOST_NAME_MAX がない時に 1024 と決め打ちしてたのを、さらに NI_MAXHOST や HOST_NAME_MAX などの定数もチェックするようにしています。 https://github.com/ruby/ruby/pull/683

charliesome: r46936 2014-07-25 13:19:51 +0900

r46935 の ChangeLog エントリに GitHub の pull request への参照を追加しています。 https://github.com/ruby/ruby/pull/683

ko1: r46937 2014-07-25 13:43:09 +0900

gc_mark_stacked_objects() で RGENGC_CHECK_MODE が有効なとき実施するチェックでの rb_bug() のメッセージ修正

ko1: r46938 2014-07-25 13:47:48 +0900

rb_gc_writebarrier_remember_promoted() の RGENGC_CHECK_MODE が有効な時のチェック追加と AGE2_PROMOTION の時の対応。

ko1: r46939 2014-07-25 14:12:06 +0900

RGenGC のための構造体 rb_objspace_t::rgengc のメンバ parent_object_is_old を VALUE 型の parent_object に変更しています。あと gc_marks_body() でこのメンバのクリアのタイミングをすこし変更しています。 詳細は追ってないので理由は不明。

nobu: r46940 2014-07-25 15:53:16 +0900

test/lib/test/unit.rb で並列テスト時に、"." だけ子プロセスから読んだ時にスキップするようにしています。 "unknown command" のエラーになるのを避けるためでしょうか。

nobu: r46941 2014-07-25 15:53:27 +0900

テスト時の Thread のリークチェックで WEBrick の Thread で止めれらないものを無視するためリークチェックのコードで Thread オブジェクトのクラス名をみて特別扱いするようにしています。

nobu: r46942 2014-07-25 15:53:31 +0900

rubygems のテストで閉じ忘れの IO オブジェクトと file descriptor の後始末の追加。

nobu: r46943 2014-07-25 16:55:30 +0900

rubygems のテストでテスト用に起動したサーバの後始末の追加。

nobu: r46944 2014-07-25 16:55:42 +0900

rubygemsGem::RemoteFetcher#request での socket の後始末忘れを修正

nobu: r46945 2014-07-25 16:55:48 +0900

Gem::Util.silent_system で dup した IO オブジェクトの閉じ漏れを修正しています。

nobu: r46946 2014-07-25 16:55:52 +0900

rubygemsGem::Specification#build_extensions でも Gem::SilentUI の閉じ漏れの修正

nobu: r46947 2014-07-25 16:55:55 +0900

rubygemsGem::Util.silent_system でリダイレクトして出力を捨てるためのデバイス名を可能なら(rubygems は古い ruby と一緒に使うことも考慮するので) IO::NULL を利用するようにして、定数 Gem::Util::NULL_DEVICE を追加しています。また、やはり可能なら system のオプション引数リダイレクトを指定するようにしています。

nobu: r46948 2014-07-25 16:55:58 +0900

lib/erb.rb やテストスクリプトでマジックコメントに UTF-8 と大文字を使っていたのを "utf-8" と小文字に変更したり、マジックコメントごと消したりしています。 Emacs では "UTF-8" はだめで "utf-8" が正しいんだそうです。

nobu: r46949 2014-07-25 20:22:49 +0900

test/ripper/test_scanner_events.rb の空っぽだったテストメソッドに内容を追加しています。 Hash の {key: value} 記法や ->() { ... } の lambda 記法の lexer のテスト。