ruby-trunk-changes 2019-05-29

今日は古い BASERUBY への対応や reline, irb の修正などがありました。

[fb568fe724] Nobuyoshi Nakada 2019-05-28 23:46:30 +0900

include/ruby/ruby.h に ISBLANK(), ISCNTRL(), ISPUNCT() といったマクロを追加しています。 ISSPACE(), ISALPHA() とかの仲間ですね。

[c730c25354] Nobuyoshi Nakada 2019-05-29 00:00:26 +0900

parse.y で ?a などの文法でエスケープシーケンスの中に空白やタブ、改行文字などが含まれている時に警告を出力するようにしています。

[abd556958d] git 2019-05-29 00:07:07 +0900

version.h の日付更新。

[462a63c39e] Takashi Kokubun 2019-05-29 05:10:12 +0900

4fe908c1643c3f355edd787bb651aefb53b996c0 で GC.compact 中は一時的に MJIT の worker を止めるようにしていたのを revert しています。昨日までの修正で直ってるかもしれないので様子見ということみたいです。

[d070523e7b] Takashi Kokubun 2019-05-29 05:27:55 +0900

Travis-CI の build matrix から uinversal.x86_64h-darwin17 というのを削除しています。

[a66bc2c011] Benoit Daloze 2019-05-28 22:41:48 +0200

rubyspec を upstream からマージしています。

[3b7862c8e8] aycabta 2019-05-29 05:53:44 +0900

Reline::HISTORY で履歴追加時に常に history_size 以下になるように古い履歴を捨てるようにしています。また reline のテストの Reline::Config と Reline::LineEditor のインスタンスをクラス変数からひっぱってきて使いまわすようにしています。いいのかなこれは。

[c67934b1c3] aycabta 2019-05-29 05:58:33 +0900

3b7862c8e88cd7838a53ec083ac5733386400956 の続きで Reline::HISTORY#push で一度に大量に追加して追加するやつも要素を一部捨てないといけない場合に対応しています。

[91f5a8db59] Benoit Daloze 2019-05-28 23:15:57 +0200

rubyspec の upstream からの再 merge。 BigDecimal::BASE のチェックを wordsize で分けずにまとめてます。

[3e54ff67e6] Takashi Kokubun 2019-05-29 06:45:33 +0900

.travis.yml に BASERUBY として 1.9.3 を使う環境でのビルドのテストを追加しています。BASERUBY の最低バージョンというのは明確な取り決めや文章がなくて都度これで動かしたいと修正されたりしてる状態なので、Travis-CI で少なくとも 1.9.3 では動くよというのをチェックしておこう、ということみたいです。05bc14d81a1d7f6af826a92371aeff0c3fb2a67e で 1.8 向けのサポートを入れたのに呼応してとのことですが、Travis-CI では 1.8.7 で動く環境が用意できないのでやむをえず 1.9.3 ということで、1.9.3 が最低バージョンという意図ではないそうです。

[d390af3686] aycabta 2019-05-29 06:54:57 +0900

irb の completion 用の Proc で結果を Encoding.default_external に encode しなおすようにしています。

[d341bb2857] aycabta 2019-05-29 06:57:47 +0900

irb のタブ補完で rdoc のドキュメントを表示する機能で、RubyVM 配下のモジュール/クラスについて表示しようとしたら Ruby のロゴのアスキーアートが表示されるようになっています。なんだこれは。 irb で "RubyVM" と書いてからタブを2度打つとみることができます(コミットをみてもいいけど)。

[a4a682c450] aycabta 2019-05-29 06:57:47 +0900

d341bb285768ae70bc8d251e577181c57322968c の続きで、環境変数 RUBY_YES_I_AM_NOT_A_NORMAL_USER に任意の値をセットしておくと RubyVM の rdoc も表示されるようにしています。

[8d83743170] aycabta 2019-05-29 06:57:47 +0900

d341bb285768ae70bc8d251e577181c57322968c のさらに続きで、ロゴ表示のために IO.copy_stream を使ってます。なんだこの無駄なパフォーマンスの追求はw

[67f75d5b43] Takashi Kokubun 2019-05-29 08:04:49 +0900

Wercker の --jit-wait つきのテスト時に ruby に -v オプションをつけるようにしています。

[f0d1dc5cee] Takashi Kokubun 2019-05-29 08:08:54 +0900

readline のテストで MJIT が有効だと Wercker 上でのテストがハングアップするものがあったようでとりあえず skip するようにしています。

[e1f62d7f0e] Takashi Kokubun 2019-05-29 08:19:35 +0900

revision.h の生成時に tool/file2lastrev.rb の実行エラーを無視してましたが、これは BASERUBY がそもそもない環境向けだったので、BASERUBY があって(HAVE_BASERUBY)エラーになった時は無視しないようにしています。

[6b5e712361] Takashi Kokubun 2019-05-29 08:22:04 +0900

tool/vcs.rb でキーワード引数が使われてましたが、このファイルは BASERUBY で実行される可能性があるので古い ruby で動くように通常の引数に変更されています。

[797d7efde1] Takashi Kokubun 2019-05-29 08:56:27 +0900

やはり GC.compact でオブジェクト移動中は MJIT で ISeq を触るのはまずいようで、GC.compact 中に MJIT を一部停止するようにしています。ただ 4fe908c1643c3f355edd787bb651aefb53b996c0 のように gc_verify_compaction_references() で worker 全体を mjit_pause()/mjit_resume() するのではなくて gc_compact_after_gc() でロックを取得するようにもうちょっと軽量に行うようにしています。

[98ba116d40] Takashi Kokubun 2019-05-29 09:05:26 +0900

reline の 3b7862c8e88cd7838a53ec083ac5733386400956、c67934b1c3b40dda5f170b032423e520511c68dd、f0d1dc5cee87dfb023cb43a2db9bcdef5a8dee8f を revert しています。CI で止まってしまったため。やっぱりクラス変数で使いまわすのがまずかったんじゃないかな。一緒に Reline::HISTORY の修正も revert されてますね。

[f60a59ed20] MSP-Greg 2019-05-29 09:14:01 +0900

appveyor.yml でビルドに使うライブラリの pacman でのインストールを追加、変更しています。msys2 の更新? で動かなくなったのに対応しているようです。 https://github.com/ruby/ruby/pull/2208

[c86d1fbed5] Nobuyoshi Nakada 2019-05-29 09:46:44 +0900

e1f62d7f0e33de81a194f26a2c57e14e38d9de52 の revision.h の生成の変更の再修正。 BASERUBY がない時の対応を追加。

[3f13297923] aycabta 2019-05-29 10:04:58 +0900

98ba116d402e7c255dae78ce43b76723a56c4cb7 で revert された 3b7862c8e88cd7838a53ec083ac5733386400956 などの Reline::HISTORY の履歴追加の修正を再適用しています。

[34fe1f7d71] Nobuyoshi Nakada 2019-05-29 12:09:25 +0900

e1f62d7f0e33de81a194f26a2c57e14e38d9de52 および c86d1fbed5e887ea7b59582510fb26ec912b7898 のさらに続き。 HAVE_BASERUBY の如何によらず revision.h のターゲットのデフォルト? を宣言してます。HAVE_BASERUBY が yes でも no でもない時に対応してるってことかな。

[c7f3c222c9] Nobuyoshi Nakada 2019-05-29 12:12:19 +0900

irbシンタックスハイライトで on_parse_error だけでなく compile_error の時の色付けにも対応しています。

[8187ffa461] Koichi Sasada 2019-05-29 04:30:36 +0100

c7f3c222c9b82736c993419daa6bfb643e5c0793 を revert しています。CI でエラーになったかな?

[e04d10b28f] Yusuke Endoh 2019-05-29 13:01:53 +0900

rubygems のテストで Solaris の CI でタイムアウトで失敗してるそうなので待ち時間をのばしています。

[aee36bf149] Kazuhiro NISHIYAMA 2019-05-29 13:16:05 +0900

remove_coverage_i() や trace_set_i() で asan_poison_object() を呼ぶ前にポインタの NULL チェックをしていたら Coverity Scan がこの文は決して実行されないという警告を出したので(誤検出?) 分岐込みの asan_poison_object_if() を導入しています。

[8552e9d696] Nobuyoshi Nakada 2019-05-29 13:24:24 +0900

util_spec_rb_get_kwargs() で keys の配列帳を RARRAY_LENINT() で取り出すようにして警告除去しています。

[cc66272e50] Nobuyoshi Nakada 2019-05-29 13:24:24 +0900

ripper で parse error 時などにエラーになったトークン? を flush するようにしています。 irb でエラー部位をハイライトするためでしょうねぇ。

[068d327595] Nobuyoshi Nakada 2019-05-29 13:34:19 +0900

c7f3c222c9b82736c993419daa6bfb643e5c0793 のリトライ。 irbシンタックスハイライトでエラー部分を表示するようにしています。

[5379ca9250] Takashi Kokubun 2019-05-29 14:57:25 +0900

rubyspec の a66bc2c01194a9c017c874a30db5b3b6bd95e966 の更新で Travis-CI で通らなくなったテストをとりあえず macOS で除外するようにしています。

[1a0c3d8dd6] Takashi Kokubun 2019-05-29 15:04:45 +0900

tool/vcs.rb の String#lines に明示的に to_a を呼び出して配列に変換しておくようにしています。 BASERUBY が 1.9.3 でも動くようにするため。

[468b475e61] Takashi Kokubun 2019-05-29 16:09:07 +0900

3e54ff67e6dc1c5882fc05392add09bc59c1afae の Travis-CI での BASERUBY の動作確認用のビルドを build matrix に差し込む位置をちょっと変更しています。この順序意味あるのか。

[ce7b1132c5] Takashi Kokubun 2019-05-29 16:22:27 +0900

mjit_worker.c の print_jit_result() の中で iseq->body->location から行番号を取り出すのをやめて呼び元から引数で受けとるようにしています。 GC.compact 中に動くと壊れることがあるのに対応するためみたいです。

[7c0639f3f8] Takashi Kokubun 2019-05-29 16:48:07 +0900

ce7b1132c581375dafa6a5b5071e66eaa362b429 のさらに続き。 convert_unit_to_func() から print_jit_result() のために FIX2INT() を呼んでたのを FIX2LONG() に変更して print_jit_result() の引数の方も変更しています。また FIXNUM_P() でチェックしてから呼ぶようにして例外発生など ruby レベルの処理を利用しないようにしています。

[5ceff480c2] Nobuyoshi Nakada 2019-05-29 18:21:28 +0900

拡張ライブラリ ripper の Ripper::Lexer::Elem に message という属性を追加して Ripper::Lexer#scan というメソッドで lexer の結果とエラー時のエラー内容を同時に返せるようにして irbシンタックスハイライトでこれを利用するようにして、irb 側で独自に拡張していたのを取り込むようにしています。

[fafcbe0eb0] aycabta 2019-05-29 18:52:34 +0900

標準添付ライブラリ reline の Windows 版の端末制御でスクリーンサイズの幅と高さが反対になってたところを修正しています。

[ab7a6e1a16] aycabta 2019-05-29 20:21:00 +0900

559dca509d2a98584b09c7d9a6d74749ce793ad7 の irb での補完での rdoc 表示機能で require の間違いを修正。

[83e905eb4e] aycabta 2019-05-29 20:24:00 +0900

と、思ったらやっぱり ab7a6e1a1651d82d327d155b78a8e3af1d976707 は revert されています。