ruby-trunk-changes 2019-09-19

今日は RubyVM::InstructionSequence のバイナリフォーマットへのダンプ時のサイズを小さくするフォーマット変更や Time#inspect で秒以下の精度まで表示するようにする変更、C++ 向け拡張ライブラリのための mkmf.rb の修正などがありました。

[a491159a6e] Kazuhiro NISHIYAMA 2019-09-18 13:45:34 UTC

README.md および README.ja.md に GitHub Actions の Ubuntu/Windows/macOS 環境の状態のバッジを追加しています。

[9bd77d7cf3] Nobuyoshi Nakada 2019-09-18 10:25:58 UTC

c3f03da4944241f46233ce159068f35c5bd5f9b2 の mkmf.rb の C++ 向けモジュール追加時にコメントアウトされた状態で残されてたデバッグ出力を削除しています。

[f9d0778fca] Nobuyoshi Nakada 2019-09-18 13:51:56 UTC

同じく c3f03da4944241f46233ce159068f35c5bd5f9b2 で MakeMakefile::CXX を追加した時に同じく C という変数に MakeMakefile 自身を代入していたのを削除しています。

[15d5de59fb] Nobuyoshi Nakada 2019-09-18 15:02:34 UTC

c3f03da4944241f46233ce159068f35c5bd5f9b2 の MakeMakefile::CXX 追加時に一緒に追加されたテスト用の拡張ライブラリの extconf.rb で MakeMakefile::CXX#try_compile にキーワード引数 lang を渡してたのを削除しています。

[842f600a93] Nobuyoshi Nakada 2019-09-18 14:31:53 UTC

c3f03da4944241f46233ce159068f35c5bd5f9b2 では MakeMakefile::CXX というモジュールを追加していましたが、無名モジュールとして定義して @lang に Hash を格納して、言語の種類をキーとしてその無名モジュールを入れておくように変更しています。

[2b708ab723] git 2019-09-18 15:11:31 UTC

version.h の日付更新

[5177dd8ba0] Jeremy Evans 2019-09-18 18:16:00 UTC

キーワード引数関連のいくつかのテストケースを追加しています。

[a9cdaaada4] Nobuyoshi Nakada 2019-09-18 23:46:49 UTC

ここからテスト用拡張ライブラリのデバッグのためのコードがいくつか連続します。たぶん CI でエラーになってたんだと思います。ビルド時に mkmf.log の内容をダンプさせるようにしています。

[70fd022a2a] Nobuyoshi Nakada 2019-09-19 00:47:11 UTC

テスト用拡張ライブラリビルドのデバッグ続き。test/ruby/test_io.rb のテストでテスト用拡張ライブラリの require に失敗した時に mkmf.log を表示するようにしています。

[a98181eb11] Nobuyoshi Nakada 2019-09-19 01:46:52 UTC

続き。 a9cdaaada4ade22f2f85fbc1f8bd41a8579528b0 と 70fd022a2ae03d237ee9045db9834f253f3d843f は revert して ext/-test-/cxxanyargs/extconf.rb で失敗時に mkmf.log をダンプさせるようにしています。

[2d1e3bd8f1] Nobuyoshi Nakada 2019-09-19 02:25:09 UTC

続き。 ext/-test-/cxxanyargs/extconf.rb の try_compile の例外を捕捉するようにしています。

[69e209a345] Nobuyoshi Nakada 2019-09-19 03:03:58 UTC

続き。 ext/extmk.rb で拡張ライブラリビルドのエラー時に mkmf.log をダンプするようにしています。

[66c644da5e] 卜部昌平 2019-09-19 03:15:53 UTC

method entry の inline cache を C API 経由でも利用できるようにする rb_funcallv_with_cc() で rb_vm_call0() を呼ぶかわりに直接 vm_call0_body() を呼ぶようにしています。 struct rb_calling_info へのポインタ型をインラインで書いてる。こういう記法ができるのか。

[df3fd50717] Nobuyoshi Nakada 2019-09-19 03:23:55 UTC

ext/-test-/cxxanyargs/extconf.rb および ext/extmk.rb のエラー時の mkmf.log ダンプのデバッグコードを削除。

[e2aac6a611] Nobuyoshi Nakada 2019-09-19 03:25:34 UTC

ここまでのデバッグの成果だと思いますが mkmf.rb で C++ 用モジュールに have_devel? メソッドを生やして C 用のメインのモジュールと状態が共有されないようにしています。

[9fb9f2d318] Kazuhiro NISHIYAMA 2019-09-19 03:39:52 UTC

.github/workflows/draft-release.yml というファイルを追加しパッケージ作成を行うようにしています。これは v ではじまるタグが push された時に起動するようです。

[d74fa8e55c] 卜部昌平 2019-09-18 08:18:48 UTC

method entry の call cache が expire していて再度メソッド探索する時に rb_vm_search_method_slowpath() で結局全く同じ method entry がみつかってきた場合は struct rb_call_cache のメンバーである関数ポインタ call は前回のキャッシュされていたものを再利用するようにしています。

[fcfe36b733] 卜部昌平 2019-09-19 01:37:30 UTC

d74fa8e55ce64904f2f99dfef4cbdff94e290672 の method entry キャッシュの扱いの変更でメソッド起動の関数を再利用しない条件として public でないメソッドを receiver 付きで呼んだ時には再検索が必要なので追加しています。

[7202bf9ed8] Takashi Kokubun 2019-09-19 08:19:21 UTC

r63763 以降未使用になっている vm_exec.h の PREFETCH() というマクロ定義を削除しています。

[f84efe4b9d] Takashi Kokubun 2019-09-19 08:30:31 UTC

同じく vm_exec.h の INSN_ENTRY_SIG() というマクロのコメントアウトというか if(0) で実行しないようにされてるデバッグ出力の fprintf() の引数の不要なキャストを除去。

[20baa08d65] NagayamaRyoga 2019-09-19 08:35:32 UTC

RubyVM::InstructionSequence#to_binary でバイナリフォーマットにダンプする ISeq のサイズを小さくなるようにしています。出力はちょっと遅くなりますがサイズがぐっと小さくなるぶん読みこみも速くなるそうです。ぱっと見た感じ圧縮してるというより固定長のレコードで書いてたものを可変長にしてムダな領域を使わないようにフォーマット自体を設計しなおしているみたいです。差分大きいのであんまりちゃんと読んでないですが。 https://github.com/ruby/ruby/pull/2450 [ruby-core:94898] [Feature #16163]

[6045ff64e3] Takashi Kokubun 2019-09-19 09:04:46 UTC

make benchmark で使う benchmark-driver のタグを v0.15.6 に更新しています。

[6180f1fede] Nobuyoshi Nakada 2019-09-19 10:06:18 UTC

mkmf.rb の C++ 用モジュールに link_command メソッドを追加してリンカーコマンドを TRY_LINK 変数から変形して作るようにしています。

[2698f13a1f] Nobuyoshi Nakada 2019-09-19 10:40:44 UTC

numbered param の最大数が parse.y の定数で 100 とされてましたが 9 までに減らされてます。 _0 から _9 までってことですね。(_0 が |a| 相当で _1 が |a,| 相当)。

[5208c431be] "NARUSE, Yui" 2019-09-19 10:49:12 UTC

Time#inspect はこれまで to_s メソッドと同じ実装を使っていましたが、to_s とは違って秒よりも細かい精度の数値まで表示するようにしています。 [ruby-core:93356] [Feature #15958]

[cbf405fec4] "NARUSE, Yui" 2019-09-19 11:45:24 UTC

5208c431bef3240eb251f5da23723b324431a98e の Time#inspect の実装で rb_enc_sprintf() を利用するようにして、Encoding に US-ASCII を指定するようにしています。

[b3ddeac33e] Nobuyoshi Nakada 2019-09-19 11:31:15 UTC

69e209a3450bd6b281dcad1d96a34e9cab184845 の ext/extmk.rb の mkmf.log ダンプのデバッグ用処理を revert しています。

[a3daf8e49a] Nobuyoshi Nakada 2019-09-19 11:07:24 UTC

C++ の拡張ライブラリのビルドのテスト用の拡張ライブラリ ext/-test-/cxxanyargs/ にわざとメソッド用関数の引数の数が一致しないものを使う failure.cpp というソースコードを追加してビルドが失敗することを確認するようにしています。