ruby-trunk-changes 2019-06-19

今日は racc の更新、IA64 のサポート削除のほか VM スタックをマシンスタック上に確保するようにする変更などがありました。

[235e72f17e] aycabta 2019-06-18 11:57:58 UTC

標準添付ライブラリ reline に Reline.auto_indent_proc というコールバック登録機能を追加して irb でこれを使って複数行編集時の auto indent 機能を追加しています。 新しい irb 使ってるとやっぱり auto indent 欲しいなって思ってたのでうれしいですね。

[af800b8ca2] Takashi Kokubun 2019-06-18 12:22:06 UTC

Azure Pipelines での macOS 上でのテストの設定に continueOnError: true を追加してエラーを無視させるようにしています。

[32e65e9e5a] aycabta 2019-06-18 12:55:40 UTC

標準添付ライブラリ reline で環境変数 RELINE_STDERR_TTY が設定されていた時のデバッグメッセージに pid を出力するように追加しています。

[84903b31c8] aycabta 2019-06-18 12:56:41 UTC

235e72f17e2c02074721150035ffc30e339c307f の reline の auto indent 対応で空行? の入力でエラーになってたので修正しています。

[85ff2d74a2] aycabta 2019-06-18 23:28:00 UTC

irb に元々あった(?) auto indent 対応のためのプロンプトの調整が reline の auto_indent が有効な時は抑制するようにしています。

[c972932986] git 2019-06-18 23:29:23 UTC

version.h の日付更新

[d009e321a0] aycabta 2019-06-19 00:19:41 UTC

irb に元々あった IRB.conf[:AUTO_INDENT] の設定を参照して reline の auto indent 機能を有効にするようにしています。

[28678997e4] Nobuyoshi Nakada 2019-06-19 00:44:26 UTC

String#initialize の実装で struct RVALUE の中に埋め込みで文字列を持ってるものをヒープのバッファに移動するケースでバッファの内容のコピーがされていなかった不具合を修正しています。どういう時にこういうケースがあるんだろ……と思ったのですが小さい文字列の String#initialize を無理矢理呼んで capacity キーワード引数で capa を大きめに指定した時のようです。あんまりなさそう。 [ruby-core:93228] [Bug #15937]

[148f50fc78] Takashi Kokubun 2019-06-19 01:09:35 UTC

.travis.yml の homebrew を使う時に brew update するようにしています。

[8797f48373] Nobuyoshi Nakada 2019-06-19 05:03:02 UTC

28678997e40869f5591eae60edd9757334426ffb の続きで String#initialize の実装で embed じゃなく shared もしくは str_new_static() で作られた static string の時には新しいメモリ領域を確保してコピーしておくようにしています。 [ruby-core:93228] [Bug #15937]

[e690df1f1e] Nobuyoshi Nakada 2018-09-27 09:17:28 UTC

Marshal.dump/Marshal.load で Time オブジェクトの year が極端に大きいものや 1900 以前のを扱うとチェックでエラーになってしまうのを修正しています。わざとのような気もしますが、はみだしたぶんは year_extend というフィールドを追加してここに格納するようにしています。うーん新しいので dump して古いのでは load できないですよね、これは。 [ruby-core:89164] [Feature #15160]

[a6a4e86029] Samuel Williams 2019-06-05 04:32:06 UTC

.gitignore に build* を追加しています。

[3fd83cb6fc] Samuel Williams 2019-06-05 04:32:27 UTC

benchmark/ 配下の Thread 関係のベンチマークを .rb から .yaml フォーマットに書き変えたり、追加したり、繰り返し回数を変更したりしています。あと bootstraptest に Thread#backtrace についてのテストを追加しています。

[69195fd9b2] Samuel Williams 2019-06-19 05:53:52 UTC

bootstraptest に Thread と Fiber を大量につくって何個でエラーになったかをチェックして出力するようにしています。重くなりそうだな……。

[b24603adff] Samuel Williams 2019-06-04 23:18:50 UTC

VM スタックの初期化処理を main thread 以外の時は vm.c の th_init() から thread_start_func_2() で実際に thread が起動される時に移動しています。これ同じ処理が 2箇所に分かれてしまうんだけどなぜだろう。と思ったのですが後のほうのを読んでここで VM スタックの確保を alloca() にしている、つまり VM スタックをマシンスタック上に確保するようにしている、というのが本質だとわかりました。

[7c7a1c2212] Samuel Williams 2019-06-05 01:53:19 UTC

リファクタリングと混じっててどこが本命なのかよくわからないのですが、Thread の終了/解放時に rb_fiber_close() や rb_threadptr_root_fiber_release() の呼び出しをコメントアウトしているのと、rb_execution_context_t の VM スタックの設定を th_init() の時点で NULL クリアしておくようにしているのが本質的な変更のようです。コメントを読むと vm_stack_size の設定を修正しているそうだけど…。

[38791145eb] Samuel Williams 2019-06-05 06:23:04 UTC

7c7a1c221281cdba1f48d5e42ee2f9af306d27f8 の変更のうち thread_free() での rb_threadptr_root_fiber_release() 呼び出しをコメントアウトするのは revert しています。また rb_threadptr_root_fiber_setup() で th->root_fiber をセットするようにしています。これは b24603adff8ec1e93e71358b93b3e30c99ba29d5 の変更の追加修正かなぁ。明示的に root_fiber のセットが消されてるところはないけど…。

[4b3b781c66] Samuel Williams 2019-06-05 08:52:07 UTC

7c7a1c221281cdba1f48d5e42ee2f9af306d27f8 のうち thread_start_func_2() での rb_fiber_close() の呼び出しのコメントアウトを rever...t かと思いきや消してかわりに rb_ec_set_vm_stack() を呼ぶようにしています。 そして th_init() での呼び出しはかわりに消しています。

[b8e4bea780] Samuel Williams 2019-06-05 11:39:17 UTC

で 4b3b781c66c48604a013557172540effd929f96a で thread_start_func_2() の終了時に rb_ec_set_vm_stack() を呼ぶようにしたのはやっぱり(元コメントアウトしてた) rb_fiber_close() に戻して、構造体 rb_context_t に free_vm_stack というメンバを追加して Fiber の解放時に VM スタックを解放するかどうか指定できるようにして、roob fiber の VM スタックは使いまわすようにしています。なるほどこれがやりたかったことですね、たぶん。

[8121a523c3] Samuel Williams 2019-06-05 21:53:25 UTC

thread_win32.c でマシンスタックサイズの最小値をハードコードしていたのを th->vm->default_params を参照するようにして、マシンスタックサイズとVMスタックサイズを合わせたサイズを指定するように変更しています。

[5855af73b8] Samuel Williams 2019-06-05 21:54:07 UTC

th_init() でメインスレッド以外だった時に rb_execution_context_t の内容がクリアされてることを VM_ASSERT() でチェックするようにしています。

[9cb4e7725f] Samuel Williams 2019-06-05 21:54:29 UTC

ここまでの変更の影響でか vm_backtrace.c で ruby のバックトレースを得る時に rb_execution_context_t にまだ cfp が詰まれてない可能性ができたのでその場合スキップして空っぽのバックトレースを返すようにしています。

[7cc7269b3d] Samuel Williams 2019-06-05 22:25:08 UTC

8121a523c3ea68898016ab3984b6c0240ff66995 の pthread_win.c のマシンスタックサイズのハードコードをやめる変更のうち rb_thread_create_mjit_thread() のほうは revert しています。この関数内では th が参照できなかったので。

[561c9bcf3a] Samuel Williams 2019-06-05 23:04:24 UTC

thread.c で Linux の時に #include を追加するようにしています。インライン化されることを期待してとのこと。

[dee0cfbb47] Samuel Williams 2019-06-06 03:02:35 UTC

thread_win.c で CreateThread() などの native thread の作成に渡すフラグに STACK_SIZE_PARAM_IS_A_RESERVATION というのを追加しています。

[7147038053] Samuel Williams 2019-06-19 05:07:15 UTC

thread_start_func_2() で th->ec のマシンスタックのアドレスとサイズをセットするところで STACK_GROW_DIR_DETECTION および STACK_DIR_UPPER を使ってマシンスタックの伸びる向きを意識してセットするようにしています。またサイズから VM スタックサイズを減らしている…ということはマシンスタックと VM スタックを一度に確保するようにしているんですねこれは。

[cb5da39f20] Samuel Williams 2019-06-19 06:47:15 UTC

thread_start_func_2() と fiber_init() に分散してた VM スタックの初期化処理を rb_ec_initialize_vm_stack() という関数に切り出しています。

[3e5b885cd2] Samuel Williams 2019-06-19 07:09:48 UTC

rb_memerror() のデバッグ出力をコメントアウトした状態にしてたのを if(0) の分岐内に入れる方法で残すようにしています。 b24603adff8ec1e93e71358b93b3e30c99ba29d5 でコメントアウトした状態で入れてたものですね。けどこれで一連のコミットが終わってるので消していいのでは…。

[cbe06cd350] git 2019-06-19 08:39:58 UTC

3fd83cb6fcc483d2eac0795bc139c521a3a59bd2 以降の一連のコミットの行末の空白除去、インデントのタブを空白に展開など。

[1a2546c2be] Hiroshi SHIBATA 2019-05-13 12:25:22 UTC

racc-1.4.15 を upstream のリポジトリからマージしています。

[c110b59af5] Hiroshi SHIBATA 2019-05-14 12:18:57 UTC

1a2546c2be839baa7d0a50dc056d4d6987d26852 の racc 更新のテストでディレクトリ構成の違いを吸収するように修正しています。

[4e218282d2] Hiroshi SHIBATA 2019-05-14 12:36:59 UTC

tool/sync_default_gems.rb に racc の upstream との同期用の処理を追加しています。

[9ea1fc27a9] Hiroshi SHIBATA 2019-06-02 10:17:38 UTC

c110b59af5d1b1065c9e247260579e6212cb7fab の追加修正。 racc のテストでテスト用ディレクトリを固定のパスでなくて Dir.mktmpdir を使って一時ディレクトリを確保するようにしています。

[2272d6ae24] Hiroshi SHIBATA 2019-06-02 10:56:57 UTC

9ea1fc27a93c9a7a8f9aa2f8f61bc2529e93abb2 のさらに追加で TEST_DIR という定数を一時ディレクトリに変更したのはやっぱりやめておいて TEMP_DIR という新しい定数を追加して、assets, regress などのサブディレクトリはこれまでと同じ固定ディレクトリに生成するようにしています。

[4cca8c4d20] Hiroshi SHIBATA 2019-06-02 11:11:24 UTC

racc のテストで minitest のかわりに test/unit を利用するように書きかえています。

[8a3bd06d27] Hiroshi SHIBATA 2019-06-02 11:18:24 UTC

racc のテストでログの出力用や作業ディレクトリとして TEST_DIR のほうを使っていたものを一時ディレクトリのほうを使うように変更しています。

[d710321800] Hiroshi SHIBATA 2019-06-02 11:50:42 UTC

racc のテスト で src.intp というファイルは TEST_DIR のほうに作るようですが TEMP_DIR にもコピーするようにしています。なんだろこれ。

[e892c2f924] Hiroshi SHIBATA 2019-06-19 03:06:41 UTC

ext/racc/extconf.rb に Subversion の自動展開の結果が残ってたのを削り frozen_string_literal: false の magic comment を追加しています。

[2b4024da32] Hiroshi SHIBATA 2019-06-19 03:34:34 UTC

racc のテストで racc によるコード生成結果が fixture と完全一致するというテストがありましたが、一部の環境で結果が異なるそうなので一旦コメントアウトしています。だいぶ厳しいテストですね(とはいえどこが変化するんだろう)。

[754df26210] Hiroshi SHIBATA 2019-06-19 07:08:55 UTC

bin/racc, bin/racc2y, bin/y2racc を追加しています。

[b93508b32c] git 2019-06-19 09:19:20 UTC

1a2546c2be839baa7d0a50dc056d4d6987d26852 からの一連の変更の行末の空白除去、ファイル末尾の改行追加など。

[40f8c82b96] Hiroshi SHIBATA 2019-06-19 09:35:09 UTC

1a2546c2be839baa7d0a50dc056d4d6987d26852 での拡張ライブラリ racc のディレクトリ構成の変更のうち cparse のものを revert しています。

[d17344cfc5] Samuel Williams 2019-06-19 09:06:57 UTC

IA64 のための preprocessor 分岐などを全体的に削除しています。 IA64 は積極的にはサポートしてない状態だったと思いますが、これをもってビルドできないようになったと思います。

[659eda7f83] git 2019-06-19 11:33:24 UTC

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

[ab6d8d0b65] Nobuyoshi Nakada 2019-06-19 11:40:49 UTC

インデントとスタイルの修正のみ。