ruby-trunk-changes 2020-12-05

今日は主の標準添付ライブラリ reline の更新と Socket.getaddrinfo の fork との併用での不具合修正などがありました。

[94d49ed31c] Masaki Matsushita 2020-11-26 07:07:28 UTC

2038cc6cab6ceeffef3ec3a765c70ae684f829ed で拡張ライブラリ socket の名前解決で getaddrinfo_a(3) を使って割り込み可能にした影響で Socket.getaddrinfo と fork を組み合わせるとうまく動かないという不具合を修正。 getaddrinfo_a(3) は内部で pthread を利用していて、fork 時に全ての thread を止める処理の対象になっていないためこれが残ってしまうという問題があったようです。なので fork 前の全 thread を止める処理で gai_cancel(3) という API を利用して名前解決のリクエストをキャンセルして、全てのリクエストが終了するまで待つことで thread がなくなるのを待つようにしています。[ruby-core:100329] [Bug #17220]

[9ea1055eab] Benoit Daloze 2020-12-04 15:32:14 UTC

rubyspec でバージョンによる guard で 2.8 を指定したものがまだ残っていたので 3.0 に変更しています。

[83e983ab61] git 2020-12-04 15:32:51 UTC

version.h の日付更新

[b4ec4a41c2] Benoit Daloze 2020-12-04 15:40:02 UTC

テストで RubyVM::MJIT にチェックなしでアクセスしていたところを defined? で存在チェックしてから参照するようにしています。JRuby などの別実装で動くようにするため。

[d7cda3b002] Peter Zhu 2020-12-04 15:49:33 UTC

.gdbinit の rp コマンドに T_MOVED 型のオブジェクトへの対応を追加しています。

[d5cf3fcd68] aycabta 2020-10-04 16:07:24 UTC

標準添付ライブラリ reline が持つ Unicode の文字幅のためのテーブルを Unicode 13.0.0 に追随させています。

[62666a6bbd] aycabta 2020-10-06 14:55:33 UTC

標準添付ライブラリ reline のテストで inputrc ファイルに出力するためのヘルパーメソッド write_inputrc を追加してこれを使うようにリファクタリング

[092c253bff] aycabta 2020-09-11 22:37:46 UTC

標準添付ライブラリ reline のテストに何箇所か sleep を挿入しています。

[87f51c7e66] aycabta 2020-10-09 12:30:57 UTC

092c253bff2e81ddae6e8c85b3a94af45129bdab の変更を revert してかわりに start_terminal にキーワード引数 startup_message を渡すようにしています。 start_terminal が内部でこのメッセージの出力まで待ってくれるとかかな。

[dd87d639e9] aycabta 2020-10-09 12:46:22 UTC

標準添付ライブラリ reline のテストで環境変数 RELINE_TEST_PROMPT にエスケープシーケンスを含む文字列が指定された時のテストを追加しています。

[da59f65178] aycabta 2020-10-09 18:00:04 UTC

標準添付ライブラリ reline に複数行入力の表示についてのテストケースをいくつか追加しています。

[e16e481385] aycabta 2020-10-14 14:16:23 UTC

標準添付ライブラリ reline のテストで使う yamatanooroti の依存バージョンを 0.0.6 に更新しています。

[4af2e4111b] aycabta 2020-10-14 14:29:17 UTC

標準添付ライブラリ reline の補完候補をつくるための処理で重複を削るための Array#uniq 呼び出しを追加。

[6a51d393ca] Yusuke Endoh 2020-10-19 14:22:47 UTC

標準添付ライブラリ reline でマルチバイト文字で Unicode の EastAsianWidth を検出するための正規表現を文字クラスを利用するように変更しています。"|" で連結するよりこっちのほうが 3倍くらい速いとのこと。

[4291ff370f] aycabta 2020-10-19 23:32:42 UTC

標準添付ライブラリ reline のテストの複数行入力+折り返しのテストケースでターミナルの横幅を変更しています。なんかコミットログと内容が一致してないような。

[55cc397a87] aycabta 2020-10-19 23:39:12 UTC

標準添付ライブラリ reline で irb で長い(複数行の)スクリプトをペーストすると遅いという問題の対処で Reline::IOGate のバッファが残ってる状態で続けて入力される時にはペースト中と判定していくつかの callback 呼び出しを抑制するようにしています。

[9461cceb8a] Yusuke Endoh 2020-10-20 01:49:18 UTC

おそらく 6a51d393ca834984737a2fa60e9a37bc9dec2a03 の追随で標準添付ライブラリ reline の AsianEastWidth の検出の正規表現の変更に追随してオプションの x を削っています。

[b3e0db8060] aycabta 2020-10-20 22:14:45 UTC

標準添付ライブラリ reline の Reline::VERSION を "0.1.6" に更新しています。

[76cac4c05a] Yusuke Endoh 2020-10-21 04:29:19 UTC

標準添付ライブラリ reline で文字の表示幅を得る処理で正規表現を1つにまとめることで高速化しています。

[266ffdde8e] aycabta 2020-10-31 07:45:15 UTC

標準添付ライブラリ reline の Reline::LineEditor でもバッファを持って端末にペーストされた時に表示幅の計算などをスキップするようにしています。

[853c176ea7] aycabta 2020-11-01 11:04:20 UTC

標準添付ライブラリ reline の Reline::VERSION を "0.1.7" に更新しています。

[e6429ad047] aycabta 2020-11-01 11:39:26 UTC

標準添付ライブラリ reline の vi mode での Ctrl-h とバックスペースキーの割り当てを1文字削除になってたのを :ed_unassigned に変更しています。

[564aadce62] aycabta 2020-11-01 13:59:03 UTC

標準添付ライブラリ reline の Reline::LineEditor#em_exchange_mark で mark がない時に先頭で return して余計な処理をスキップするようにしています。

[faf8f216be] aycabta 2020-11-02 05:48:44 UTC

標準添付ライブラリ reline の Reline::LineEditor#editing_mode で @waiting_proc に保存する Proc オブジェクト内から @waiting_operator_proc を参照してましたが、このインスタンス変数を変更しても Proc オブジェクトから参照するものは変更したくないようで一旦ローカル変数に代入してからそれを Proc 内で参照するように変更しています。

[92b22db6a7] aycabta 2020-11-02 06:22:11 UTC

よくわかりませんが 266ffdde8eeb9b6626030653a927f033d7464cdf で追加した標準添付ライブラリ reline の Reline::LineEditor#wrap_method_call で vi mode の時に対応してないキーバインドの入力の処理をお skip するようにしています。

[2dc4aca8d1] aycabta 2020-11-02 05:55:15 UTC

標準添付ライブラリ reline の Reline::LineEditor#wrap_method_call で Method オブジェクトを呼び出す際に引数を要求しているかどうかを判定して arg キーワード引数を渡すかどうかを変更するようにしています。

[6be3b2da19] aycabta 2020-11-02 12:57:54 UTC

標準添付ライブラリ reline の Reline::LineEditor#vi_yank の実装が空だったのをちゃんと処理を追加しています。

[ba8e5f77eb] aycabta 2020-11-07 03:05:43 UTC

標準添付ライブラリ reline の vi mode での一部のコマンドの処理の範囲指定を修正しています。

[9750c27afc] aycabta 2020-11-08 12:56:27 UTC

標準添付ライブラリ reline でペーストした時のテストでペーストモードから抜けないことがあるそうでヘルパーメソッドを追加して内部状態を弄って戻すようにしています。

[48742614df] aycabta 2020-11-09 06:55:53 UTC

lib/reline/line_editor.rb で backward_char の alias_method 定義の位置を alias 先の ed_prev_char の直後に移動しています。

[dbfc1f30d5] aycabta 2020-11-09 06:59:52 UTC

標準添付ライブラリ reline に Reline::LineEditor#vi_movement_mode を #vi_command_mode の alias として追加しています。互換性のためとのこと。

[ff4656ee64] aycabta 2020-11-09 07:09:42 UTC

標準添付ライブラリ reline の Reline::VERSION を "0.1.8" に更新しています。

[e47e5db889] manga_osyo 2020-11-12 03:36:48 UTC

標準添付ライブラリ reline で "é" という文字を入力すると表示幅計算の対応が漏れててエラーになるのを修正しているとのこと。

[21f26018d2] manga_osyo 2020-11-12 04:42:29 UTC

e47e5db88943b7421f802f1fdfd34ba2224ec057 に対応する reline のテストを追加しています。

[c85035363f] aycabta 2020-11-14 13:52:38 UTC

標準添付ライブラリ reline で vi mode の時のコマンドの引数を得るのに引数を先に書くストローク? に対応するようにしているようです。

[3d0bcf1cc2] aycabta 2020-11-17 02:55:52 UTC

標準添付ライブラリ reline で文字の表示幅の計算で ASCII 文字の範囲の時のショートカットを追加して高速化しています。irb などではたいていの場合 ASCII 文字の範囲だけ入力することが多いのでききそうですね。

[fb2fda9a27] aycabta 2020-11-18 06:21:57 UTC

標準添付ライブラリ reline で case 文の when 節に正規表現を置いてマッチするかみてたのを、case 文の引数は指定せず when 節に String#[] でのマッチを直接書くようにしています。こっちのほうが高速らしい。

[b545ab219b] aycabta 2020-11-19 13:59:16 UTC

標準添付ライブラリ reline の Reline::LineEditor で複数行のペーストで大量の行をペーストした時に不要な部分の処理をスキップするようにしています。

[493f381c32] aycabta 2020-11-19 19:14:44 UTC

標準添付ライブラリ reline の Reline::VERSION を "0.1.9" に更新しています。

[a297565a4e] aycabta 2020-11-19 21:00:25 UTC

lib/reline/line_editor.rb の rerender メソッドを rerender_added_newline、rerender_changed_current_line、rerender_all_lines などの複数のメソッドに分割するリファクタリング

[b763c5cdf0] aycabta 2020-11-20 08:13:15 UTC

標準添付ライブラリ reline の Reline::LineEditor でカーソルが移動しただけの時には再描画しないようにしています。

[2910684c45] aycabta 2020-11-20 15:30:11 UTC

標準添付ライブラリ reline の Reline::LineEditor で動的に内容が変化するプロンプトで結果を 0.5 秒間キャッシュして再計算を省くようにしています。

[37a574b527] aycabta 2020-11-20 17:59:38 UTC

2910684c45399eed4dcebda72637a37858b74a62 の続きでバッファの行数が増えた時にはインターバルにかかわらずプロンプト更新するようにしています。

[7624f52757] aycabta 2020-11-21 04:08:53 UTC

b763c5cdf09fab247a7ca9526bb27a63cf03a81d の再修正で改行を入力した時にただのカーソル移動と判定されてしまっていたのを修正しています。

[c2bd5b84d0] aycabta 2020-11-26 10:13:34 UTC

標準添付ライブラリ reline でペーストで入力された時に最後に再描画を実行するようにしています。 bracketed paste ってなんだろう?

[0cf073088e] aycabta 2020-11-27 14:11:46 UTC

標準添付ライブラリ reline の Reline::LineEditor#rerender_all でバッファを全て処理してから再描画するようにしています。

[f4386413f1] Robert Schulze 2020-02-05 09:59:13 UTC

lib/reline/ansi.rb でバッファとして使う文字列を文字列リテラルで書いてたのを String.new に変更しています。このファイルにはマジックコメントでは frozen_string_literal: true は指定されてませんが、オプションでデフォルトを true にされるとここが動かなかったとのこと。

[15e23312f6] Samuel Williams 2020-10-03 05:42:04 UTC

coroutine/copy/Context.c で Fiber のための coroutine の copy 版実装の修正。マシンスタックの位置を取得するための実装を変更してスタックの内容をコピーする範囲? の修正をしているみたいです。

[3b5b309b7b] Samuel Williams 2020-11-09 21:21:14 UTC

coroutine/Stack.h というヘッダファイルを追加して coroutine 実装でスタック上にローカル変数として確保するかヒープ上に ruby_xmalloc() でメモリ確保するかを COROUTINE_PRIVATE_STACK というマクロの有無で変更するようにしています。どうやら copy 版の実装の coroutine ではスタックを使わずヒープに確保させるようにしているようです。

[a83a51932d] Marc-Andre Lafortune 2020-12-04 06:57:40 UTC

標準添付ライブラリ matrix の Matrix#** で引数が Integer の時の最適化を追加しています。 [ruby-core:89452] [Feature #15233]

[d2b7e1e4b2] Nobuyoshi Nakada 2020-12-05 05:46:34 UTC

引数のない関数の定義には明示的に (void) を書くようにスタイルを修正しています。

[5e58a9033f] Masaki Matsushita 2020-12-05 08:43:03 UTC

94d49ed31c39002335eeee65d42463139f561954 で追加した Socket.getaddrinfo と fork の組み合わせのテストでのタイムアウト値を減らしています。

[d0bd43c332] Benoit Daloze 2020-12-05 10:16:32 UTC

a3db08d7b6ff119223f77e3df00b4f6deac971e2 で rubyspec から SortedSet のテストを削除したのを revert しています。

[bb3d705819] Benoit Daloze 2020-12-05 10:36:22 UTC

mspec に spec/mspec/tool/wrap_with_guard.rb というツールを追加して、ファイル全体に ruby_version_is などの guard を追加したファイルを生成できるようにしています。

[9dbb2bfd73] Benoit Daloze 2020-12-05 10:40:00 UTC

bb3d70581972969a01c8ba7f2f3477ec92224f97 で追加したツールを使ったのでしょうが d0bd43c332f95e5f227ffcd4eb0e6f7bfa942b2a で復活させた rubyspec の SortedSet についてのテストに 3.0 以降で実行しないように ruby_version_is による guard を追加しています。