ruby-trunk-changes 2019-11-10

今日は FreeBSD でのビルドエラーの修正や builtin function 呼び出し用 VM 命令の MJIT のテストの追加などがありました。

[fdfad90522] Hiroshi SHIBATA 2019-11-09 11:14:17 UTC

c5b4d2a2592942766dc2789f46105b91eba7026a の標準添付ライブラリ uri の default gem 化を revert しています。なぜか rubygems の gem か require あたりと干渉して deadlock が起きてしまうようです。 [ruby-core:95768] [Bug #16337]

[79f0e7aafd] Kazuki Tsujimoto 2019-11-09 12:12:29 UTC

cfccd59cb1adfee7b1f402609a4ee32298a26d87 と同様に Struct のテストのテストメソッド名の typo 修正。

[fcf37ca2fe] Nobuyoshi Nakada 2019-11-09 11:02:28 UTC

ff2d99406db4cd8aa0164c86525eedf627acffbe で common.mk 内で .rbinc ファイルの生成に使う組み込みクラス定義の .rb ファイルのパスの指定を $(VPATH) から $(srcs_vpath) に変更していたのを、ただの $(srcdir) に変更しています。 nmake でうまくいかなかった模様。

[f48655d04d] David Rodríguez 2019-11-08 14:03:02 UTC

ツールや拡張ライブラリの extconf.rb やテストなどで一部ファイルの mode に不要な実行可能ビットが立ってるものがあったので落としているようです。

[20bc038ea3] Nobuyoshi Nakada 2019-11-09 12:58:55 UTC

352096ef6047538bfedb974a7c1b1156f5a0e811 で spec/ruby/security/cve_2018_6914_spec.rb に追加したデバッグ表示を pp.rb の PP モジュールを使って整形して表示させるようにしています。ついでに @tmpdir の File.stat の結果も表示するようにしていますが、これはミスだったようです。

[774cfb0655] Nobuyoshi Nakada 2019-11-09 13:15:15 UTC

20bc038ea31ee799103bb89068537ed4e4f699b4 で追加した File.stat の情報は @dir のほうを表示するように修正しています。

[a68205c5c1] Nobuyoshi Nakada 2019-11-09 13:40:14 UTC

spec/ruby/security/cve_2018_6914_spec.rb で環境変数 TMPDIR をおきかえるために作成するディレクトリを 700 の permission を指定して作成するようにしています。

[03fdf02321] Nobuyoshi Nakada 2019-11-09 14:00:32 UTC

a68205c5c19277e9ece8409b1f6af7e226989dff の変更で spec/ruby/security/cve_2018_6914_spec.rb の問題が解消したみたいで、デバッグ出力やリトライするように対応したコードを削除しています。

[e0094df29d] Takashi Kokubun 2019-11-09 21:22:51 UTC

MJIT のテストで JIT 中に fork した場合のテストで sleep を入れている部分が Solaris のテストで不十分らしく 0.5秒から 2秒に伸ばしています。

[ff767dd914] git 2019-11-09 21:23:55 UTC

version.h の日付更新

[faa4f4f23f] Nobuyoshi Nakada 2019-11-10 00:15:12 UTC

FreeBSD 上の make では -j オプションを利用すると compatibility mode なるものが off になって、あるターゲットのアクションに書かれてるコマンドが単一の shell プロセスで実行されるらしく、Makefile 内で exit とか cd とかプロセス全体に影響するビルトインコマンドを利用すると後のコマンドに影響が出てしまうのでこれらを使っているところを別のコマンドに置き換えるか、ルールを分けるなどで対応しています。 [ruby-core:95741] [Bug #16331]

[2c55ba7191] Nobuyoshi Nakada 2019-11-10 01:09:26 UTC

faa4f4f23fbb6b48b158cc38d9b509fd00838976 の続きで exit の代わりに使うようにした NULLCMD というコマンドを示す変数を win32/Makefile.sub で初期化しておくようにしています。 [ruby-core:95741] [Bug #16331]

[11aa07c270] Nobuyoshi Nakada 2019-11-10 01:52:12 UTC

2c55ba7191a69dd4db34572754162308f0a9acdd のさらに再修正で win32/Makefile.sub で NULLCMD として : を指定していたのを type nul というコマンド? に変更しています。 [ruby-core:95741] [Bug #16331]

[0483d01f6b] Takashi Kokubun 2019-11-10 05:16:10 UTC

MJIT のテストで使う assert_eval_with_jit で渡された VM 命令の種類が script 内に含まれてるかチェックして警告を出力する処理を mark_tested_insn というメソッドに切り出しています。これメソッドに切り出したので warn の uplevel: は増やさなくていいのかな。けど元の uplevel のデフォルトが 1 で +2 するとこれで丁度いいような気も。またこれを利用して Array#pack を JIT 化して invokebuiltin 命令のテストを追加していますが、肝心の(?) mark_tested_insn を呼ぶところはコメントアウトされています。 RubyVM::InstructionSequence#to_a がうまく動いてないらしい。

[5c168c7e7f] Takashi Kokubun 2019-11-10 05:40:38 UTC

ということで RubyVM::InstructionSequence#to_a で invokebuiltin 命令に対応するようにしています。

[4570284ce1] Takashi Kokubun 2019-11-10 05:56:38 UTC

MJIT のテストに builtin func 用の命令 opt_invokebuiltin_delegate_leave を使うメソッドを使うテストを追加しています。

ruby-trunk-changes 2019-11-09

今日は昨日追加された組み込みクラス等の実装を builtin 関数呼び出しを利用した ruby 実装にする機構のビルドプロセスの修正や、pack.c の ruby 化、標準添付ライブラリの default gems 化などがありました。

[ff2d99406d] Nobuyoshi Nakada 2019-11-08 13:21:13 UTC

common.mk の生成すべき .rbinc ファイルを知るための BUILTIN_RB_SRCS の指定に $(VPATH) を利用していたのを $(srcs_vpath) のほうを使用するように変更しています。また common-srcs の依存関係に .rbinc ファイル群を含めるようにしています。

[11e21f1982] Nobuyoshi Nakada 2019-11-08 14:00:36 UTC

iseq_builtin_function_name() で __builtin_ の prefix を処理して呼ばれる関数名を取り出す処理で prefix を配列として定義するように変更しています。

[882179a0ec] Yusuke Endoh 2019-11-08 03:58:17 UTC

tool/mk_builtin_loader.rb で組み込みクラスを定義する .rb ファイルからコンパイルした ISeq を辿って __builltin_xxx という名前のメソッド呼び出しを抽出するメソッドを再帰的に呼び出す時の ISeq のノードを辿る時に配列のアクセスをする前に配列が入っていることを確認してからするようにしています。

[a3141e3c76] Yusuke Endoh 2019-11-08 02:54:39 UTC

pack.c の Array#pack や String#unpack の実装を pack.rb に抽出しています。

[248d0008db] Nobuyoshi Nakada 2019-11-08 14:59:22 UTC

a3141e3c76ef057080d5aab22130a326378094e2 で common.mk に load_pack.inc 生成のルールを独立して追加してたのを消して BUILTIN_RB_SRCS に pack.rb のパスを追加しています。これ毎回追加しないといけないの大変だなぁ。

[579aa4dc52] Nobuyoshi Nakada 2019-11-08 15:03:29 UTC

さらに a3141e3c76ef057080d5aab22130a326378094e2 で追加した依存関係の load_pack.inc を pack.rbinc に変更しています。

[cd706c5216] git 2019-11-08 15:04:07 UTC

version.h の日付更新

[88b9a0f7fe] Nobuyoshi Nakada 2019-11-08 15:20:42 UTC

tool/mk_builtin_binary.rb が生成する C コード片に埋め込むバイナリの表記に改行や空白を加えて多少整形しています。

[9deca1a3b9] Yusuke Endoh 2019-11-08 15:22:25 UTC

rubyspec の spec/ruby/security/cve_2018_6914_spec.rb という tmpfile の脆弱性対応のテストで環境変数 TMPDIR に設定してすぐに有効にならない? という現象が macOS であるらしく、少し sleep を入れながら Dir.tmpdir が環境変数 TMPDIR に指定したパスを返すようになるまで何度かリトライするようにしています。

[3b6954f8b9] John Hawthorn 2019-11-07 22:50:05 UTC

finalizer に object_id を渡すのに以前は VALUE の値をそのまま渡せるから良かったのですが b99833baec2e567e38758f4fd017c90c7ce57d75 で object_id に単調増加する整数を使うように変更したので object_id が Bignum になる可能性ができたので、object_id の管理テーブルから削除するのを finalizer の処理後まで遅延する(対象のオブジェクトに finalizer が設定されていた場合)ようにしてこれが解放されるのを防ぐようにしています。コミットログにもありますが、finalizer と GC.compact の相性が元々良くなかったのがこの object_id の実装変更と今回の修正で解消されるようです。

[dfac2e9eb3] Koichi Sasada 2019-11-08 21:55:38 UTC

46acd0075d80c2f886498f089fde1e9d795d50c4 の組み込みクラスの ruby 実装とそこからの builtin 関数呼び出しの実装で miniruby が ruby 実装のスクリプトを読み込むために埋め込むファイルパスが絶対パスになっていたので、ファイル名だけにして C のソース内で __FILE__ を元にして補完して読み込むようにしています。

[b5d8849220] Koichi Sasada 2019-11-08 22:09:01 UTC

が dfac2e9eb3d697e56d91151584f1d3cf9d2c79c9 のフルパス埋め込み回避は revert されています。

[fc1d06b25d] Hiroshi SHIBATA 2019-11-08 05:31:43 UTC

拡張ライブラリ readline もしくは reline を Readline としてロードするための lib/readline.rb を default gem 化するため? lib/readline.gemspec ファイルを追加しています。

[3d731c3694] Hiroshi SHIBATA 2019-11-08 06:39:39 UTC

拡張ライブラリのほうの readline にも gemspec ファイルを追加して default gem 化しています。こちらは gem 名としては readline-ext になっています。

[5f206cebb9] Hiroshi SHIBATA 2019-11-08 06:47:18 UTC

標準添付ライブラリ observer に gemspec ファイルを追加して default gem 化しています。

[9a90a4d953] Hiroshi SHIBATA 2019-11-08 06:47:46 UTC

doc/standard_library.rdoc で readline を default gems のセクションに移動しています。

[2a0ed5691e] Hiroshi SHIBATA 2019-11-08 10:21:47 UTC

標準添付ライブラリ timeout に gemspec ファイルを追加して default gem 化しています。

[8c9438d219] Hiroshi SHIBATA 2019-11-08 11:18:08 UTC

標準添付ライブラリ yaml に gemspec ファイルを追加して default gem 化しています。

[c5b4d2a259] Hiroshi SHIBATA 2019-11-08 11:26:33 UTC

標準添付ライブラリ uri に gemspec ファイルを追加して default gem 化しています。

[21f7cca2c6] Koichi Sasada 2019-11-09 00:59:32 UTC

vm_call_iseq_setup_kwparm_nokwarg() の klocals の末尾に Fixnum の 0 を格納するようにしています。なんかこの直後にこれは不要って書かれてるようなコメントがあるけど(読み間違いでなければ)これは矛盾してないのかな…。

[352887b731] Hiroshi SHIBATA 2019-11-09 02:08:24 UTC

8c9438d219885fb26ca2e7cfc6ca38dd0bcb3db6 で追加した lib/yaml/version.rb は削除して gemspec ファイルに直接バージョン番号を書くようにしています。

[50bc7e7e9f] Kazuhiro NISHIYAMA 2019-11-09 06:20:52 UTC

tool/lib/test/unit の parallel test の結果を受け取るところでエラー時にバックトレースを出して異常終了させるようにしています。

[43ceedecc0] Koichi Sasada 2019-11-09 07:15:17 UTC

builtin 関数の呼び出しを行う vm_invoke_builtin() で引数の位置を VM スタックから得る処理を呼び元の invokebuiltin 命令の実装部分に移動して STACK_ADDR_FROM_TOP() というマクロを利用するようにしています。やってる内容はだいたい同じっぽいですが MJIT 時にも正しく動くようにするためにこのマクロを使う必要があるようです。

[352096ef60] Kazuhiro NISHIYAMA 2019-11-09 07:43:47 UTC

9deca1a3b91271159e164188367f003978737f42 で sleep を入れてリトライすることで対応していた rubyspec の tempfile のテストでデバッグのため環境変数 TMPDIR や Dir.tmpdir の値などを表示するデバッグ出力を追加しています。

[95aed94d2a] Nobuyoshi Nakada 2019-11-09 09:44:06 UTC

prelude.rb を埋め込む template/prelude.c.tmpl で #line directive に埋め込むファイル名を修正しています。

[4dc4b18904] Nobuyoshi Nakada 2019-11-09 10:15:10 UTC

95aed94d2aba5ff93425f26ae6181607996d8ca3 の修正漏れ追加。

[dfaac2b372] Nobuyoshi Nakada 2019-11-09 10:28:45 UTC

組み込みクラスの ruby 実装のスクリプトを miniruby の場合に動的に読み込んでるのをやめて、生成する miniprelude.c でインタプリタ内に埋め込むようにしています。

[e3c8524411] Nobuyoshi Nakada 2019-11-09 10:43:14 UTC

miniruby で組み込みクラスの ruby スクリプトのフルパスが不要になったので rb_load_with_builtin_functions() の引数からファイル名を削っています。

[4dd1caa129] Nobuyoshi Nakada 2019-11-09 11:08:01 UTC

common.mk の依存関係の再生成をしています。

ruby-trunk-changes 2019-11-08

今日はなんといっても組込みクラスのメソッドを ruby で実装してそこから C 実装の関数(builtin function)を呼び出すという機構を導入して、いくつかのクラスが ruby で定義される(具体的な実装は C の関数を呼ぶだけというものがほとんどですが)ようになっています。また object_id がこれまでの slot のアドレス(struct RVALUE 構造体のポインタ)を利用していたのを、単調増加する整数になるようにしたという変更もありました。

[d62abc47c8] Nobuyoshi Nakada 2019-11-07 14:33:45 UTC

ext/ripper/tools/dsl.rb で警告抑制のため二重代入するようにしています。

[b99833baec] John Hawthorn 2019-11-01 00:21:01 UTC

bd2b314a05ae9192b3143e1e678a37c370d8a9ce の object_id に単調増加する数値を使う変更のリトライ。これ入るのか。前回のは単に master の変更に追随できていなかったみたいですね。というわけで内容も読んだところ構造体 rb_objspace_t に next_object_id を追加して cached_object_id() で新たに採番するつど増やしていくようにしています。といっても単に +1 していくのではなくて struct RVALUE のサイズの半分ずつ(なんで半分?)増やすようにしています。 https://github.com/ruby/ruby/pull/2638

[597ec43543] git 2019-11-07 17:31:29 UTC

version.h の日付更新

[dddf5afb79] Aaron Patterson 2019-11-07 20:46:14 UTC

GC 関連カウンターに GC.compact が実行された回数を数える :compact_count を追加しています。

[46acd0075d] Koichi Sasada 2019-11-07 07:58:00 UTC

組み込みメソッドなどを Ruby で実装するための仕組みの導入。 tool/mk_builtin_binary.rb というツールを追加して ruby で書かれたスクリプトを ISeq にコンパイルしてから to_binary でバイナリ表現にしたものを C コード片として ruby インタプリタに含めインタプリタ起動時にロードすることで ruby で書かれた定義を起動時に直接(parse/compile はスキップして)ロードするようにしています(miniruby の時点では起動時に動的に読み込んでる模様)。
また tool/mk_builtin_loader.rb というツールでこの ruby スクリプト内で "__builtin_" という prefix を持つメソッド呼び出しを含むものを抽出してテーブル化した C ソース片も生成して、__builtin_xxx というメソッド呼び出しはある C ソース内(生成された .inc ファイルを include したファイル内)の xxx という関数の呼び出しとして処理されるようにしています。このため rb_vm_t に rb_builtin_function というメンバーを追加して、現コンパイル中の ISeq から呼ばれる builtin function のテーブルを一時的にセットできるようにしています。このため VM 命令にも builtin func 呼び出しのための invokebuiltin と opt_invokebuiltin_delegate、opt_invokebuiltin_delegate_leave といった命令が追加されています。なので __builtin_xxx による C 関数の呼び出しは ruby 本体に埋め込むものでのみ有効で普通の ruby スクリプトから使えるものではありません。 [ruby-core:95344] [Feature #16254]

[e2a45cb984] Koichi Sasada 2019-11-07 09:22:08 UTC

46acd0075d80c2f886498f089fde1e9d795d50c4 で導入された builtin 関数呼び出しと ruby スクリプトの埋め込み機能を利用して TracePoint の実装を trace_point.rb にしてそこから vm_trace.c の関数を呼び出すメソッドを定義するようにしています。なるほどー、こういうふうに使うのか。 Init_vm_trace() からは rb_define_method() は消してかわりに tool/mk_builtin_loader.rb が生成する load_trace_point() を呼び出すようにしています。

[a47d058ebf] Koichi Sasada 2019-11-07 09:29:20 UTC

同じく builtin 関数を利用して RubyVM::AbstractSyntaxTree の実装を ast.rb に移動してそこから各メソッド内で C の関数を __builtin_xxx で呼ぶようにしています。

[4c00b9e8eb] git 2019-11-08 00:09:47 UTC

compile.c の行末の空白除去。

[46b9ca6c54] Koichi Sasada 2019-11-08 00:26:16 UTC

46acd0075d80c2f886498f089fde1e9d795d50c4 で追加した iseq_builtin_function_name() の __builtin_ の prefix のサイズを格納する変数を size_t に修正しています。

[08ff9edb53] Koichi Sasada 2019-11-08 00:30:11 UTC

a47d058ebf6890f4ad81c9c3419e767b4f093815 で追加した ast.rb の改行コードが CR+LF だったみたいなので LF に修正しています。

[dad2abc69f] Koichi Sasada 2019-11-08 01:02:21 UTC

46acd0075d80c2f886498f089fde1e9d795d50c4 の __builtin_func 対応で rb_bug() での異常終了時に利用していた __func__ というマクロは VS 12.0 では利用できないとのことでちゃんとしたメッセージを書くようにしています。

[365557f111] Koichi Sasada 2019-11-08 00:39:28 UTC

IO#read_nonblock と IO#write_nonblock の実装を io.rb に移動して __builtin_ 関数を使って C 実装を呼ぶようにしています。 まずは元々 prelude.rb を使って wrapper が書かれてたメソッドをこの方式に移植していく流れですかね。

[eaa011ffdb] Koichi Sasada 2019-11-08 01:10:37 UTC

.travis.yml の BASERUBY に古い ruby を使うテストで BASERUBy のバージョンを 1.9.3 から 2.2 に変更しています。 tool/mk_builtin_loader.rb などが BASERUBY で実行されるので要求バージョンが上がったようです。

[a1a08ac9aa] 卜部昌平 2019-11-08 01:24:57 UTC

d45a013a1a3bcc860e6f7f303220b3297e2abdbc で追加された vm_cache_check_for_class_serial() に複数の class_serial をどのように更新するかなどの説明をコメントに図解つきで追記しています。

[7661150109] 卜部昌平 2019-11-08 02:11:21 UTC

dad2abc69fdd1af52df353b8604017bd6a5c6a99 で書き直した rb_bug() のメッセージのソースコードのファイル名部分を RUBY_FUNCTION_NAME_STRING というマクロを利用して埋め込むようにしています。

[d4da74ea78] Kazuki Tsujimoto 2019-11-08 02:37:07 UTC

Struct#deconstruct_keys というメソッドを新規追加して Struct のインスタンス(クラス)のインスタンスをパターンマッチに渡して Hash pattern でマッチさせられるようにしています。 [Feature #14912]

[90fc555258] 卜部昌平 2019-11-08 03:07:03 UTC

d45a013a1a3bcc860e6f7f303220b3297e2abdbc の call cache の class_serial の履歴保持化の変更で cache miss した時に最終的に method entry の再探索を含む関数を呼ぶかどうか決める calccall() の戻り値をローカル変数に保持しておくようにリファクタリングしています。

[cfccd59cb1] Kazuki Tsujimoto 2019-11-08 03:44:31 UTC

da2e0721b1ba94e8e786224469fe4bf7550c996a (r54612)で追加されたテストメソッドの typo 修正。

[61cff5c51c] Nobuyoshi Nakada 2019-11-08 04:21:29 UTC

mini_builtin.c に BOM がついていたので削除しています。

[0ad0a8ff58] Nobuyoshi Nakada 2019-11-08 05:26:21 UTC

46acd0075d80c2f886498f089fde1e9d795d50c4 で iseq.h の #include "builtin.h" の位置を vm_core.h の後に移動しています。

[2eb02dfd3b] Koichi Sasada 2019-11-08 06:13:24 UTC

46acd0075d80c2f886498f089fde1e9d795d50c4 で追加された tool/mk_builtin_loader.rb で生成する C コード片で、コンパイラがサポートしていたら #pragma で(たぶん) -Wincompatible-pointer-types を一時的に有効にして builtin 関数の呼び出しで引数の数が一致してなかったらビルドエラーになるようにしています。

[8fa41971c2] Koichi Sasada 2019-11-08 06:27:32 UTC

GC のクラスメソッド定義も gc.rb に移動して builtin 関数呼び出しを利用するようにしています。 prelude.rb にないものも移動しはじめた。

[054cb6d389] Koichi Sasada 2019-11-08 06:29:59 UTC

8fa41971c204555b889c9722586b8baee55a0ca8 で追加し忘れてた gc.rb を追加。

[0b29662606] Koichi Sasada 2019-11-08 06:32:01 UTC

そして gc.rb の改行コードも LF に修正しています。

[83c563cfa4] Koichi Sasada 2019-11-08 07:16:25 UTC

ISeq のバイナリからのロードする ibf_load_setup_cstr() は _cstr という suffix にもかかわらず実際には NUL terminated じゃないバイト列を受け取るので、ibf_load_setup_bytes() に改名して引数も cstr -> bytes と改名しています。iseq.h の prototype 宣言のほうの引数名が cstr のままですね(仮引数名は一致しなくてもエラーにならないと思うけど)。

[6e72b72881] aycabta 2019-11-08 07:17:53 UTC

標準添付ライブラリ reline でブロックのパラメーターが外の変数と同名だと shadowing outer local variable の警告になるので改名して警告抑制しています。

[20971799f2] Nobuyoshi Nakada 2019-11-08 07:24:24 UTC

46acd0075d80c2f886498f089fde1e9d795d50c4 の builtin 関数呼び出しのしくみでは生成される C コードは load_xxx.inc というファイルに出力するようにしていましたが、make のルールの書きかた的に suffix で処理が決まるように命名規則を決めておかないと書きにくいということで xxx.rbinc という拡張子のファイルを作るように変更しています。

[99b1c19be4] Nobuyoshi Nakada 2019-11-08 05:26:21 UTC

io.c でも vm_core.h を builtin.h よりも前に #include するように位置を移動しています。

[2e29b65109] Nobuyoshi Nakada 2019-11-08 07:37:42 UTC

tool/mk_builtin_binary.rb および tool/mk_builtin_loader.rb で生成する .rbinc ファイルの先頭に modeline を追加。また tool/mk_builtin_binary.rb が生成するファイルのほうには自動生成ファイルなので編集しないようにというコメントも追加しています。

[e02b819482] 卜部昌平 2019-11-08 04:56:10 UTC

struct rb_call_cache の共用体 aux のメンバーのひとつ inc_sp は cfunc のメソッドの時に使ってたらしいコメントが書いてましたが、実際には今はもう使われてなかったので削除しています。

[7acf7a4f90] Nobuyoshi Nakada 2019-11-08 09:18:05 UTC

20971799f26c6466f63ab179ce2d3384155b9760 の load_xxx.inc を xxx.rbinc に命名規則を変える変更で win32/Makefile.sub にもルールを追加しています。

ruby-trunk-changes 2019-11-07

今日は標準添付ライブラリの大量 default gems 化やメソッドの call cache の cache miss の影響を緩和するための最適化などがありました。

[f5c7fc495a] Jun Aruga 2019-11-01 15:27:34 UTC

rubyspec の Process.spawn の :pgroup オプションのテストで Travis-CI の arm64 環境でのテストのための skip を追加しています。

[7750edd1e6] git 2019-11-06 17:09:00 UTC

version.h の日付更新

[212f4d49ba] Takashi Kokubun 2019-11-06 17:10:27 UTC

.travis.yml で arm64-linux をエラーが起きても無視するリストに入れてたのを解除しています。

[a1be11eb12] Takashi Kokubun 2019-11-06 17:52:45 UTC

が、212f4d49bac844b3c0fa52f2185b3df30aa62e75 は revert されています。ブランチでは大丈夫だったんだけど master にマージしたらエラーが起きてしまったと。

[40e161a612] Benoit Daloze 2019-11-06 22:10:15 UTC

rubyspec の Process.clock_getres で指定できる clock の種類の定数で CLOCK_PROCESS_CPUTIME_ID、CLOCK_THREAD_CPUTIME_ID、CLOCK_MONOTONIC_RAW を除外するプラットフォームに armv8 を追加しています。

[91135f6d29] Hiroshi SHIBATA 2019-11-06 02:29:51 UTC

標準添付ライブラリ singleton に gemspec ファイルを追加して default gem 化しています。

[ec2603c353] Hiroshi SHIBATA 2019-11-06 02:33:03 UTC

default gem を upstream から同期するためのツール tool/sync_default_gems.rb でデフォルトの方法ですむやつも一応名前を列挙していましたが、case 文の else にまとめてしまうようにしています。ここからたくさん default gems 化するので。

[fb7fe7f16c] Hiroshi SHIBATA 2019-11-06 13:05:24 UTC

doc/maintainers.rdoc の default gem の標準添付ライブラリのところに rubygems.org の gem の URL を追記しています。

[d1630d41ad] Hiroshi SHIBATA 2019-11-06 13:17:03 UTC

標準添付ライブラリ open3 に gemspec ファイルを追加して default gem 化しています。

[bd2b314a05] John Hawthorn 2019-11-01 00:21:01 UTC

object_id を単調増加するように採番するっていう変更らしいですが次で即座に revert されているので詳細はみてません。動機はやっぱり GC.compact の関連かなぁと思うけど object_id の実装にこっそり依存してるところ多そうでちょっと難しいんじゃないかなぁ。

[e58814d150] Aaron Patterson 2019-11-06 23:12:28 UTC

ということで bd2b314a05ae9192b3143e1e678a37c370d8a9ce は revert されています。

[d0d743ad45] Aaron Patterson 2019-11-07 00:29:09 UTC

gc.c の rb_update_st_references() は rb_gc_update_tbl_refs() と全く同じ実装だったので削除しています。

[1e620c67af] Kazuki Tsujimoto 2019-11-07 04:20:11 UTC

parse.y のセミコロンが抜けてたところを修正。

[a396bef8d8] Kazuki Tsujimoto 2019-11-07 05:00:59 UTC

pattern match の文法で variable pattern で代入する変数に同じものを複数使うのはエラーにしています。

[478f6e2b34] Hiroshi SHIBATA 2019-11-06 23:43:10 UTC

tool/sync_default_gems.rb に getoptlong の対応を追加し、汎用的な同期処理で upstream のリポジトリに test/ サブディレクトリがない時にも対応するようにしています。

[6797c3e371] Hiroshi SHIBATA 2019-11-06 23:48:45 UTC

ということで getoptlong に gemspec ファイルを追加して default gem 化しています。

[3b0bd34001] Hiroshi SHIBATA 2019-11-07 02:17:12 UTC

標準添付ライブラリ pstore に gemspec ファイルを追加して default gem 化しています。

[1159dbf305] Hiroshi SHIBATA 2019-11-07 04:21:46 UTC

標準添付ライブラリ delegate に gemspec ファイルを追加して default gem 化しています。

[77c94e0dd8] Hiroshi SHIBATA 2019-11-07 04:53:05 UTC

標準添付ライブラリ benchmark に gemspec ファイルを追加して default gem 化しています。

[eb0b13596d] Hiroshi SHIBATA 2019-11-07 06:24:59 UTC

標準添付ライブラリ net/pop に gemspec ファイルを追加して default gem 化しています。

[223d3c460a] Hiroshi SHIBATA 2019-11-07 06:38:40 UTC

標準添付ライブラリ net/smtp に gemspec ファイルを追加して default gem 化しています。

[fc85bdeb77] Hiroshi SHIBATA 2019-11-07 07:34:03 UTC

標準添付ライブラリ cgi に gemspec ファイルを追加して default gem 化しています。

[c916f9600b] Hiroshi SHIBATA 2019-11-07 07:44:38 UTC

223d3c460a25e47577b6414e3ed141e54864c8dd の net/smtp の default gem 化で追加した version.rb ファイルで Net::SMTP を module として宣言してしまっていたので class に修正しています。

[3c252651e1] Hiroshi SHIBATA 2019-11-07 08:09:22 UTC

同様に version.rb で Net::POP と Net::SMTP の継承元を書いていなかったので Net::Protocol を継承するように修正しています。

[d45a013a1a] 卜部昌平 2019-10-07 03:59:57 UTC

メソッド呼び出し時の method entry の inline cache は cache miss して再探索しても結局 cache と同じ method entry になるというケースが多いらしいので、構造体 rb_call_cache のサイズを拡張して class_serial を配列にして古い class_serial も保持しておいて、メインの class_serial でのキャッシュが miss した時に過去の履歴もチェックしてひっかかったらこの class_serial を復活させて rb_call_cache::aux だけクリアしておくようにしています。 vm_search_method_fastpath() で class serial が古いのに戻ることってあるんだっけ…と思ったけど class serial は Class/Module ごとに最後に更新があった時の通し番号だから、対象の Class/Module が変更ないやつだったら戻ることはあるか。けどその場合 call cache の class_serial が一旦新しくなってるということは method entry も変わってるはずなので、どうやって以前の結果を使い回してるんだろう…。
[追記]method cache が完全に外れてて me が変わる時は過去の履歴の class_serial も含めてリセットされるので、履歴とヒットするということは同じ me が有効である場合だけということで大丈夫そうでした。ただ aux のクリアについてはまだ改良の余地がありそうとのこと。詳しくは https://twitter.com/shyouhei/status/1192633862456672257 からのスレッドを参照。

[26843cbcd0] "NARUSE, Yui" 2019-11-07 09:48:51 UTC

numeric.c の flo_cmp() で右辺(y)が整数だった時に rb_integer_float_cmp() に委譲した結果の整数を変換するのに FIX2INT()+INT2FIX() を使ってたのを FIX2LONG()+LONG2FIX() に変更しています。実際には起きそうにないですが(cmp は -1, 0, 1 のいずれかを返しそう) FIX2INT() は int に収まらなかった時に例外を発生させるため余計な処理が作られる可能性があるので。

[6aa80d5583] "NARUSE, Yui" 2019-11-07 09:53:51 UTC

26843cbcd0b97489f98aa123e700c4e893b1da5e の追加修正で、rb_float_{gt,ge,lt,le}() などでも FIX2INT()+INT2FIX() ではなく FIX2LONG()+LONG2FIX() を使うように変更しています。

ruby-trunk-changes 2019-11-06

今日は ripper の GC.compact 対応や numbered parameter のような識別子をブロックの外に書いた時の仕様変更などがありました。

[07f2062c8f] Mark Abraham 2019-11-05 13:31:52 UTC

configure.ac で文字列リテラルの連結にマクロ定数で定義されてる文字列と通常のリテラルを使ってるところで間にスペースを入れるようにしています。 C++11 では警告されるそうです。

[d47b643428] git 2019-11-05 15:39:55 UTC

version.h の日付更新

[7460c884fb] Aaron Patterson 2019-11-05 00:04:58 UTC

node.h の node_buffer_t の mark 用配列 mark_ary を mark_hash と改名して identity hash を使って GC.compact で移動されないように pin するようにしています。

[aa94245a09] Nobuyoshi Nakada 2019-11-05 23:54:32 UTC

MatchData.allocate メソッドを undef して呼べないようにしています。 MatchData を immutable にしたいのでその布石みたいです。 [ruby-core:95699] [Feature #16294]

[5251d18982] Kazuhiro NISHIYAMA 2019-11-06 00:45:27 UTC

Time#strftime の rdoc 用コメントには %Q という指示子にも対応していると書かれていますが、実際には対応していなかったので削除しています。 Date や DateTime の strftime は対応しているようですね。

[f72dc407f2] Nobuyoshi Nakada 2019-11-06 02:17:09 UTC

aa94245a09887f95bc0cd353b3462108d76d13ed のように allocate メソッドを各クラスで undef しても Class.instance_method で Class#alloc メソッドを UnboundMethod オブジェクトとして取り出してクラスに bind_call してしまうと呼べてしまうので、そのクラスで allocate メソッドが呼べない(respond_to? が偽を返す)とうだったら TypeError を発生させるようにしています。そこまでしますかー。 [ruby-dev:50856] [Bug #16297]

[82e840ad15] Nobuyoshi Nakada 2019-11-06 03:41:55 UTC

ブロック内じゃないところで numbered parameter っぽい識別子が書かれてたら SyntaxError にせずローカル変数かメソッド呼び出しとして解釈されるようにしています。テストは NameError 発生させてますが、これはローカル変数やメソッドがみつからなかったというもので、定義されてたら呼ばれるんですよね、たぶん… [ruby-core:95696] [Bug #16293]

[2fd465540f] Nobuyoshi Nakada 2019-11-06 03:45:11 UTC

同じく parse.y で numbered parameter の処理で ID_INTERNAL を使ってたのを ID_LOCAL を使うように修正しています。たぶん @1, @2 などの記法を使ってた時に使っていたのを _1, _2 に変えた時にローカル変数と同じに直すのを忘れていたのだと思います。どういう影響があったのかはよくわかりませんが……。 [ruby-core:95696] [Bug #16293]

ruby-trunk-changes 2019-11-05

今日は Symbol#to_s の結果を freeze させる変更の revert や rb_method_basic_definition_p() の cache 追加の最適化、Windows 向け coroutine 実装の修正、GC.compact で空きがなくなった page が free list に残らないようにする修正などがありました。

[ba35c14325] Nobuyoshi Nakada 2019-11-04 12:23:11 UTC

スクリプトの行末に if や elsif があった時に警告を出すようにしています。たぶん typo だろうからってことですが golf (はそうでもないかも)とか quine 書いてる人は書くんじゃないかな。

[c303854e13] Yusuke Endoh 2019-11-04 13:27:37 UTC

ba35c14325ebbf1da8f200df83c45ee9937ff8a1 を revert しています。 quine 書くのにじゃまだから…ではなく ripper のテストがこけるようになったためらしい。

[26316cc350] Nobuyoshi Nakada 2019-11-04 12:23:11 UTC

ba35c14325ebbf1da8f200df83c45ee9937ff8a1 のリトライ。行末の if と elsif に警告を出すようにしています。

[e91e3274be] Nobuyoshi Nakada 2019-11-04 14:37:53 UTC

26316cc350109ba71d42f944f3b976985627c042 で追加した looking_at_eol_p() で pushback() を呼んで pcur が更新されないように修正しています。

[4e8336bae8] Nobuyoshi Nakada 2019-11-04 14:58:36 UTC

make test-bundled-gems-run のコマンドを template/Makefile.in と win32/Makefile.sub から common.mk に統合しています。

[bd3463ee35] git 2019-11-04 15:07:22 UTC

version.h の日付更新

[a087e027bf] Nobuyoshi Nakada 2019-11-04 16:32:26 UTC

26316cc350109ba71d42f944f3b976985627c042 で追加した WARN_EOL() の警告除去のため rb_warning() 呼び出しに (void) を付けて戻り値を明示的に捨てるようにしています。

[ec54261b01] Aaron Patterson 2019-10-30 23:28:21 UTC

e1bf29314feee6aaf535917da0178e868e7ff3fa でやろうとしていた GC.compact の結果 free slot がなくなった page が free list に残らないようにする変更のリトライ。前とは heap_eden の要素の初期化やリセットの漏れを修正しているみたいです。

[929a4aa722] Nobuyoshi Nakada 2019-11-04 17:02:14 UTC

拡張ライブラリ zlib の zlib_gzip_ensure() で rb_ensure() に渡す関数の signature をあわせるために wrapper 関数を1つ挟むように修正しています。

[c0c9a00f83] Nobuyoshi Nakada 2019-11-04 15:48:22 UTC

GitHub Actions の設定で bundled gems のテストの実行を別の step にして if: で特定の matrix の時だけ動かすようにしてたのを同一の step にまとめてオプションなどコマンドラインでなく env: で環境変数経由で渡すようにまとめています。

[9d04fa71fc] Nobuyoshi Nakada 2019-11-04 17:14:31 UTC

bundled gems の minitest のバージョンを 5.13.0 に更新しています。

[74bb8fb348] Burdette Lamar 2019-11-04 23:03:01 UTC

ENV の rdoc 用コメントに一般的な説明を追加しています。

[7c3bc0aa13] Nobuyoshi Nakada 2019-11-04 23:07:59 UTC

74bb8fb3480d0b0acaa6ef0bb93cc990cc7bf639 の rdoc 用コメントのセクション間に空行を追加。

[ebbe396d3c] John Hawthorn 2019-11-04 04:51:30 UTC

再帰的メソッド起動を検出するための rb_exec_recursive() や pp で ruby レベルで再実装されている同様の再帰チェックで使われる Hash オブジェクトを Hash#compare_by_identity でキーを同値チェックで判定するようにしたものを使うように変更しています。

[c7632fa80c] Nobuyoshi Nakada 2019-11-04 23:26:10 UTC

4e8336bae853e712eb884b87560621c2da4c4743 で common.mk に統合した test-bundled-gems-run のコマンドラインで tool/test-bundled-gems.rb の引数に $(XRUBY) の値を渡してたのをやめて、tool/test-bundled-gems.rb の内部で環境変数 RUBY か RbConfig.ruby を参照して ruby のファイルパスを得るようにしています。

[30a74aaef0] Kazuhiro NISHIYAMA 2019-11-05 01:09:44 UTC

26316cc350109ba71d42f944f3b976985627c042 で行末の elsif を警告する時のメッセージ内容が elisif になってたので修正。

[8869384367] Nobuyoshi Nakada 2019-11-05 01:28:01 UTC

encoding.c の Init_encodings() の定義位置を移動しています。たぶん Encoding の rdoc 用コメントが Init_Encoding() の前になるようにってことでどっちかというと Init_Encoding() を前に移動したってことですね。 [ruby-core:95674] [Bug #16292]

[1390d56ecf] Nobuyoshi Nakada 2019-11-05 01:28:44 UTC

GitHub Actions の macOSUbuntu でテスト時の make コマンドに $JOB の指定(並列ビルドの -j オプションと思われる)を渡すようにしています。

[6ff1250739] 卜部昌平 2019-10-29 02:37:25 UTC

rb_method_basic_definition_p() の使われかたを調べたところ固定の引数を渡すケースが多いので呼び出し元に cache を持たせた rb_method_basic_definition_p_with_cc() という関数を追加して、rb_method_basic_definition_p() をマクロにして ruby 本体ではこちらが使われるようにして高速化を図っています。

[7c07300491] 卜部昌平 2019-11-05 04:46:08 UTC

6ff1250739c57ce7f234a2148d3f6214da01b7e5 の再修正。 call cache つきのマクロ rb_method_basic_definition_p() や、先に追加されてた rb_funcallv() でも static 変数の初期化子を使った初期化を消しています。static 領域はゼロ初期化されるので明示的な初期化は不要なため。

[853d91a04a] Lars Kanis 2019-11-04 10:00:13 UTC

Windows 版の coroutine 実装の coroutine/win32/Context.h でマシンスタックに積む値を変更しています。SEH のなんからしい。 SEH とは Windows の例外処理機構で…前もなんか調べたような気がしてきたけど、とにかく mingw でのエラー修正とのこと。 https://github.com/ruby/ruby/pull/2279#issuecomment-509508810

[bea322a352] "NARUSE, Yui" 2019-11-05 08:30:54 UTC

Symbol#to_s が返す文字列を freeze しておく 6ffc045a817fbdf04a6945d3c260b55b0fa1fd1e の変更を revert しています。rails 周辺でこの変更の影響で動かなくなるところがあるなど影響が大きそうなので 2.7 では見送るようです。 [ruby-core:94815] [Feature #16150]

[dfb3322d27] Nobuyoshi Nakada 2019-11-05 06:47:25 UTC

spec/mspec のあちこちの after メソッドの引数 state を省略可能にしています。

[19f91f7880] Nobuyoshi Nakada 2019-11-05 06:50:28 UTC

同様に spec/mspec の finish メソッドで引数の数が異なるものを削除しています。たぶんこれも arity をそろえるため。

[fa52a924aa] Nobuyoshi Nakada 2019-11-05 07:14:03 UTC

spec/mspec の -f オプションで指定する formatter の実装のリファクタリングのようです。

[c6a52cffd1] Nobuyoshi Nakada 2019-11-05 08:08:51 UTC

同じく spec/mspec の MultiFormatter のインスタンス変数 @tally と @counter が同じもの(Tally)を格納してたのを @tally には TallyAction というクラスのインスタンスを格納するようにしています。コメントによると -j オプションで並列化できるようにするためらしいです。

[652800cc09] Jeremy Evans 2019-10-18 16:50:07 UTC

標準添付ライブラリ irb で String#taint を呼んでるところを 2.7 以降では呼ばないように分岐を追加しています。

[c4b627e2da] Jeremy Evans 2019-10-18 16:53:59 UTC

同じく標準添付ライブラリ reline でも String#taint を呼んでるところを 2.7 以降では呼ばないようにしています。

[6aacef4948] aycabta 2019-11-05 12:06:29 UTC

c4b627e2daf76e2f8922c62c8e0a6c2a10c8b435 に対応して readline のテストで String#taint の影響を確認する assertion を 2.7 以降で実行しないようにしています。

ruby-trunk-changes 2019-11-04

今日は racc が生成するスクリプトの行末の空白を抑制する修正や、ドキュメントの修正などがありました。

[f8b3d7d159] Nobuyoshi Nakada 2019-11-03 13:53:17 UTC

doc/regexp.rdoc のバックスラッシュによるエスケープの説明にバックスラッシュつきのエスケープシーケンスについても少し追記しています。ほとんどはダブルクオーテーションによる文字列リテラルと同一ですが \s はちょっと意味が異なる(文字列においては \s は空白文字を表すけど正規表現リテラル内では空白やタブを含む空白文字という文字クラスにマッチする)のを追記しています。

[7b2cd548aa] Nobuyoshi Nakada 2019-11-03 14:18:01 UTC

同じく doc/regexp.rdoc のエスケープシーケンスの説明に \R と というのを追加しています。任意の改行っぽいものにマッチするパターンです。

[5a7487bdcd] Nobuyoshi Nakada 2019-11-03 14:20:01 UTC

Regexp のテストに \R にマッチする文字の種類についてのテストを追加しています。 Unicode の改行的な意味を持つ文字のテストも追加しています。

[df62d6522a] Nobuyoshi Nakada 2019-11-04 00:14:18 UTC

process.c の check_exec_redirect_fd() 内でオブジェクトの型をチェックして IO でなかったら to_io メソッドで変換する処理を rb_io_check_io() という専用の関数を呼ぶようにリファクタリングしています。

[046be65c08] git 2019-11-04 00:18:29 UTC

version.h の日付更新

[cbbdb4e5a2] Nobuyoshi Nakada 2019-10-30 15:54:50 UTC

標準添付ライブラリ racc で生成するソースコードの行末の空白ができないように修正しています。

[823f25bb96] Nobuyoshi Nakada 2019-11-04 00:38:34 UTC

tool/sync_default_gems.rb で git fetch コマンドを実行するのにバッククオートを利用していたのを Kernel#system を使うように修正しています。コミットログをみると標準出力を端末に表示させるためみたいですね。

[ffa9298076] Nobuyoshi Nakada 2019-11-04 07:38:36 UTC

lib/rexml/text.rb の REXML::Text#initialize で else のかわりに elsif と書いてしまっていて条件部として else の内容を実行してしまっていたのを修正しています。まあ raise してるので結果は同じなわけですが。

[cf377c5556] Kazuhiro NISHIYAMA 2019-11-04 08:12:18 UTC

Fiber#transfer の rdoc 用コメントの typo 修正。