ruby-trunk-changes r66831 - r66836

今日は Hash の生成時にメモリ確保するサイズの計算ミスで SEGV する可能性があった不具合修正などがありました。

nobu: r66831 2019-01-15 22:52:38 +0900

Array#- と Array#difference の rdoc 用コメントで引数の配列の要素と一致する要素が元の Array に複数あった時に全て削除されるというのを明確化しています。 https://github.com/ruby/ruby/pull/2068

mame: r66832 2019-01-15 23:19:19 +0900

Hash#[] や Hash リテラルの生成時に呼ばれる rb_hash_bulk_insert_into_st_table() でバッファサイズを計算するのに st_table::num_entries を使ってたのを st_table::entries_bound に修正しています。 num_entries は有効な(生きてる)要素数で、entries_bound は DELETE フラグがついてるけどまだ残ってる要素も含んでいるなど、必要なバッファサイズを計算するには entries_bound を使わないといけなかったとのこと。チケットでは Hash リテラル内に **{...} で Hash オブジェクトを展開したものを入れるとたまに SEGV が起きるという現象だった模様。 [ruby-core:91095] [Bug #15536]

nobu: r66833 2019-01-16 09:48:42 +0900

configure.ac で cflags を更新するのに warnflags があれば追加しようとしていたところで "test -z" で変数に値がセットされてるかチェックするところで $warnflags でなく warnflags と変数名だけ書かれてたので常に追加されてたのを修正しています。 r25285 (2009-10-10) というずっと昔からこうだったようです。実害あるのかな。

svn: r66834 2019-01-16 09:48:46 +0900

version.h の日付更新。

nobu: r66835 2019-01-16 10:35:28 +0900

r65800 の Makefile.in の make reconfig 時に warnflags を明示的に再設定してたのを revert しています。 その直後の r65803 と r65805 で不要になってたとのことで、これらは .travis.yml と configure.ac なので CI のテストでの問題の対策で入れたものだったみたいです。

nobu: r66836 2019-01-16 11:09:48 +0900

configure.ac で rb_cv_warnflags 変数の前後の空白を削るようにしています。

ruby-trunk-changes r66821 - r66830

今日は IO#ungetbyte や String#setbyte の引数に 0-255 の範囲外の整数を渡した時の挙動を変更して受け付けて下位のバイトの値を使うようにする変更などがありました。

naruse: r66821 2019-01-15 12:43:44 +0900

テスト test/ruby/test_regexp.rb で警告抑制のために assertion メソッドの呼び出しの引数にかっこを追加しています。

svn: r66822 2019-01-15 12:43:47 +0900

version.h の日付更新。

k0kubun: r66823 2019-01-15 13:02:53 +0900

AIX での MJIT のコンパイラオプションに -nodefaultlibs -nostdlib を渡してみる r66816 の変更を revert しています。うまくテストが通らなかったようです。

shyouhei: r66824 2019-01-15 15:41:58 +0900

r65802 や r65804 で IO#ungetbyte や String#setbyte の引数に渡された整数が 0-255 の範囲外だと RangeError を発生させるようにしましたが、やっぱり例外は投げずに 256 の mod にしてセットするようにしています。現実のアプリでこの挙動で問題があったらしいです。 元々の挙動も Bignum だと TypeError が発生してたみたいなので、元に戻すというより範囲外の整数を渡した時の仕様を明確化しつつ受付けることにしたという感じですね。 [ruby-core:91023] [Bug #15460]

nobu: r66830 2019-01-15 21:05:46 +0900

r66824 の再修正。整数を 0-255 の範囲に丸めるのに rb_int_modulo() や Integer#% メソッドの呼び出しをしていたのを rb_int_and() または Integer#& メソッドの呼び出しに変更しています。こっちのほうが Bignum で計算量が小さくなる可能性がある?

ruby-trunk-changes r66805 - r66820

今日は MJIT の実行時コンパイルのためのコンパイラオプションの修正や RubyVM::AbstractSyntaxTree::Node#children の不具合修正などがありました。

nobu: r66805 2019-01-13 22:16:55 +0900

common.mk で rdoc コマンド起動時のコマンドや共通したオプションを RDOC および RDOC_GEN_OPTS という変数に定義しておくリファクタリング

nobu: r66806 2019-01-13 22:16:56 +0900

標準添付ライブラリ rdoc でデフォルトで無視するファイルのパターンとして各種エディタのバックアップファイルなどを自動で追加するようにしています。

nobu: r66807 2019-01-13 22:41:36 +0900

r66806 の変更で rdoc のテストが失敗してたので追随してテストも変更しています。

nobu: r66808 2019-01-13 22:49:25 +0900

r66806 に追加して .gemspec 拡張子のファイルも無視するパターンに追加するようにしています。
[ruby-core:91067] [Bug #15531]

k0kubun: r66809 2019-01-14 13:49:28 +0900

r66597 の VM 実装のリファクタリングでちょっと遅くなってたそうでいくつかの関数に inline 修飾子をつけて inline 化させるようにしています。

svn: r66810 2019-01-14 13:49:32 +0900

version.h の日付更新。

k0kubun: r66811 2019-01-14 14:50:13 +0900

MJIT が起動するコンパイラオプションに -lmsvcrt や -lgcc を追加する preprocessor 分岐の条件がネストしていたのを展開してフラットにしています。

k0kubun: r66812 2019-01-14 15:18:53 +0900

r66811 で変更してた MJIT のコンパイラオプションに -lgcc を渡すようにしてるところの再修正。やっぱりネストさせて gcc 利用時には Windows 以外でも常に -lgcc を渡すようにしているようです。 [ruby-core:90986] [Bug #15522]

k0kubun: r66816 2019-01-14 15:45:24 +0900

r66812 の変更によって AIX で MJIT で -nodefaultlibs および -nostdlib というコンパイラオプションを渡しても大丈夫になってるはずなので preprocessor の分岐で AIX では消してたのを消さないようにしています。

k0kubun: r66817 2019-01-14 16:28:34 +0900

r66811 から続く一連の変更の続き。 MJIT の実行時コンパイルコンパイラオプション -nodefaultlibs および -nostdlib を渡すかどうかを GCC_NOSTDLIB_FLAGS というマクロで定義しておいて使いまわすようにしています。 precompiled header の生成時に使うオプションにも追加するようにしています。 Gentoogcc を使った時に MJIT の実行時コンパイルがエラーになる問題の対処だそうです。 [ruby-dev:50746] [Bug #15513]

nobu: r66819 2019-01-14 19:16:54 +0900

RubyVM::AbstractSyntaxTree::Node#children などで式展開つきの文字列リテラルの Node を配列に詰める時にリテラル部分の要素を詰め忘れていたのを修正しています。 [Bug #15532]

nagachika: r66820 2019-01-14 20:04:52 +0900

bugs.ruby-lang.org の Redmine が更新された為に tool/redmine-backporter.rb で revision の確認に使っていたエンドポイントの path が変化したのに追随しています。

ruby-trunk-changes r66798 - r66804

今日はドキュメントの修正とリファクタリングくらいで、特に修正や新機能はありませんでした。

kazu: r66798 2019-01-12 21:39:41 +0900

r66778 の TRUE/FALSE → true/false への変更に追随して mjit_worker.c のコメントに書かれてた TRUE も true に変更しています。

nobu: r66801 2019-01-13 12:27:16 +0900

標準添付ライブラリ irb の Binding#irb の rdoc 用コメントのマークアップを修正。 https://github.com/ruby/ruby/pull/2067

svn: r66802 2019-01-13 12:27:18 +0900

version.h の日付更新。

nobu: r66803 2019-01-13 12:31:01 +0900

Time オブジェクトのタイムゾーンをセットする vtm_add_offset() で vtm->utc_offset を減算してたのをやめています。 vtm_add_offset() の呼び元で utc_offset は上書きされてるので無意味だから。

nobu: r66804 2019-01-13 13:36:45 +0900

同じく vtm_add_offset() に sign という引数を追加して呼び元で offset の符号反転していたのを sign の指定を渡すようにしています。

ruby-trunk-changes r66794 - r66797

今日は Kernel#Integer(), Kernel#Rational(), Kernel#Complex() などのメソッドに exception: false を渡しても例外が発生するケースがあったのを修正しています。

nobu: r66794 2019-01-12 13:53:09 +0900

rubyspec の spec/mspec/lib/mspec/helpers/ruby_exe.rb に RbConfig::CONFIG の "exeext" というキーの参照があったけど、こんなキーは過去にもなかったからとのことで消しています。

svn: r66795 2019-01-12 13:53:13 +0900

version.h の日付更新。

nobu: r66796 2019-01-12 14:02:58 +0900

Kernel#Complex() および Kernel#Rational() で exception: false を指定しても引数に nil を渡すと TypeError が発生していたので nil を返すように修正しています。 [ruby-core:91021] [Bug #15525]

nobu: r66797 2019-01-12 18:36:52 +0900

r66796 の追加修正。 Kernel#Integer() で exception: false が指定された時に Float::INFINITY などを渡した時も例外が発生しないようにしています。 [ruby-core:91021] [Bug #15525]

ruby-trunk-changes r66778 - r66793

今日は tool/make-snapshot が trunk に対応できなくなっていた不具合の修正や C99 に対応するようになったので一部のソースで bool という型や true/false などの定数を使うようにする変更などがありました。

k0kubun: r66778 2019-01-10 23:31:18 +0900

C99 が許されるようになったので r66775 の MJIT 関係のソースの bool 型と TRUE/FALSE の true/false への変更のやりなおし。いくつか typo 修正があるようです。

nobu: r66779 2019-01-10 23:44:11 +0900

configure で --with-jemalloc が指定されても jemalloc/jemalloc.h ヘッダがなかったら無効にするようにしています。 [ruby-core:90964] [Bug #15520]

k0kubun: r66781 2019-01-10 23:55:24 +0900

[Bug #15522] で報告されている MJIT のテストの出力が ``` を使っていて Redmine に貼られるとその記法と衝突して code block が打ち消されてしまうので、""" を使うように書き換えています。

k0kubun: r66782 2019-01-11 00:00:40 +0900

r66768 のスタイルと変数宣言の位置の変更は C99 が許容されるようになって変数宣言の位置の修正がいらなくなったので revert しています。 [ruby-core:90089] [Misc #15347]

svn: r66783 2019-01-11 00:00:42 +0900

version.h の日付更新。

k0kubun: r66786 2019-01-11 00:02:35 +0900

addr2line.c で -Wpedantic というオプションを無視させるような #pragma が使われてましたが .travis.yml で -ansi を -std=c99 に変更して不要になったということで消しています。

k0kubun: r66787 2019-01-11 00:42:44 +0900

逆に addr2line.c に -Wgnu-empty-initializer を無視させる pragma を追加しています。また構造体のコメントを /* */ から // による行コメントに置き換えています。

tenderlove: r66788 2019-01-11 02:28:13 +0900

doc/syntax/refinements.rdoc に send や respond_to? には Refinements はきかないと書かれてましたが、これはもうきくようになってしまったので消して、Kernel#method や Object#methods には効かないと変更されていす。
ふーむ、つまり次のターゲットは……?

nobu: r66789 2019-01-11 10:18:59 +0900

ruby 自体のテスト用のライブラリ EnvUtil に子プロセスの後始末をするメソッド terminate を invoke_ruby から切り出して定義して、Process.wait と Timeout を組み合わせたテストで子プロセスが残る場合があるところの後始末に使うようにしています。

kazu: r66790 2019-01-11 13:58:33 +0900

r66599 あたりで RUBY_VERSION マクロの定義位置とかを変更した影響か(?) trunk が make-snapshot で失敗していたそうなので、その対応をしているようです。あの変更よく動機がわからなかったんだよな。

nobu: r66791 2019-01-11 16:50:23 +0900

r66772 のブロックなしの proc メソッドなどで警告を出す変更で rubyspec のテストのバージョンによる分岐を修正しています。

nobu: r66792 2019-01-11 17:44:41 +0900

r66772 の rubyspec の修正の r66791 のさらに再修正。 ruby のバージョンが 2.7 の時のみ警告を match させる正規表現を代入してそうでない時は空文字列にしてましたが、なぜかこの空文字列を変数にセットしておくのをやめています。なんでだろ?

nobu: r66793 2019-01-11 18:36:49 +0900

r66772, r66791, r66792 のさらに続きで、やっぱりブロックなしの proc 呼び出しの警告のチェックは削っています。うーんなんだったんだろう。

ruby-trunk-changes r66760 - r66776

今日は Module#instance_methods の不具合修正や StringIO#ungetbyte の挙動変更、ブロックを渡さない proc メソッド呼び出しの警告追加や、コンパイラの C99 の規格を利用するようにする変更などがありました。

kazu: r66760 2019-01-09 21:55:20 +0900

r65802 で IO#ungetbyte が 256以上の数値を弾くようにしたのに合わせて StringIO#ungetbyte も同じ挙動するようにしています。 [Bug #14359]

svn: r66761 2019-01-09 21:55:21 +0900

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

nobu: r66762 2019-01-09 22:58:49 +0900

関数定義や for 文のブロックのかっこの位置などスタイルの修正。

nobu: r66763 2019-01-09 22:58:51 +0900

Time.new で offset の指定が不正な時の例外メッセージに受付けるようになった文字列のぶんを追加する追随。

nobu: r66764 2019-01-09 23:04:21 +0900

Module#instance_method に false を渡した時にそのクラスに特異クラス(singleton class)が作られていると結果が空になってしまうことがある不具合修正。引数に false 指定する継承元の親クラスや include している Module のメソッドをみないのですが、singleton class がはさまってるとそこで探索を打ち切ってしまうので本体のメソッドが追加されていませんでした。てことはたぶん Module#prepend した時もだったのかな。 [ruby-core:90872] [Bug #15501]

ko1: r66765 2019-01-10 04:11:32 +0900

hash.c に hash_iter_lev_inc() と hash_iter_lev_dec() という static 関数を追加して、かわりに struct RHash::iter_lev の方に const をつけて関数経由でないと変更しないようにしています。

svn: r66766 2019-01-10 04:11:35 +0900

version.h の日付更新。

tenderlove: r66767 2019-01-10 08:04:00 +0900

2.6 から追加した Array, Hash リテラル用の VM 命令 duparray, duphash の実装に DTrace のオブジェクト生成のフックを追加しています。 [ruby-core:90418] [Bug #15399]

nobu: r66768 2019-01-10 09:36:28 +0900

addr2line.c のスタイル修正と、for 文の条件部で変数宣言していたのが古いコンパイラで対応できないので関数先頭で宣言するように修正しています。 [ruby-core:90949] [Bug #15519]

nobu: r66769 2019-01-10 15:01:32 +0900

2.6 から追加された Proc オブジェクトを合成する Proc#<< や Proc#>> で引数が Proc, Method やその他 call メソッドを呼べるオブジェクトであることを確認するようにしています。 [ruby-core:90591] [Bug #15428]

k0kubun: r66770 2019-01-10 16:59:18 +0900

.travis.yml の build matrix の pedanticism というコンパイラの互換性や警告を厳しくチェックするやつで C99 の機能を許容するようにオプションの -ansi を -std=c99 に変更したり、一部 -Werror= を消したりしています。

k0kubun: r66771 2019-01-10 17:04:35 +0900

r66605 で C99 を利用するように configure.ac で AC_PROG_CC を AC_PROG_CC99 に変更したので、追随して -WWerror=declaration-after-statement と -Werror=restrict を追加しないようにしています。 CRuby のソースコードで利用する C の規格を C99 に引き上げ(?)ようという提案があったんですね。 https://github.com/ruby/ruby/pull/2064 [ruby-core:90089] [Misc #15347]

nobu: r66772 2019-01-10 17:19:14 +0900

Kernel#proc などのメソッドは通常ブロックを渡して、そのブロックを Proc オブジェクト化するのですが、実はブロックを渡さずに呼ぶこともできて、その場合は proc が呼ばれたメソッドへ渡されたブロックをそのまま渡すという仕様があります。
つまり

def m
  proc
end

def m(&b)
  proc(&b)
end

とほぼ同じ意味になります。
なんですが、これは意図しないミスを遮蔽した時にわかりにくいので? 警告を出すようにして、標準添付ライブラリでこの挙動を利用していたところを書き直しています。
確かにこの仕様で特に嬉しいってことはあんまりないですよね今は。

k0kubun: r66773 2019-01-10 17:22:23 +0900

NEWS ファイルに C99 のコンパイラをサポート対象にすることと、具体的に採用する記法などを記載したドキュメントへのリンクを追記しています。enum の tailing comma とか変数宣言の位置の緩和とか嬉しいですねー。これまではなにか変更した後にその点だけ修正したりしてたので。 https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/C99 [ruby-core:90089] [Misc #15347]

kazu: r66774 2019-01-10 21:41:06 +0900

r66769 で変更した Proc#<< のテストで、合成時点で例外が発生するようになったので通らなくなった call メソッドの呼び出しは不要なので消しています。

k0kubun: r66775 2019-01-10 22:21:58 +0900

MJIT 関係のソースで定数マクロ TRUE/FALSE をそれぞれ true/false に変更して、bool 型を利用するようにしています。

k0kubun: r66776 2019-01-10 22:29:29 +0900

r66775 の CI でエラーになったそうなので一旦 revert しています。