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 の依存関係の再生成をしています。