ruby-trunk-changes 2020-09-14

今日は主に reline と irb の更新や Mutex/ConditionVariable などの blocking fiber 対応、拡張ライブラリ zlib の Zlib::GzipReader.zcat メソッドの追加などがありました。

[3a3e933033] aycabta 2020-09-13 15:49:51 UTC

標準添付ライブラリ reline のバージョンを 0.1.5 に更新しています。

[5d841f5631] aycabta 2020-09-13 15:50:57 UTC

標準添付ライブラリ irb のバージョンを 1.2.5 に更新しています。

[e468d9f49c] aycabta 2020-08-29 11:48:25 UTC

irb で代入文の評価値の表示を短く省略表示するようにしているようです。IRB::Context#omit_on_assignment という設定で on/off が設定できるようです。

[8f9b1902f4] aycabta 2020-09-03 13:51:15 UTC

同じく irb で評価値を表示する時に複数行入力の時に? 省略表示するようにしているようです。

[5bb9e12573] aycabta 2020-09-13 16:00:20 UTC

irb の gemspec ファイルで reline の依存関係を 0.1.5 以上に更新しています。

[b682e0fc21] aycabta 2020-09-13 16:33:42 UTC

irb のバージョンを 1.2.6 に更新しています。

[ba73e44751] git 2020-09-13 17:20:41 UTC

version.h の日付更新

[a9ccebbda0] Hiroshi SHIBATA 2020-09-14 03:02:43 UTC

NEWS に default gems 化した標準添付ライブラリを追加しています。

[703e529751] Samuel Williams 2020-08-20 01:47:55 UTC

blocking fiber のための Scheduler を取得する rb_thread_current_scheduler() という API を追加しています。

[6747cb5754] Samuel Williams 2020-08-20 01:48:29 UTC

include/ruby/io.h のマクロ GetOpenFile() を RB_IO_POINTER() に、MakeOpenFile() を RB_IO_OPEN() に改名しています。元の名前も #define で別名として定義しているので使えそうです。

[905e9c8093] Samuel Williams 2020-08-20 01:49:09 UTC

定数 IO::WAIT_READABLE, IO::WAIT_PRIORITY, IO::WAIT_WRITABLE の WAIT_ の prefix を削除してそれぞれ IO::READABLE, IO::WRITABLE, IO::PRIORITY に変更しています。これは互換性大丈夫なのかな。 blocking fiber でだけ使ってた定数かな。

[d387029f39] Samuel Williams 2020-08-20 01:51:45 UTC

blocking fiber 用の Scheduler クラスの実装のための C API 群を追加しています。また IO#wait_priority というのを新設しています。 703e529751deb086a46a9c029ce38d4fff14e84c で導入した rb_thread_current_scheduler() をここで利用していますね。

[132453fa52] Samuel Williams 2020-08-20 12:52:36 UTC

blocking fiber 追加時に? 追加されてた Kernel#Fiber() を Fiber.schedule というクラスメソッドに改名しています。

[701dcbb3ca] Samuel Williams 2020-08-20 12:53:08 UTC

blocking fiber のための Scheduler で IO#read からコールバックを呼び出すようにしています。

[9e0a48c7a3] Samuel Williams 2020-09-05 02:30:21 UTC

io.c や process.c の Thread に設定されている blocking fiber のための Scheduler を得るのに rb_thread_scheduler_if_nonblocking() のかわりに 703e529751deb086a46a9c029ce38d4fff14e84c で追加したrb_thread_current_scheduler() を使うように変更しています。

[178c1b0922] Benoit Daloze 2020-09-05 04:26:24 UTC

Mutex を Thread 全体で共有せず Fiber ごとに排他処理できるようにしています。そのかわり Mutex#lock で Scheduler を認識して Scheduler による切り替えに対応しているようです。しかし blocking じゃない普通の Fiber で事故るとデッドロックしそう。まあでもそのような使いかたは潜在的な不具合のような気がしますが。 [ruby-core:97907] [Feature #16792]

[3dc0fc11f0] Samuel Williams 2020-09-05 03:32:13 UTC

common.mk の依存関係の更新。

[1a0cfe2839] Samuel Williams 2020-09-06 02:48:52 UTC

178c1b0922dc727897d81d7cfe9c97d5ffa97fd9 の Mutex の Fiber の Scheduler 対応で lock 取得待ちをする時にビジーループに入らないように修正しています。

[0f613cc5f1] Samuel Williams 2020-09-11 08:47:25 UTC

Mutex の Fiber 対応をしたのに追随して ConditionVariable も対応しているようです。

[8eea66a0ca] Samuel Williams 2020-09-13 23:10:02 UTC

Mutex の Fiber 対応に追随して Queue と SizedQueeu も Scheduler 対応しています。

[7fca274198] Samuel Williams 2020-09-14 00:17:11 UTC

拡張ライブラリ io/console の IO#getch でも blocking fiber の Scheduler 対応しています。

[eace12c25b] Hiroshi SHIBATA 2020-09-14 05:06:02 UTC

標準添付ライブラリ open3 の gemspec ファイルでバージョン取得するために探すファイルパスを修正しています。

[78ef7eeb36] Hiroshi SHIBATA 2020-09-14 05:07:37 UTC

標準添付ライブラリ open3 の gemspec ファイルで required_ruby_version を 2.6.0 以上に変更しています。

[ccb944fcfe] Koichi Sasada 2020-09-14 07:22:13 UTC

NEWS に Ractor の追加について追記しています。

[cdb85142f9] Hiroshi SHIBATA 2020-09-14 08:06:38 UTC

標準添付ライブラリ erb の gemspec ファイルで spec.bindir の指定を exe から libexec に変更しています。

[888e04ae05] TOMITA Masahiro 2020-07-14 15:50:16 UTC

標準添付ライブラリ net/smtpTLS を利用する時にデフォルトでホスト名のチェックを無効にするように変更しています。明示的にチェックが有効な OpenSSL::SSL::SSLContext を渡して Net::SMTP#enable_starttls_auto を呼んだ時だけ有効にしているようです。SMTP ではそういうもんなんだろうか。

[141404e898] TOMITA Masahiro 2020-07-19 12:25:25 UTC

標準添付ライブラリ net/smtp の Net::SMTP.start の省略可能な引数をキーワード引数に変更しています。rest 引数で通常引数も受付けて fallback しているのでいちおう従来の書きかたも動きそうです。

[f1d32010e6] "nicholas a. evans" 2019-02-27 19:25:51 UTC

標準添付ライブラリ net/smtp の Net::SMTP#tlsconnect で SNI をサポートするようにしています。@address が IP アドレスの時に hostname として代入していいのかな。

[d52dffd817] Jeremy Evans 2019-11-27 01:31:47 UTC

拡張ライブラリ zlib に Zlib::GzipReader.zcat という特異メソッドを追加しています。これは gzip で圧縮された複数のファイルを連結したストリームを処理できるそうです。 [Bug #9790] [Bug #11180] [Bug #14804]

[9fbbbadc96] Nobuyoshi Nakada 2020-07-16 08:38:58 UTC

tool/lib/test/unit/core_assertions.rb に Test::Unit::CoreAssertions#diff というメソッドを追加しています。どこかでこのメソッドが呼ばれて NoMethodError になるので簡易的な実装を追加しておいたようです。

[50bce2065d] Nobuyoshi Nakada 2020-07-13 10:21:01 UTC

標準添付ライブラリ tempfile のテストで assert_equal のかわりに assert_not_predicate を使ってより意味のあるエラーメッセージが出るようにしています。

[f7f849e30c] Nobuyoshi Nakada 2020-07-13 10:44:52 UTC

標準添付ライブラリ tmpdir のテストで一時ディレクトリ指定する環境変数として TMPDIR の他に TMP と TEMP というのも使ったテストを追加しています。

[04de778ef1] Nobuyoshi Nakada 2020-07-13 12:26:06 UTC

f7f849e30cbf462e521b0843a9bb2cbea1bd4d11環境変数 TMP と TEMP のテストも追加した標準添付ライブラリ tmpdir のテストで環境変数が指すパスが存在しなかったりディレクトリじゃないファイルだったりした時のテストケースも追加しています。

[df1c035d03] Nobuyoshi Nakada 2020-07-13 12:39:32 UTC

f7f849e30cbf462e521b0843a9bb2cbea1bd4d11 および 04de778ef157c472dfa31239e8a6cfabceae4cb0 のさらに続きで標準添付ライブラリ tmpdir のテストで環境変数が指すパスに書きこみ権限が無かった場合のテストケースも追加しています。

[edb5c67195] Nobuyoshi Nakada 2020-07-16 08:45:08 UTC

標準添付ライブラリ tmpdir の Dir.tmpdir で環境変数 TMPDIR, TMP, TEMP やクラス変数 @systmpdir などがなんらかの理由で採用されなかった場合にはなぜ採用できなかったのかを警告メッセージで出力するようにしています。 https://github.com/ruby/tmpdir/pull/7

ruby-trunk-changes 2020-09-12

今日は主に標準添付ライブラリ open-uri, secureerandom, resolv, resolv-replace, time の default gems 化や標準添付ライブラリ reline の更新などがありました。

[2f24818319] Hiroshi SHIBATA 2020-09-11 11:38:18 UTC

標準添付ライブラリ open-uri に gemspec ファイルを追加して default gem にしています。

[d1851ba5b9] Hiroshi SHIBATA 2020-09-11 12:15:25 UTC

標準添付ライブラリ securerandom に gemspec ファイルを追加して default gem にしています。

[e0675b1c76] Hiroshi SHIBATA 2020-09-11 12:50:07 UTC

標準添付ライブラリ resolv に gemspec ファイルを追加して default gem にしています。

[01e0d74965] Hiroshi SHIBATA 2020-09-11 13:01:08 UTC

標準添付ライブラリ resolv-replace に gemspec ファイルを追加して default gem にしています。 resolv-replace ってなんだっけ。

[6042b7433d] Hiroshi SHIBATA 2020-09-11 23:29:06 UTC

標準添付ライブラリtime.rb にも gemspec ファイルを追加して default gem にしています。

[ae5d97ca53] git 2020-09-11 23:31:07 UTC

version.h の日付更新

[770e66030a] aycabta 2020-08-28 03:12:10 UTC

標準添付ライブラリ reline の Reline::Unicode.split_by_width の第3引数 encoding を省略可能にしてデフォルト値を第1引数 str の encoding を使うようにしています。

[0862744010] Yoshinao Muramatu 2020-08-10 02:01:05 UTC

標準添付ライブラリ reline の Reline::Windows.clear_screen でエスケープシーケンスを出力していたのを kernel32.dll の FillConsoleOutputAttribute() という API を利用するように書き換えています。

[a840ef8569] Yoshinao Muramatu 2020-08-30 05:42:41 UTC

0862744010907ecda8c8122557e97de9238d51a1 の標準添付ライブラリ reline の Reline::Windows.clear_screen の実装変更の再修正。上書きする文字数の計算を修正しています。

[2e34b35a0f] aycabta 2020-09-05 12:13:47 UTC

標準添付ライブラリ reline の Reline::ANSI.gretc で IO#raw で getbyte で読み込んだ結果が nil の時に少し sleep して繰り返し読み込むようにしています。EOF になっていれば例外が発生するはずなので、とのこと。ここでループしていいのかな。Reline::ANSI.cursor_pos で getc を呼び出してるところでも nil が返ってきてもループを抜けないようにしているけど、こちらも EOF の時に nil を返してるのでこれだとまずくないのかな。

[0ec19cc843] aycabta 2020-09-09 10:46:30 UTC

標準添付ライブラリ reline の Reline::LineEditor#rerender で不要な文字を消す処理でカーソルが行末にある状態でカーソルより後ろの文字削除すると行末の文字が消えることがあるそうなので判定して不要な Reline::IOGate.erase_after_cursor の呼び出しを行なわないようにしているようです。

[9baf1bd0a4] aycabta 2020-09-09 08:44:44 UTC

標準添付ライブラリ reline で String#lines の chomp オプションを利用していたのをやめて後で String#chomp を呼び出すようにしています。引数に明示的に "" を渡しているので、複数の改行コードを消したいということかな。lines を呼び出したら通常改行は 1 つになりそうだけど。

[ce389ade45] aycabta 2020-09-10 20:48:59 UTC

標準添付ライブラリ reline の Reline::LineEditor#rerender でカーソルを次の行に移動する向きの計算を修正しています。

[f36dc2b6de] aycabta 2020-09-11 16:51:26 UTC

標準添付ライブラリ reline の Reline::LineEditor#calculate_height_by_lines のプロンプトを渡す引数の扱いを変更しています。 Reline.prompt_proc が設定されてない時の不具合修正らしいです。

[777d536749] aycabta 2020-09-11 19:51:08 UTC

標準添付ライブラリ reline の Reline::ANSI の RAW_KEYSTROKE_CONFIG に iTerm2 での Option+→、Option+←、Option+f、Option+b などのキー入力に対応するキーマップを追加しています。

[ae508633b7] aycabta 2020-09-12 01:07:18 UTC

標準添付ライブラリ reline の Reline::Windows.clear_screen の未使用のローカル変数の警告抑制のため変数名の最初に "_" を追加しています。

[012785ef35] Masaki Matsushita 2020-09-12 04:36:53 UTC

io.c で IO.copy_stream のために copy_file_range(2) を利用するかどうかの判定に USE_COPY_FILE_RANGE のほかに __linux__ および __NR_copy_file_range マクロ定数の存在チェックをしていたのを configure で実際に使えるかチェックして USE_COPY_FILE_RANGE マクロ定義するようにしています。GitLab のバグトラッカで実際には copy_file_range() が使えない環境での不具合というのがあった模様。 https://gitlab.com/gitlab-org/gitlab/-/issues/218999#note_363225872

[0ac185be40] Masaki Matsushita 2020-09-12 07:27:14 UTC

012785ef352d6eee983e087adad71692b3aeb354 で追加した configure.ac の copy_file_range(2) 確認用のコードに close(2) 追加。また copy_file_range(2) を使うかどうかの判定にコンパイルしてみての確認の他に $ac_cv_func_copy_file_range も見るようにしています。 cross compile のビルド時の対応らしいのですがどうしてこうなるんだろう。

ruby-trunk-changes 2020-09-11

今日は ObjectSpace.dump_all の不具合修正、String#slice! の不具合修正や標準添付ライブラリの abbrev, shellwords, base64, syslog の default gems 化などがありました。

[cee8e95761] Hiroshi SHIBATA 2020-09-10 04:54:28 UTC

標準添付ライブラリ abbrev に gemspec ファイルを追加して default gem にしています。

[cf681038d6] Hiroshi SHIBATA 2020-09-10 06:42:23 UTC

標準添付ライブラリ shellwords も gemspec ファイルを追加して default gem にしています。

[cf76a4a5c2] Hiroshi SHIBATA 2020-09-10 09:56:13 UTC

標準添付ライブラリ base64 も gemspec ファイルを追加して default gem にしています。

[867204c4a5] Hiroshi SHIBATA 2020-09-10 11:42:53 UTC

拡張ライブラリ syslog も default gem 化しています。

[ef22af4db0] Matt Valentine-House 2020-06-30 21:19:18 UTC

rb_vm_t の VM 全体の queue などの排他のために使う mutex の初期化を Init_Thread() で行なっていましたが、この前に GC が走ると初期化前に利用しようとして異常終了してしまうので Init_Thread_Mutex() という初期化関数を導入してここで mutex 初期化するようにして、これをプロセス起動時の初期化の最初に呼ぶようにしています。

[440ab313d0] git 2020-09-10 15:49:18 UTC

version.h の日付更新

[e691e671ca] Hiroshi SHIBATA 2020-09-10 12:04:00 UTC

Thread#safe_level という deprecated になっていたメソッドを削除しています。

[d55c914f0f] Hiroshi SHIBATA 2020-09-10 12:07:41 UTC

標準添付ライブラリ drb の DRb.default_safe_level および DRb::DRbServer#safe_level も削除しています。

[406559a268] Kazuhiro NISHIYAMA 2020-09-11 02:01:30 UTC

拡張ライブラリ objspace の ObjectSpace.dump_all の実装の switch 文の break 漏れを修正しています。 Coverity Scan の警告で判明したとのこと。おお、役に立ってる。

[0d78390bfb] Nobuyoshi Nakada 2020-09-11 04:26:06 UTC

tool/rbinstall.rb でもう OpenStruct は未使用になってたので require "ostruct" を削除しています。

[f0ddbd502c] Soutaro Matsumoto 2020-09-11 05:34:10 UTC

String#slice! の引数に整数でない数値? で範囲外の整数に変換される値を渡した時に空文字列を返していたのを nil を返すように変更しています。 2.7 までの挙動にあわせる修正とのこと。 https://github.com/ruby/ruby/pull/3533

ruby-trunk-changes 2020-09-10

今日は Tempfile.open のブロック渡し呼び出しで最後のファイルを消すようにした仕様変更の revert や ObjectSpace.dump_all の新機能、最適化などがありました。

[6997109fca] Jeremy Evans 2020-09-08 19:02:56 UTC

fa21985a7a2f8f52a8bd82bd12a724e9dca74934 で標準添付ライブラリ tempfile の Tempfile.open のブロックつき呼び出しでブロックを抜けた時にファイルを削除するように仕様変更されてましたが、互換性の問題がありそうな使われかたが実際にあったようなので revert して、かわりに Tempfile.open の rdoc 用コメントにこの点を Tempfile.create との比較しつつ追記しています。なるほど Tempfile.create を使えばブロック抜けると同時に消せるのか。どうもこの変更は Matz の承認は得てなかったようです。

[b194973dcd] Hiroshi SHIBATA 2020-09-09 11:52:48 UTC

6997109fcaef0567f176e53dfc092aecc49f9ece による revert に追随して NEWS からも Tempfile.open の仕様変更についての記述を削除しています。また対応して修正されたテスト群も元に戻されています。

[01828a955a] Hiroshi SHIBATA 2020-09-09 12:53:09 UTC

標準添付ライブラリ tsort を default gem 化しています。

[b49a870414] Jean Boussier 2020-07-28 10:58:49 UTC

拡張ライブラリ objspace の ObjectSpace.dump_all にキーワード引数 since を追加して、GC.count で得られる GC 回数を渡してそれ以降で確保されたオブジェクトのみダンプするように絞り込む機能を追加しています。これはすごく便利そう。

[76c7146ab4] git 2020-09-09 15:05:36 UTC

version.h の日付更新

[5001cc4716] Jean Boussier 2020-08-18 07:41:38 UTC

ObjectSpace.dump_all の実装で出力を毎回 IO に出さずバッファリングするようにしています。これにより高速化しています。

[475c8701d7] Aaron Patterson 2020-09-05 00:32:31 UTC

SecureRandom がメソッド定義の実体を実際に必要になった時まで遅延して動的にメソッド再定義しているため、Ractor で使った時に利用時にクラスの書き換えが行なわれるのでエラーになっていた不具合を修正。クラス読み込み時に元の特異メソッドで行なってた判定を実行してしまうようにしています。 https://github.com/ruby/ruby/pull/3518

[ea78960ee5] Koichi Sasada 2020-09-10 07:51:24 UTC

Ractor の実装で callable_method_entry() で method entry のテーブルを操作する時に Ractor 間で排他処理が必要だったので RB_VM_LOCK_ENTER()/RB_VM_LOCK_LEAVE() を使うようにしています。

ruby-trunk-changes 2020-09-09

今日は最新の macOS での fiddle のテスト対応の続きなどがありました。

[cdef17096c] Hiroshi SHIBATA 2020-09-08 11:38:01 UTC

昨日の 0168094da28c146062db22e69cbd9316418310f9 の続きで fiddle のテストで使うライブラリのパスを macOS で /usr/lib/libSystem.dylib にしましたが、これも symbolic link なのでさらに指してる先の /usr/lib/libSystem.B.dylib を直接指定するようにしています。

[b7d86e330c] Hiroshi SHIBATA 2020-09-08 11:39:23 UTC

さらに macOS Big Sur での fiddle のテストのためのライブラリパスの指定を test/fiddle/helper.rb でしてましたが、なんと Big Sur ではこのファイルはファイルシステム上は削除された? ものの dlopen(3) すると開ける(!!?)らしいので、通常の case 文での設定後のファイル実体チェックのさらに後に workaround として libc_so と libm_so の再設定を macOS では行うようにしています。

[65ab2385e3] Takashi Kokubun 2020-09-08 16:22:27 UTC

mjit_compile.c の struct compile_status という構造体のメンバー max_ivar_index の型を st_index_t から size_t に変更しています。 printf フォーマットでの出力時の警告を抑制するためみたいです。

[96f2b2e086] git 2020-09-08 16:23:52 UTC

version.h の日付更新

ruby-trunk-changes 2020-09-08

今日は主に Random の内部実装をリファクタリングして新しい乱数生成器の C 実装クラスを追加するのをサポートするマクロや構造体を追加する変更などがありました。

[f4d5273989] Nobuyoshi Nakada 2016-05-12 07:52:34 UTC

Random の親クラスとして Random::Base というクラスを追加して rand, bytes などのメソッドは Random::Base に生やすようにしています。Random::Base は名前空間的に Random の下なので、最初 ID で無名クラスを作ってから rb_const_set() で Random::Base にセットするようにしています。

[af5e87ab21] Nobuyoshi Nakada 2016-05-07 02:51:14 UTC

Random に使う rb_random_t の宣言や rb_random_interface_t という新しい型を宣言する include/ruby/random.h というヘッダを追加しています。また RB_RANDOM_INTERFACE_DECLARE() や RB_RANDOM_INTERFACE_DEFINE() といったマクロを追加して独自の乱数生成器を C で定義するためのヘルパーを追加しています。 random.c での MT の実装もこのマクロを使って宣言するようにしています。

[c449b9b02f] Nobuyoshi Nakada 2020-04-14 15:45:38 UTC

random.c の random_real() から rb_int_pair_to_real_exclusive() と rb_int_pair_to_real_inclusive() を呼び分ける部分を rb_int_pair_to_real() という関数に切り出しています。

[d6ec0ef59b] Nobuyoshi Nakada 2020-04-14 15:52:08 UTC

af5e87ab218c5f4e34c6cdb54ae119a7f0f9033f で追加された Random のための乱数生成器を定義するのに使う構造体 rb_random_interface_t にメンバー get_real を追加してこれがセットされてたらその関数を使って乱数を得るようにしています。

[4924011262] Nobuyoshi Nakada 2020-09-07 09:51:58 UTC

d6ec0ef59b4c7c95beaad09f77cb5f86a0901b97 で追加した構造体メンバ rb_random_interface_t::get_real つきで宣言する RB_RANDOM_INTERFACE_DEFINE_WITH_REAL() というマクロを追加しています。

[2b07b24bdf] Nobuyoshi Nakada 2020-09-07 09:56:39 UTC

構造体メンバ rb_random_t::seed に値をセットする rb_random_base_init() という C API を追加しています。

[5be75aad37] Kazuhiro NISHIYAMA 2020-09-08 01:30:07 UTC

af5e87ab218c5f4e34c6cdb54ae119a7f0f9033f で追加した ext/-test-/random/loop.c の switch 文の break のない case に FALLTHROGH コメントを追加しています。 Coverity Scan の検出を抑制するためとのこと。

[4530bea88c] git 2020-09-08 01:31:51 UTC

version.h の日付更新

[0168094da2] Hiroshi SHIBATA 2020-09-08 10:35:15 UTC

test/fiddle/helper.rb で macOS の最新版 BigSur で /usr/lib/libc.dylib や /usr/lib/libm.dylib がなくなったそうで fiddle のテストで使うライブラリのパスを /usr/lib/libSystem.dylib に変更しています。元々 /usr/lib/libc.dylib や /usr/lib/libm.dylib は libSystem.dylib への symbolic link になってたようです。