ruby-trunk-changes r64092 - r64104

今日は MJIT で複数のメソッドを1つの *.so にコンパイルするようにする変更や、Windows のコンソールへの出力の不具合修正などがありました。

nobu: r64092 2018-07-29 00:29:14 +0900

win32/win32.c のコンソールへの出力に使う関数 constat_parse() で WriteConsoleW() が書き込めるサイズに制限があるので、32KB 毎に文字列をして繰り返して全体を出力するようにしています。 [ruby-dev:50597] [Bug #14942]

svn: r64093 2018-07-29 00:29:15 +0900

version.h の日付更新。

k0kubun: r64094 2018-07-29 01:14:56 +0900

MJIT で複数のメソッドの JIT コンパイルが完了したら全ての *.o ファイルを1つの *.so にまとめて改めてロードするようにしています。 [ruby-core:85625] [Bug #14490]
この変更の動機/目的やしくみについては k0kubun さんのブログに投稿がありました。 https://k0kubun.hatenablog.com/entry/mjit-compaction

nobu: r64095 2018-07-29 09:09:08 +0900

win32/mkexports.rb で deprecated になっている flip-flop 演算子が利用されていたので使わないように書き換えています。 [ruby-core:88147] [Bug #14946]

nobu: r64096 2018-07-29 10:32:37 +0900

構造体 struct iseq_compile_data、struct args_info、rb_execution_context_t、rb_thread_t でメンバーの順序を入れ替えてサイズを小さくしています。

k0kubun: r64097 2018-07-29 11:05:08 +0900

r64094 で導入した MJIT の複数オブジェクトファイルをまとめて .so にする変更で --jit-wait オプションが指定された場合は無効化するようにしています。メソッド毎に MJIT が完了するまで待つため compaction の起動条件が常に成り立ってしまうため。

k0kubun: r64098 2018-07-29 11:36:35 +0900

MJIT のテストで利用する一時ディレクトリの名前の修正。

k0kubun: r64099 2018-07-29 12:22:07 +0900

r64076 で導入した MJIT のテストで mingw 環境で失敗するものをとりあえず skip するようにしています。 [ruby-core:88154] [Bug #14948]

k0kubun: r64100 2018-07-29 17:04:45 +0900

r64094 の MJIT の複数オブジェクトファイルをまとめる処理が --jit-save-temps で *.o が残されるようになっている時のみ有効だったのを、明示的に指定しなくても残すようにしています。

nobu: r64101 2018-07-29 17:13:05 +0900

拡張ライブラリ openssl の extconf.rb で LibreSSL とリンクする時の警告を除去するため -DNOCRYPT というコンパイラオプションを追加するようにしています。

normal: r64102 2018-07-29 19:15:11 +0900

Thread cache の管理構造体 struct cached_thread_entry にシグナル発生時の altstack も持たせるようにして、GVL の削除時に先に altstack たちを解放するようにしています。 [ruby-core:85621] [Feature #14487]

k0kubun: r64103 2018-07-29 19:31:57 +0900

MJIT のテストが make install に依存しているため make test-all の依存関係に install を追加しています。

nobu: r64104 2018-07-29 20:00:02 +0900

r64103 の再修正。 make test-all で install が必要なのは --enable-load-relative が指定されてない時だけなので $LIBRUBY_RELATIVE で判定して必要な時だけ依存するようにしています。