ruby-trunk-changes r67513 - r67518

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

svn: r67513 2019-04-11 19:36:38 +0900

version.h の日付更新。

nagachika: r67517 2019-04-12 23:32:31 +0900

Enumerable#find, #detect の rdoc 用コメントに省略可能な引数 ifnone が指定されてた時のサンプルも追記しています。 https://github.com/ruby/ruby/pull/2110

svn: r67518 2019-04-12 23:32:35 +0900

version.h の日付更新。

ruby-trunk-changes r67502 - r67512

今日は昨日の revert に巻きこまれた変更の再適用と Azure Pipelines 向けの設定修正などがありました。

nobu: r67502 2019-04-10 21:43:31 +0900

r67499 で巻き込み revert された r67491 を再適用。

nobu: r67503 2019-04-10 21:43:32 +0900

r67499 で巻き込み revert された r67492 を再適用。

nobu: r67504 2019-04-10 21:43:33 +0900

r67499 で巻き込み revert された r67493 のうち一部を再適用。このスタイル修正は GC.compact の変更のぶんだけじゃなかったのか。

nobu: r67505 2019-04-10 21:43:34 +0900

r67499 で巻き込み revert された r67496 を再適用。

mame: r67506 2019-04-10 21:57:39 +0900

r67499 で巻き込み revert された r67497 を再適用。 [ruby-core:92231] [Bug #15760]

k0kubun: r67507 2019-04-10 23:34:53 +0900

azure-pipelines.yml の Ubuntu 環境での前処理から apt update コマンドの実施を削除しています。 この環境で更新可能な source がなくて(?) エラーになるみたいです。 https://dev.azure.com/rubylang/ruby/_build/results?buildId=363

k0kubun: r67508 2019-04-10 23:42:18 +0900

r67507 の続きで azure-pipelines.yml の Ubuntu 環境で /etc/apt/sources.list を表示してみるようにしています。

k0kubun: r67509 2019-04-10 23:47:18 +0900

r67507, r67508 の続きで Azure Pipelines の Ubuntu 環境で sed を使って /etc/apt/sources.list の deb-src の指定のコメントアウトを外して有効にするようにしています。そして apt-get update を復活させています。

k0kubun: r67510 2019-04-10 23:56:17 +0900

azure-pipelines.yml で displayName: を使ってステップに名前をつけています。また不要になった /etc/apt/sources.list を表示するコマンドを削除。

nobu: r67511 2019-04-11 19:36:36 +0900

ISeq をコンパイルする時に rescue 節や ensure 節の例外をセットする特殊変数 $! の ID のテーブルは常に同じなので都度 ALLOC_N() で確保するのをやめてグローバル変数を利用するようにしています。 https://github.com/ruby/ruby/pull/2115

nobu: r67512 2019-04-11 19:36:37 +0900

r67511 の追加修正で変数 ID のテーブルサイズを 1 に決め打ちにしてたのを、グローバル変数のテーブル(配列)の要素数を numberof() マクロで取得して使うようにしています。結果は同じですが。

ruby-trunk-changes r67477 - r67501

今日はなんとオブジェクトの slot を compaction する GC.compact メソッドの追加、があったのですが CI のエラーで revert されたので最終的に NEWS ファイルの更新のみが残ったという感じです。

nobu: r67477 2019-04-09 22:08:29 +0900

NEWS ファイルに行頭にチケット参照の開き bracket がくると rdoc のメタキャラクタになってしまうので改行の位置を調整しています。

nobu: r67478 2019-04-09 22:08:30 +0900

同じく NEWS ファイルでコマンドラインオプションの "--" がメタキャラクタとして解釈されるのを防ぐため ++ で囲んでいます。

tenderlove: r67479 2019-04-10 05:32:04 +0900

GC.compact というメソッドを追加して、compaction GC を実行できるようにしています。アルゴリズムの詳細はチケットのほうに ASCII Art による図解と疑似コード付きで説明されているのでそちらを参照。全ての struct RVALUE が動かせるわけではなくて、新しく追加した mark_entry_no_pin() で(のみ) mark したものだけ移動できるようにしているようです。これで heap 減らせるのかなぁ。 [ruby-core:91634] [Feature #15626]

svn: r67480 2019-04-10 05:32:22 +0900

r67479 の新規追加ファイルの svn property 設定。

svn: r67481 2019-04-10 05:32:22 +0900

version.h の日付更新。

tenderlove: r67482 2019-04-10 05:47:36 +0900

r67479 で追加した GC.compact のテストで compaction がおきやすいように生成する一時的な Object インスタンスを2倍生成するようにしています。

tenderlove: r67483 2019-04-10 06:13:32 +0900

r67479 の修正。 Compaction のために拡張ライブラリから参照するクラスは rb_gc_register_mark_object() で明示的に登録しておかないといけなくなったので、拡張ライブラリ json で 追加が漏れていた例外クラスを登録するようにしています。拡張ライブラリは普通の rb_gc_mark() が pin するようになるから大丈夫ってことだったけど、これ拡張ライブラリの互換性が問題になるということなのでは。

tenderlove: r67484 2019-04-10 06:40:07 +0900

GC.compact の導入で weakref のテストがこけたそうなのでデバッグのために assert_nothing_raised をコメントアウトして例外を発生させるようにしています。

tenderlove: r67485 2019-04-10 08:03:40 +0900

ObjectSpace::WeakMap からの参照を pin するようにしています。そして r67484 の weakref のテストのデバッグのための変更を revert しています。なるほど WeakMap からの参照は mark はしないけど pin する必要はあるわけか。

tenderlove: r67486 2019-04-10 08:23:33 +0900

r67479 で追加した GC.compact のテストで1つもオブジェクトを移動できなくてもエラーにせず skip するようにしています。まあ、保守的GCなのでありえるから、ということかな。

tenderlove: r67487 2019-04-10 08:23:39 +0900

構造体 struct RMoved の宣言を include/ruby/ruby.h から internal.h に移動して外部に見せないようにしています。

shugo: r67488 2019-04-10 08:35:02 +0900

標準添付ライブラリ net/imapTLS の SNI が有効になるようにしています。GMailimap を使うのに必要だったとのこと。 https://github.com/ruby/ruby/pull/2077 [ruby-core:91466] [Feature #15594]

tenderlove: r67489 2019-04-10 08:48:17 +0900

compile.c の iseq_add_mark_object_compile_time() と freeze_literal() で ISeq の mark_ary に要素を追加する時に RGenGC の write barrier を追加しています。

nobu: r67490 2019-04-10 10:18:01 +0900

r67489 の変更で rb_gc_writebarrier() の引数の型の違いで警告が出てたので明示的なキャストを追加。

nobu: r67491 2019-04-10 10:34:44 +0900

ヘッダファイル timev.h の struct tvm の宣言の前にコメントアウトした状態で struct tvm の空の宣言を追加しています。"for TAGS" とコミットログにあるので構造体宣言がマクロ PACKED_STRUCT_UNALIGNED() の中で行なわれてるので ctags でインデックスが作られないのでその対策ということかな?

nobu: r67492 2019-04-10 14:12:33 +0900

parse.y で CompileError の例外メッセージで "p->xxx" みたいにソースコード上の変数名を使って書いてたところをメンバー名だけにしています。コミットログによるとリファクタリング時にうっかりメッセージ内も置換してしまってたようです。

nobu: r67493 2019-04-10 15:44:41 +0900

r67479 の GC.compact 追加時の変更部分のスタイルの修正。

nobu: r67494 2019-04-10 15:44:42 +0900

同じく r67479 の変更で rb_add_method_iseq で構造体 rb_method_iseq_t と同じレイアウトの構造体を関数内で定義して rb_add_method() に引数として渡してたのを普通に rb_method_iseq_t の変数を定義して使うように修正しています。なんでこんなことしてたんだろ。

nobu: r67495 2019-04-10 15:44:43 +0900

id_table.c の rb_id_table_foreach_with_replace() で replace ポインタで渡された関数への第1引数に Qundef を渡してたところを NULL に修正しています。型は VALUE ではなくて ID* で Qundef != NULL なので。

nobu: r67496 2019-04-10 16:18:25 +0900

rescue 節で例外を暗黙のうちに保持する特殊変数 $! の ID を defs/id.def に追加して組込みで定義しておくようにしています。

mame: r67497 2019-04-10 17:03:47 +0900

拡張ライブラリ openssl の OpenSSL::BN.new の第1引数に nil を渡すと SEGV してたので StringValuePtr() の呼び出しを if 文の条件部からその前に出すようにしています。 StringValuePtr() はマクロで内部で str 自身を上書きすることがあるから…でも Qnil の時には例外になりますよねぇ。関数の評価の順序のためかな(コンパイラによって違いそう)。 [ruby-core:92231] [Bug #15760]

svn: r67498 2019-04-10 17:03:48 +0900

r67497 のインデントのタブを空白に展開。

kazu: r67499 2019-04-10 18:15:21 +0900

r67479 の GC.compact で CI が失敗しているため r67479 から r67496 までのコミットを全部 revert しています。 けど実際には openssl の変更も revert されちゃってるので r67497 も revert されてそう。

svn: r67500 2019-04-10 18:16:00 +0900

であらためてインデントのタブを空白に展開。

svn: r67501 2019-04-10 18:16:01 +0900

svn さんによる version.h の日付更新も revert されたので再度更新されています。

ruby-trunk-changes r67471 - r67476

今日は拡張ライブラリ date の JIS X 0301 関係のメソッドの新年号対応や、Module#const_get の不具合修正(?)などがありました。

nobu: r67471 2019-04-08 22:47:36 +0900

Module#const_get のテストで参照するための文字列を作るのにクラスの to_s で文字列化して使ってたところを明示的に文字列を指定するようにしています。クラスの to_s してたのでトップレベルのクラス名がたぶん重複していたけど、const_get は正規化して取得できてしまうので(たとえば Object.const_get("Math::Math::Math") で Math が取れる)、エラーにはなってなかったようです。

nobu: r67472 2019-04-08 22:47:37 +0900

そして Module#const_get や Module#const_defined? で、ネストした名前でトップレベルの定数が見えてしまわないように修正しています。うーん、これは不具合なのか。 [ruby-core:92202] [Bug #15758]

nobu: r67473 2019-04-09 10:27:35 +0900

拡張ライブラリ date の Date.jisx0301 と DateTime.jisx0301 の rdoc 用コメントに年号が省略された時のデフォルトが平成であることを追記しています。

nobu: r67474 2019-04-09 10:27:36 +0900

r67397 のあたりで一度入ったけど JIS X 0301 に正式に入ってないからと revert されていた拡張ライブラリ date の Date#jisx0301 や Date.jisx0301 での新年号対応を追加しています。 正式な更新待ってたら遅くなるし他のライブラリなどで略記として R が採用されているのでということで対応を入れてます。 [ruby-core:92071] [Feature #15742]
チケットには "As Japanese government has claimed that only one month is enough for the transition, the new standard will be issued in this month at latest :)" という皮肉なコメントがありますが、Unicode も正式なリリースは 5/1 には間に合わなかったしなぁ。

svn: r67475 2019-04-09 10:27:37 +0900

version.h の日付更新。

duerst: r67476 2019-04-09 18:41:00 +0900

NEWS ファイルに Unicode のバージョン 12.1.0 への更新について追記しています。

ruby-trunk-changes r67466 - r67470

今日は主に LLP64環境で hash メソッドの返す整数が Bignum の範囲になってしまうと SEGV が発生することがある不具合の修正がありました。
これ本来は hash の整数が範囲を超えても大丈夫になればいいんですけど、それが影響範囲が大きくて難しい(?)ため hash メソッドの実装で Fixnum の範囲に収まるように各個撃破しないといけないというので、新規に追加されたクラスの実装とかで壊れてたのを修正しています。

nobu: r67466 2019-04-08 12:26:27 +0900

Enumerator::ArithmeticSequence#hash の戻り値の変換を LONG2FIX() でやってたのを SF2FIX() を使うように修正。 mswin などの LLP64 環境で hash の値が Fixnum の範囲を超えてしまって SEGV を誘発することがある不具合の修正です。 [ruby-core:92190] [Bug #15755]

nobu: r67467 2019-04-08 12:26:28 +0900

同様に Method#hash メソッドでも戻り値が Fixnum の範囲に収まってなかったので ST2FIX() を使うように修正しています。 [ruby-core:92191] [Bug #15756]

nobu: r67468 2019-04-08 12:26:29 +0900

Range#hash の実装でも同様に hash の値が Fixnum に収まるように修正しています。 [ruby-core:92194] [Bug #15757]

svn: r67469 2019-04-08 12:26:29 +0900

version.h の日付更新。

nobu: r67470 2019-04-08 14:06:43 +0900

同様に Struct#hash の実装でも結果が Fixnum に収まるように ST2FIX() を使うように修正しています。メールも検索しましたがこれだけはチケットにはなってないようですね。

ruby-trunk-changes r67459 - r67465

今日は一時的なメモリ確保に使う関数の潜在的メモリリークの修正などがありました。

nobu: r67459 2019-04-06 22:21:18 +0900

GC 可能な一時文字列バッファを確保するための関数 rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString() で、ruby_xmalloc() でバッファ確保してから rb_imemo_tmpbuf_auto_free_pointer() を呼んでいたので、ここで大域脱出が発生するとメモリリークする可能性があったので、先に rb_imemo_tmpbuf_auto_free_pointer() で T_IMEMO 型オブジェクトを確保しておいてからメモリ領域を確保してポインタをセットするように修正しています。

k0kubun: r67460 2019-04-06 23:42:02 +0900

VM の debug counters に mjit_exec() 内の処理の出入りのカウンタを追加しています。

k0kubun: r67461 2019-04-07 01:03:11 +0900

tool/ruby_vm/views/_mjit_compile_send.erb のコメントの typo 修正。

svn: r67462 2019-04-07 01:03:14 +0900

version.h の日付更新。

k0kubun: r67463 2019-04-07 17:18:09 +0900

標準添付ライブラリ rinda のテストでタイムアウトエラーが発生した時のデバッグ用のメッセージ出力を追加。バックトレースを出してどこで止まってるのか突き止めるようにしています。

nobu: r67464 2019-04-07 20:14:06 +0900

obj_memsize_of() で T_RATIONAL と T_COMPLEX の時に T_IMEMO の処理に fallthrough しちゃってたので break 文を追加しています。2年くらい前に T_IMEMO 型の時に処理が追加された時からこうだったみたいですね。 imemo_type_p() で偽になるから実害なかったのかな。

eregon: r67465 2019-04-07 20:26:27 +0900

doc/signals.rdoc のシグナルを処理する Thread についての表記をちょっと修正しています。

ruby-trunk-changes r67447 - r67458

今日は tool/downloader.rb の mswin 環境へ対応する修正などがありました。

duerst: r67447 2019-04-05 21:36:29 +0900

r67445 の続きで tool/downloader.rb のデバッグのため起動時の引数などを表示するメッセージ出力を追加しています。

nobu: r67448 2019-04-05 21:44:04 +0900

tool/downloader.rb で正規表現にファイル名を埋め込む時に Regexp.quote でエスケープしておくように修正しています。

nobu: r67449 2019-04-05 23:44:13 +0900

appveyor.yml で make up 時に Unicode ファイルを更新するようにするため UNICODE_FILES 変数の指定を消しています。

nobu: r67450 2019-04-05 23:44:15 +0900

r67448 の再修正。正規表現リテラルの前に % をつけてしまってたので文字列リテラルになってしまってました。

duerst: r67451 2019-04-06 08:16:00 +0900

r67445, r67446, r67447 の tool/downloader.rb のデバッグメッセージ追加を revert しています。 r67449 で mswin でのエラーは対処できたようです。

svn: r67452 2019-04-06 08:16:03 +0900

version.h の日付更新。

duerst: r67453 2019-04-06 08:52:15 +0900

r67441 の Unicode 12.1.0 beta の取り込みで不要になった enc/unicode/12.0.0 ディレクトリ内のファイルを削除しています。 [ruby-core:89260] [Feature #15195]

nobu: r67454 2019-04-06 09:08:04 +0900

r67449 の appveyor.yml の変更を revert して、UNICODE_FILES=. が指定されてたら tool/downloader.rb で再ダウンロードせず既存のファイルを使うようにしています。

k0kubun: r67455 2019-04-06 10:25:15 +0900

r67454 の make up 時の UNICODE_FILES=. の指定を msys2 向けのビルド時にも設定するようにしています。これがないと tool/downloader.rb の実行でエラーになるようです。

k0kubun: r67456 2019-04-06 11:35:37 +0900

r67442 でうっかり(?)消されてたテストを復活させています。

k0kubun: r67457 2019-04-06 11:42:30 +0900

MJIT 関連のテストの警告除去。

k0kubun: r67458 2019-04-06 11:53:32 +0900

MJIT のテストで VM 命令ごとにそれを含む compile unit を通すテストで r67442 で追加(復活)した definemethod と definesmethod も追加しています。