ruby-trunk-changes 2019-09-28

今日は Array#flatten がオブジェクトに変更が不要だった場合の最適化や、標準添付ライブラリ uri や net/http や shellwords などの細かい修正などがありました。

[03284fb911] Nobuyoshi Nakada 2019-09-27 12:07:53 UTC

テスト用のユーティリティ EnvUtil の assert_in_out_err でエラーメッセージ生成に FailDesc を利用するようにしています。

[79d5332a2d] Nobuyoshi Nakada 2019-09-27 12:12:27 UTC

VM 命令列へのコンパイル時の最適化で絶対に通らないブランチの命令を消す時に rescue や ensure のための catch tableも消すようにしています。 [ruby-core:95105] [Bug #16184]

[80d0b6f132] Nobuyoshi Nakada 2019-09-27 12:54:26 UTC

gems/bundled_gems の minitest と rake のバージョンをそれぞれ 5.12.0 と 13.0.0 に更新しています。

[2b6a9f3a1f] Jeremy Evans 2019-06-20 19:59:29 UTC

標準添付ライブラリ net/http でリクエスト送信時に Errno::EPIPE 例外が発生した場合にはそれは無視してレスポンスを読むようにしています。ふーむ、これはこのチケットの場合はそうだったんだろうけど一般的にレスポンスが帰ってきてるって言えるのかな。 [ruby-core:85508] [Bug #14466]

[43a16c98df] Jeremy Evans 2019-06-20 20:19:48 UTC

標準添付ライブラリ shellwords の Shellwords.escape で "+" をエスケープしてましたが、これは不要だったので削っています。 [ruby-core:85316] [Bug #14429]

[a2c26fe1c6] Jeremy Evans 2019-06-20 21:47:15 UTC

標準添付ライブラリ uriURI.encode_www_form_component で form component に使えない文字を実体参照に変換する時に "#" が不足していたのを修正しています。 [ruby-core:84868] [Bug #14358]

[869e2dd8c8] Jeremy Evans 2019-06-26 20:20:22 UTC

標準添付ライブラリ uriURI.escape と URI.unescape の deprecated 警告を $VERBOSE の設定によらず常に出力するようにしています。 [ruby-core:93372] [Feature #15961]

[a1fda16b23] Dylan Thacker-Smith 2019-09-27 16:24:25 UTC

Array#flatten で実際に展開する子 Arrayがなかった時に中間オブジェクトの確保を抑制する最適化。 https://github.com/ruby/ruby/pull/2495 [ruby-core:94501] [Bug #16119]

[707c48859e] git 2019-09-27 16:24:51 UTC

version.h の日付更新

[fd0e214183] Jeremy Evans 2019-09-27 16:43:31 UTC

NEWS ファイルにキーワード引数の扱いの変更と警告が出るパターンについて追記しています。

[7814b6c657] Jeremy Evans 2019-09-27 16:35:51 UTC

メソッド定義の引数に **nil と書いて明示的にキーワード引数を拒否するように定義されたメソッドにキーワード引数を渡した時の ArgumentError が出ないケースができてしまっていたようなので修正しています。

[d53cf85474] Jeremy Evans 2019-09-27 15:07:49 UTC

Struct.new の keyword_init キーワード引数を渡した時に誤って keyword splat の警告が出ていたのに対応しています。 Struct.new で rb_mod_module_eval() を直接呼んでいたのを rb_funcall_passing_block() を使ってメソッド呼び出し経由で module_eval を呼ぶようにしています。

[d474243e8c] Nobuyoshi Nakada 2019-09-28 04:49:49 UTC

NEWS ファイルのキーワード引数についての記述で Kernel のメソッド名のみ書かれてたところを Kernel#lambda のようにモジュール名も明記するように修正しています。 rdoc のクロスリファレンスを有効にするためみたいです。

[550a6a6bc1] Nobuyoshi Nakada 2019-09-28 04:51:27 UTC

NEWS ファイルのキーワード引数を受け取らないことを明示する **nil の記述についてマークアップを追加しています。

ruby-trunk-changes 2019-09-27

今日は C API からのメソッド/ブロック呼び出しでも keyword splat の変換と警告を有効にする変更、nil/true/false の to_s でも freeze された文字列を返すようにする変更、ISeq の GC.compact 対応の強化などがありました。

[41e3c204fd] Takashi Kokubun 2019-09-26 13:13:24 UTC

4a4c5028258e53f3395af29655a66bcef796fd73 で追加した MJIT の benchmark のループ回数などをちょっと減らしています。

[c4ec817a7a] Nobuyoshi Nakada 2019-09-26 13:56:32 UTC

rubygems の Gem::Specification#to_ruby のメソッド内に明示的な require "openssl" を追加しています。

[b29c68e687] Nobuyoshi Nakada 2019-09-26 13:57:25 UTC

508afe2c26737e0be60a72faa9d6740a06b0914c で rubygems がパッケージ作成時に常に環境変数をセットするようになったので rdoc のテストでこの影響を緩和するため ENV の保存と復旧を行うようにしています。

[5b9d646944] Jean Boussier 2019-09-26 11:41:41 UTC

9d0866c7d7b9cbe36a851744a37806e747e0e7a8 の Module#name の返す String が freeze されたものにしたことについてのテスト追加と NEWS エントリの行頭に "[" がこないようにする整形。

[0aa267f985] Jeremy Evans 2019-09-25 18:02:40 UTC

Kernel#open が第1引数に対して to_open というメソッドで変換するという機能(こんなのあったのか)で keyword splat が委譲された時の警告についてのテストを追加しています。

[760893d2f8] Jeremy Evans 2019-09-25 18:22:14 UTC

Proc#<< および Proc#>> による Proc 合成時の引数の委譲でも keyword splat の変換と警告が機能するようにしています。

[3959469f24] Jeremy Evans 2019-09-25 22:03:09 UTC

OpenSSL が IO オブジェクトに対して sysread/read_nonblock/syswrite/write_nonblock メソッドを呼ぶ時に rb_funcall() にかわり rb_funcallv_kw() を使ってここでも keyword splat の変換と警告が機能するようにしています。水も漏らさぬ対応……とはいえ openssl は default gem になっているので、これを upstream に当てるには古い ruby のバージョンへの対応が必要ですね。

[47d44510a3] Jeremy Evans 2019-09-25 22:32:35 UTC

拡張ライブラリ pathname から File.binwrite, File.write, File.readlines, File.open などのメソッドを呼ぶのに rb_funcallv() などを利用していたのも rb_funcallv_kw() を使うようにしています。

[6b52959ef7] Jeremy Evans 2019-09-26 00:14:17 UTC

Thread.new の引数をブロックパラメーターに委譲する時にも keyword splat の変換と警告が機能するようにしています。

[b193041b99] Jeremy Evans 2019-09-26 00:57:00 UTC

同様に Fiber#resume の引数を Fiber のブロックに渡す時の keyword splat の変換と警告が機能するようにしています。

[9556342838] Jeremy Evans 2019-09-26 00:59:41 UTC

6b52959ef76f6f19e50c6f80f00c08bb0daf5c7c の変更でのコンパイラ警告の抑制のため明示的な int へのキャストを追加しています。

[3b9cdc59ce] git 2019-09-26 15:02:18 UTC

version.h の日付更新

[876c5fe1b2] Nobuyoshi Nakada 2019-09-26 15:37:54 UTC

955634283862d9d1966de43c73ece15714afdae2 の追加修正だと思いますが thread_create_core() でキャストする args がそもそも int に収まっているかというのと RARRAY_LENINT() を使ってチェックするようにしています。

[81191afe8a] Nobuyoshi Nakada 2019-09-26 16:13:10 UTC

0aa267f985084e69c3e45cc3e94698eaacab5c36 で追加したテストで Kernel#open が再定義されていて別の実装が動いているケースというのを考慮するようにしています。警告メッセージの判定に使う Regexp の === メソッドを再定義することで内部から呼ばれたメソッドを判定するというすごいワザ。

[dd1e047fcb] Nobuyoshi Nakada 2019-09-26 17:31:39 UTC

NEWS ファイルのインデント修正とマークアップ記法の修正。

[451776f13d] Aaron Patterson 2019-09-12 22:02:23 UTC

compile_data_alloc() の struct iseq_compile_data_storage を取り出す部分とそれ以降を分けて compile_data_alloc_with_arena() という関数に切り出すリファクタリング。この storage を arena と呼んで後で分離しようとしているみたいです。

[bd017c633d] Aaron Patterson 2019-09-12 22:15:43 UTC

同様に compile.c の struct iseq_compile_data_storage の初期化処理と解放処理を new_arena() と free_arena() という関数に切り出しています。

[3cd8f76f7f] Aaron Patterson 2019-09-12 22:21:18 UTC

451776f13d24b0121b2bdfbe4eaafe7c74069c72 と bd017c633da4fe27c85b5dfc059b85d44a3b7afe の下準備を経て compile.c の struct iseq_compile_data_storage を ISeq 全体のもののほかに Node 毎の? arena というのを準備して使い分けることができるようにしています。というか実質 node のほうを使うように全部切り替えてるっぽいですね。この node のほうの arena には mark 処理できるオブジェクトのみ入れるということだそうです。つまりこれも GC.compact 対応の一環なわけですね。

[a618d64086] Aaron Patterson 2019-09-16 23:09:46 UTC

続いて compile_data_alloc_insn() では insn のほうの arena を使ってメモリ確保するようにしています。

[50fadefb7e] Aaron Patterson 2019-09-17 00:19:44 UTC

ここまでで insn arena と node arena にわけた ISeq コンパイル時のデータのうち node arena のほうを ISeq の mark 時に内容によって mark 処理するようにしています。これで mark 用配列にオブジェクトを入れる必要がなくなるというのがねらい。

[f639e04699] Aaron Patterson 2019-09-23 19:10:33 UTC

compile.c の iseq_add_mark_object_compile_time() を呼び出す位置を変更。 Write Barrier 追加できる位置(GC の mark 処理がそのオブジェクトに到達できるようになっている状態)に移動したとのこと。

[98d7583bfc] Aaron Patterson 2019-09-25 20:59:54 UTC

同じく compile.c の freeze_literal() で mark 用配列へ追加していたのを、呼び元で NODE に繋げた後で iseq_add_mark_object_compile_time() を呼ぶように修正しています。

[e197d9ca71] Aaron Patterson 2019-09-25 21:08:11 UTC

compile.c の iseq_add_mark_object_compile_time() で実際には mark 用配列にオブジェクトを追加せずに、Write Barrier のみ入れるようにしています。

[9b6460cacc] Aaron Patterson 2019-09-25 21:57:25 UTC

e197d9ca71570c980274ddd2cb6a32af6c00d95e で mark 用配列への追加は実際には行なわれなくなったので struct iseq_compile_data のメンバー mark_ary を削除しています。

[0846d48853] Aaron Patterson 2019-09-26 20:16:33 UTC

直近の変更で compile.c の iseq_add_mark_object_compile_time() は単に RB_OBJ_WRITTEN() を呼ぶだけになったので関数定義自体を消して呼び元で直接 RB_OBJ_WRITTEN() を呼ぶようにしています。

[4808afb360] Aaron Patterson 2019-09-26 20:19:11 UTC

同じく 98d7583bfcf1442c01ebe0288726cacef138d349 で compile.c の freeze_string() も単に rb_fstring() を呼ぶだけになってたので削除して、直接 rb_fstring() を呼ぶようにしています。

[f5e8d33761] Aaron Patterson 2019-09-26 21:57:45 UTC

cont.c が clang で文字列フォーマットの型で警告が出てたので明示的キャストを追加しています。

[31339ef4f2] George Claghorn 2019-09-11 19:47:20 UTC

拡張ライブラリ syslog の Syslog::Logger でインスタンス変数 @level を直接参照しているところで attr_reader の level メソッドを使うようにしています。 level メソッドを再定義された時にそれが効くようにするためみたいです。

[dd2068ac8d] Jeremy Evans 2019-09-26 16:09:30 UTC

rb_adjust_argv_kw_splat() の extern 宣言が各所で行なわれてるので internal.h に prototype 宣言するようにしています。

[37f9213f89] Jeremy Evans 2019-09-26 16:10:42 UTC

Enumerator::Generator#each の引数をブロックに渡すところも keyword splat の変換と警告が有効になるように rb_proc_call_kw() を利用するようにしています。

[293c6c8cc3] Aaron Patterson 2019-09-09 22:46:07 UTC

GC.compact で T_IMEMO 型オブジェクトの中身が rb_ast_t の場合の参照更新に対応して移動できるようにしています。

[660c7e050f] Jeremy Evans 2019-09-27 00:25:54 UTC

Enumerator::Yielder の keyword splat 変換と警告の対応や C からブロックを呼び出す API rb_yield_block()、vm_yield()、vm_yield_with_block() などの関数にも keyword splat の情報を伝播させる引数を追加する対応。このシリーズまだあるのか。

[366dd9d803] zverok 2019-03-10 11:09:59 UTC

標準添付ライブラリ fileutils の rdoc 用コメントでオプション引数をキーワード引数として渡す用例を書くように変更しています。

[1d99163aa5] Jeremy Evans 2019-07-10 03:41:51 UTC

標準添付ライブラリ fileutils の FileUtils.cp の実装で対象のファイルが socket (つまり UNIX socket?) だった時に require "socket" するようにして、作成するのに mknod ではなく UNIXServer を利用するようにしています。また fifo を作成する時に mode を保存するようにしています。

[02cd420505] Jeremy Evans 2019-07-14 17:17:57 UTC

1d99163aa59b637f1c14287135f26480df447e49 で追加したテストは JRuby では skip するようにしています。

[9494ef8b2d] Jeremy Evans 2019-07-31 19:57:21 UTC

FileUtils モジュールを include して使っている場合に verbose モードで実行されたメソッドはインスタンス変数を使おうとするため、メソッドの receiver が freeze されたオブジェクトだった場合に例外が発生してしまうので、特異メソッドとして使われてる時だけ利用してそうでない時は(正確には対象のインスタンス変数が存在しない時は)触らないようにしています。

[9792c9d183] Jeremy Evans 2019-08-23 21:50:34 UTC

1d99163aa59b637f1c14287135f26480df447e49 で追加したテストで dev ファイルのコピーのテストを File.chardev?/File.blockdev? のそれぞれに対応するファイルがみつかった時だけ実行するようにしています。

[06c35cfa65] Jeremy Evans 2019-08-23 21:52:12 UTC

標準添付ライブラリ fileutils の FileUtils.copy_entry で Windows における symbolic link の対応の修正。 [Bug #12123]

[d5355123cc] Kazuhiro NISHIYAMA 2019-08-24 12:19:31 UTC

標準添付ライブラリ fileutils でグローバル変数 $fileutils_rb_have_lchmod というのを使ってたのをクラス変数に変更しています。

[49b7805e9a] Hiroshi SHIBATA 2019-08-12 12:05:53 UTC

fileutils の gemspec ファイルで development_dependency に rake を追加してたのを消しています。かわりに Gemfile を使うとのこと。 upstream からの cherry pick ですね。

[2082a26dc7] Hiroshi SHIBATA 2019-09-26 09:32:26 UTC

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

[eff15a269f] Jean Boussier 2019-09-26 15:27:47 UTC

NilClass#to_s, TrueClass#to_s and FalseClass#to_s なども毎回オブジェクトを生成せず freeze された文字列を返すようにしています。 [ruby-core:94815] [Feature #16150]

[4d3502d57f] Nobuyoshi Nakada 2019-09-27 05:01:37 UTC

eff15a269fdc37d2b09cf1dfe8c1b1bf6e377a32 の変更についてのテストを追加しています。 [ruby-core:94815] [Feature #16150]

[8d0ff88727] Nobuyoshi Nakada 2019-09-27 05:06:07 UTC

主に aaron の一連の変更のインデントとスタイルの修正。

ruby-trunk-changes 2019-09-26

今日は var in pattern というような後置 in 記法? による短い pattern match 記法の導入や C 実装のメソッドでも keyword splat の変換の警告が出るようにする変更、ruby2_keywords メソッドの追加、Symtol#to_s と Module#name が freeze された String を返すようになるなど追加や仕様変更がありました。

[5b1fd79ad9] Nobuyoshi Nakada 2019-09-25 11:51:20 UTC

拡張ライブラリ io/wait の IO#ready? の rdoc 用コメントから戻り値が nil になるケースを削除しています。 r50262 の変更への追随とのこと。

[ae83dbe28d] Nobuyoshi Nakada 2019-09-24 00:03:38 UTC

標準添付ライブラリ reline の Reline::ANSI.getc で IO#select を使ってたのをやめて IO#getbyte を呼ぶようにしています。 getbyte だとブロックしない?
[追記]よくみると元のコードが IO#select が nil を返した時に next を呼んで busy loop してたので読めるようになるまで抜けないという意味だと同じ(どっちかというとより悪い)でした。これ break の間違いだったんじゃないかなぁ。[/追記]

[4755e23d2e] git 2019-09-25 15:27:40 UTC

version.h の日付更新

[80b5a0ff2a] Jeremy Evans 2019-09-25 18:18:49 UTC

C 実装のメソッドで引数の処理をするマクロ rb_scan_args() ではキーワード引数をいわゆるオプション引数(通常引数の最後に (主に) Symbol をキーとした Hash を渡す引数)と明確に区別していなかったのを、呼び元が keyword splat だったのか通常引数として渡したのかの情報を伝播させるようにして、ruby 実装のメソッドと同様に keyword splat と通常引数の相互の変換時の警告を出力できるようにしています。うわー、これはすごいな。これに対応して標準添付ライブラリやテストでも C 実装のメソッド呼び出しに明示的に ** をつけて keyword splat にする変更が行なわれてます。これは結構影響するコード多いかな。 https://github.com/ruby/ruby/pull/2460

[3b302ea8c9] Jeremy Evans 2019-09-21 16:03:36 UTC

Module#ruby2_keywords という private メソッドを追加して、public/protect/private のようなメソッド群と同様にメソッド名の Symbol を受け取ってそのメソッドは rest 引数で受け取った引数を別のメソッド呼び出しに splat 引数(*args のように配列を展開して渡す記法)で委譲した場合に、元のメソッドを keyword splat で受け取ってたらその属性を残して最後に呼ばれたメソッドでも keyword 引数として扱う? という仕様にするようにしています。これはつまり古い挙動のメソッドをこれをつけることで 2.7 でも保持できるようにするってことかな。実装でちょっとおもしろいのは、この仕様だと情報をメソッド呼び出しをまたがって伝播しないといけないので struct RHash のフラグに新しいビットを追加して Hash オブジェクト自体に元が keyword splat かどうかという情報を持たせるようにしています。なんかちょっと意図しない伝播がないか気になるけど。

[9b10698705] Nobuyoshi Nakada 2019-09-26 00:53:16 UTC

拡張ライブラリ io_console に IO#console_mode および IO#console_mode= というメソッドを追加。 IO::ConsoleMode というクラスも追加されていてこれをセットすることで raw mode, echo の on/off などの指定/取得が簡単にできるようにしているようです。こういうメソッドまだなかったんだっけ。

[5357ceb1ca] Nobuyoshi Nakada 2019-09-26 00:54:24 UTC

拡張ライブラリ io/console のカーソル位置の操作/取得などでクエリ用の文字列を String オブジェクト化するのを使う直前に行なうように遅延しています。しかしこれ使われないケースってエラーの場合であんまり多くないんじゃないかな…。

[1fe73dc860] Yusuke Endoh 2019-09-26 02:35:01 UTC

80b5a0ff2a7709367178f29d4ebe1c54122b1c27 の rb_scan_args_set() の変更で GCC の警告が出てしまってたそうで if 文の条件部をちょっと冗長に書きかえてます。うーん、この警告何を意味してるんだ…。 false-positive warning って書いてあるから実際には問題なかったみたいだけど。なんかこの警告の抑制のための変更は前もしていたような気がするな。

[3cee99808d] Nobuyoshi Nakada 2019-05-21 01:29:34 UTC

後置 in の記法による短いパターンマッチが単文で行なえる文法を導入しています。これは強力そう。けどまだ experimental なので使うと警告が出るようになっています。 [ruby-core:92733] [Feature #15865]

[93faa011d3] Alan Wu 2019-09-22 19:36:00 UTC

rb_fstring() に共有文字列の root になっている String オブジェクトのバッファを解放してしまう可能性があるという不具合があったのを修正しています。 struct RString の flags に新たに bit を割り当てて root になってるオブジェクトをマークしておくようにしています。 [ruby-core:94831] [Bug #16151]

[47a234954a] Alan Wu 2019-09-22 20:09:32 UTC

struct RString の flags のブットフラグの定数 STR_IS_SHARED_M をもうちょっと散文的(?)に STR_BORROWED という名前に改名しています。

[5d8f112505] Takashi Kokubun 2019-09-26 03:53:41 UTC

MJIT のバックグラウンドでコンパイルしている worker を一時停止する RubyVM::MJIT.pause メソッドのキーワード引数 wait: true の指定時に複数のコンパイルが動いていたらそれら全ての処理が完了するまで待つように修正しています。

[4a4c502825] Takashi Kokubun 2019-09-26 03:57:43 UTC

MJIT 関係の benchmark を追加? 分割? しています。なにやら専用の BenchmarkDriver::Runner のクラスを定義していていますね。

[6ffc045a81] Benoit Daloze 2019-09-08 09:53:27 UTC

Symbol#to_s が freeze された String を返すように変更しています。オブジェクト生成を抑えるためでしょうけど若干の仕様変更ではありますね。 [ruby-core:94815] [Feature #16150]

[8436b2717c] Daniel Berger 2019-07-11 13:20:43 UTC

rubygems の Gem::Package に attr_reader :gem を追加しています。

[508afe2c26] Ellen Marie Dash 2019-08-17 04:45:09 UTC

rubygems の gem パッケージ作成時のビルド時刻に環境変数 SOURCE_DATE_EPOCH が指定されてたらそれを使うことで再現テストができるようにするのをメソッドに切り出しています。また環境変数に設定されてなかった時は現在時刻を使いますが、同時に環境変数にもそれを逆にセットするようにして以降の一貫性を保つようにしているようです。 https://github.com/rubygems/rubygems/issues/2290

[8f2379b0c5] bronzdoc 2019-05-30 02:22:52 UTC

rubygems の Gem::Specification#ruby_code に OpenSSL::PKey::RSAインスタンスを渡すと渡されたオブジェクトの class (てことはたいてい OpenSSL::PKey::RSA)を返すようにしています。ううーん? なんだろうこれは。

[2e9c078707] bronzdoc 2019-05-30 02:23:59 UTC

同じく rubygems の Gem::Specification#ruby_code のインデントの修正のみ。

[d1c97ceb86] bronzdoc 2019-06-22 01:30:37 UTC

8f2379b0c5e182eb6e417431cbdcf2a0edfba71a で追加したテストの比較用の gemspec ファイル内容の変更。んんん??

[5c872b297c] bronzdoc 2019-06-22 01:37:09 UTC

と思ったら 8f2379b0c5e182eb6e417431cbdcf2a0edfba71a の Gem::Specification#ruby_code の変更は revert されて Gem::Specification#to_ruby で signing_key の OpenSSL::PKey::RSA オブジェクトをスキップするようにする修正が入っています。これならテストと対応が取れてますね(正しいのかどうかはよくわかりませんが)。

[f5248f6f50] Hiroshi SHIBATA 2019-08-09 07:20:50 UTC

.github/workflows/workflow.yml を追加して GitHub Actions で macOS での rubygems のテスト実行? を行うようにしています。が、これファイルパスの指定とかからみて rubygemsリポジトリからそのまま入っちゃったので ruby リポジトリ用ではないような気がします。

[01c90f17d9] Hiroshi SHIBATA 2019-09-15 02:37:30 UTC

f5248f6f504701960a2bbb7a51117060f7d66613 で入れた workflow ファイルの修正。

[ba8fb735cb] Hiroshi SHIBATA 2019-09-15 05:13:00 UTC

.github/workflows/ubuntu-rvm.yml を追加。これもたぶん rubygems から流入してきたものだと思います。

[769a28d7dc] Hiroshi SHIBATA 2019-09-15 05:32:30 UTC

ba8fb735cb3151ce48e388878da0565119222e95 で追加した .github/workflows/ubuntu-rvm.yml の修正。

[ad638a713a] Hiroshi SHIBATA 2019-09-17 09:06:50 UTC

さらに /.github/workflows/ubuntu-rvm.yml の修正。

[ea5b136155] David Rodríguez 2019-09-10 09:07:03 UTC

rubygems の依存関係チェックで bundler のバージョンチェックの修正らしいですがよくわからず。

[1fb44d2b8c] f 2019-09-20 13:38:10 UTC

lib/rubygems/platform.rb で archtecture 判定で linux の時に linux-xxx のような suffix 部分も抽出するようにしています。 libc のバージョンをつけるらしい。 https://github.com/rubygems/rubygems/pull/2918

[73633683c5] f 2019-09-20 15:54:48 UTC

1fb44d2b8c324afdb969c37df48b0ff5856fa65f の追加修正とテスト追加。あー linux-msul とかそういうやつか。バージョンっていうか種類ですね。gnu の時は無視するようにしています。

[6134fd7a64] David Rodríguez 2019-09-24 15:27:27 UTC

lib/rubygems/requirement.rb の不要なコメントを削除。

[4f87a1583d] David Rodríguez 2019-09-24 15:35:00 UTC

rubygems でいくつかバージョンに pre-release のバージョンをつけるときに ".a" を付加するように書いてたところを Gem::Requirement.default_prerelease というメソッドを参照するようにリファクタリング? しています。

[0b65a7a19e] bronzdoc 2019-09-26 01:31:57 UTC

rubygems のテストのエラーを修正。

[1eb503373e] Hiroshi SHIBATA 2019-09-25 12:34:55 UTC

rubygems の Gem::Installer#verify_spec で gem の依存関係が runtime なのか development なのかのチェックをよる厳密に行なって不正な type だったら例外にするようにしています。

[966915d807] Hiroshi SHIBATA 2019-09-26 05:06:37 UTC

0b65a7a19e949eece72a6a961a2642c0e5e19eb0 のインデントの修正のみ。

[54839f0173] David Rodríguez 2019-09-12 08:19:11 UTC

rubygems による Kernel#warn メソッドの再定義で keyword splat の対応を追加したところで JRuby 向けに分岐して従来のメソッド呼び出しをするようにしています。

[a2af473018] David Rodríguez 2019-09-12 07:44:22 UTC

54839f01736a8827be64c7f1720d226d37fa17d3 に関連して Kernel#warn の再定義のテストを追加。

[d4a86e407e] Hiroshi SHIBATA 2019-09-26 09:07:17 UTC

a2af47301834ede4892dbbe1b7da28317202657e で追加されたテストで警告メッセージのチェックの修正。

[2a490d5660] Hiroshi SHIBATA 2019-09-26 09:24:20 UTC

a2af47301834ede4892dbbe1b7da28317202657e で追加されたテストの再修正。 警告除去のため assert_match の呼び出しに明示的にかっこをつけるようにしています。

[c8f7168653] Hiroshi SHIBATA 2019-09-26 10:22:30 UTC

f5248f6f504701960a2bbb7a51117060f7d66613 や ba8fb735cb3151ce48e388878da0565119222e95 で rubygems から入ってきてしまった GitHub Actions 用の設定ファイルを削除しています。

[9d0866c7d7] Jean Boussier 2019-09-26 08:41:43 UTC

6ffc045a817fbdf04a6945d3c260b55b0fa1fd1e の Symbol#to_s の返す String を freeze されたものにする変更に伴ない Module#name が返す String も freeze されたものをそのまま返すようにしています。 [ruby-core:94815] [Feature #16150]

[1070456bb8] git 2019-09-26 11:25:42 UTC

9d0866c7d7b9cbe36a851744a37806e747e0e7a8 の行末の空白を除去。

ruby-trunk-changes 2019-09-25

今日は numbered parameter の表記(@1 -> _1) の変更と _1 の意味を文脈で変えるようにする仕様変更などがありました。

[a1dcb9daa5] Kazuhiro NISHIYAMA 2019-09-24 12:52:23 UTC

GitHub Actions を使ってリリースパッケージのドラフト版を作る設定でアップロードする時のファイル名を ruby-x.y.z.tar.gz.draft みたいに拡張子の後に .draft と追加してたのを、ruby-x.y.z-draft.tar.gz みたいに拡張子の前につけるように変更しています。

[e73cc3eead] Nobuyoshi Nakada 2019-08-23 17:21:30 UTC

numbered block parameter の仲間でたぶん @0 を implicit block parameter として追加しています。がなんか implicit block parameter は numbered block parameter と競合するらしいのでなんか想像しているのとは違うかも。

[ea68bb914a] Nobuyoshi Nakada 2019-09-03 15:07:50 UTC

そして numbered blocks parameter の記法を @1, @2, ... から _1, _2, ... というアンダースコアではじまる記法に変更しています。意外と parser の実装というかルールも変わるんですね。

[0e84eecc17] Nobuyoshi Nakada 2019-09-24 09:25:32 UTC

numbered block parameter はブロックがネストしてるどのブロックのパラメーターになるのか問題ですが、とりあえずその時点で最内のブロックのパラメーターになるようになってたと思いますが、外のブロックで既に numbered parameter が使われていたら numbered parameter は書けないように SyntaxError を発生させるようにしています。

[5294ded681] Nobuyoshi Nakada 2019-09-24 23:23:18 UTC

拡張ライブラリ io/console のカーソル位置の操作についてのテストは Solaris 環境では skip するようにしています。 mysterious に失敗するとのこと。

[8e8dd88c80] git 2019-09-24 23:24:44 UTC

version.h の日付更新

[fc9eb5b9c1] Nobuyoshi Nakada 2019-09-25 00:33:10 UTC

拡張ライブラリ io/console のテストで子プロセス起動時の -I オプションにテスト実行中に load されてる io/console のパスと同じものを切り出して指定するようにしています。 うーむなるほど。どっちかというとテストのファイルが所属してる場所のほうがいいんじゃなかろうか(ruby 添付と gem 単独でディレクトリ構成が違いそう)。

[c60451d9cd] Nobuyoshi Nakada 2019-09-25 00:42:35 UTC

c60451d9cd8ff69095acf826b11ea01557cc9b8b で -I オプションに追加するディレクトリパスを uniq して重複を削るようにしています。

[ca58e83400] Kazuhiro NISHIYAMA 2019-09-25 00:48:02 UTC

53ed4fb37632789db69815bb9b9df0e3572779ef の io/console でのカーソル位置取得の実装でうっかり C の文字列リテラルで "\e" というエスケープシーケンスを書いてしまってましたが、これは標準では用意されていないのでコンパイラによってはうまく処理されないということで \033 に書き換えています。おー、そうなのか。 Solaris でのテスト失敗はこれが原因かも?

[c99fb0f41e] Kazuhiro NISHIYAMA 2019-09-25 00:48:34 UTC

やはりさっきのが Solaris での io/console のテスト失敗の原因だったようで 5294ded681992ced2ecbd31c814b63265d2f591e の skip を revert しています。

[e663299a5f] Nobuyoshi Nakada 2019-09-25 01:14:36 UTC

parse.y の lexer 処理で "{" のトークン処理するところのリファクタリング。 同じ "{" でも lambda のブロックの開始と Hash リテラルの開始とそれ以外のブロックの開始ではトークンが分けられてます。 tLAMBDA の時に early return してたのをやめて展開してい共通部分を使いまわすようにしています。 tLAMBDA の時に p->command_start = TRUE の代入が追加されるような気がする。けどこれはなんだろう。ブロックの開始位置とかでも TRUE にされてるし TRUE でよさそう。

[55e1e22b2d] Nobuyoshi Nakada 2019-09-25 04:01:03 UTC

numbered block parameter の _0 は廃止して、_1 だけ使われてたら _0 と同じ(つまり全 block parameter を配列で受け取る)ように扱うようにしています。おー。しかし従来の _1 として 1つめのパラメーターだけ使いたいと思ったらどうするんだろう。まあ _1[0] とすればいいわけですが。 [ruby-core:95074] [Bug #16178]

[33c5ad3154] Nobuyoshi Nakada 2019-09-25 04:51:49 UTC

55e1e22b2d44a8a1eca0f6ed2b11dc0f564f7192 で不要になった _0 の Symbol 用の組み込み ID を削除しています。

[112c9f1430] Nobuyoshi Nakada 2019-09-25 07:58:24 UTC

misc/lldb_cruby.py の lldb_inspect コマンドによる Regexp オブジェクト表示で余計な改行が入るのを削っています。

[3deeb3fd91] Koichi Sasada 2019-09-25 07:55:54 UTC

VMデバッグ用カウンタ群に obj_ary_extracapa というのを追加して、rb_ary_free() で Array オブジェクトの回収をする時に len と capa を比較して capa より len が小さい(空きがある) Array の個数を数えるようにしています。なにかメモリ利用の無駄をはぶく新しい最適化のアイデアの仕込みかな。

[6d578164f5] Koichi Sasada 2019-09-25 08:12:55 UTC

3deeb3fd914bc5604e84e7a41ec2b5193a560479 の obj_ary_extracapa カウンタのインクリメントのために capa を調べる時に ARY_SHARED_ROOT_P() をチェックして共有配列の root じゃない時(元となる Array のバッファを共有してて部分配列を参照している場合)はインクリメントしないようにしています。まあその場合はメモリ領域は無駄にはしてないですしね。

ruby-trunk-changes 2019-09-24

今日は Kernel#send, Kernel#public_send の keyword splat の変換対応などがありました。

[74e33662fe] Jeremy Evans 2019-09-23 15:44:38 UTC

Kernel#send や Kernel#public_send の実装でも keyword splat の通常引数への変換と警告が有効になるようにしています。

[e561e4a8f3] git 2019-09-23 16:28:48 UTC

version.h の日付更新

[14ba62d488] 卜部昌平 2019-09-24 02:44:41 UTC

cadfaacb2533d47d52dbb5dbefe724d7bf11112e で未使用になった変数の消し忘れを消しています。

[2366c68116] 卜部昌平 2019-09-24 02:47:04 UTC

clang の警告避けのため sizeof() 同士の除算で右辺の sizeof() をさらにかっこでかこむようにしています。なんの警告かなーと思ったら配列の要素数計算のため配列の sizeof() を要素の型の sizeof() で割るというケースを想定して型が違うと警告をしてたようです。すごいそこまでみるのか。

[244f7ec204] Nobuyoshi Nakada 2019-09-24 06:48:58 UTC

拡張ライブラリ io/console のカーソル操作の関数 console_goto() と console_move() の引数の x, y の順序を y, x に変更しています。 winsize は [row, column] なのでその順序に合わせるとのこと。

[10e3267c31] Nobuyoshi Nakada 2019-09-24 06:53:58 UTC

拡張ライブラリ io/console の console_goto() などのカーソル操作系の座標系で原点を 0 オリジンにするようにしています。

[0526366033] Nobuyoshi Nakada 2019-09-24 11:59:47 UTC

misc/lldb_cruby.py から commands という未使用のモジュールの import を削除しています。

[c5a97d995a] Nobuyoshi Nakada 2019-09-24 12:05:29 UTC

misc/lldb_cruby.py の Python 3 対応。 Xcode に含まれる lldb が利用する Python も 3 に移行したみたいですね。試してないけど。

ruby-trunk-changes 2019-09-23

今日は st.c の関数群の prefix を rb_st_ に改名する変更や tool/make-snapshot の作成するパッケージ再現性を高める変更などがありました。

[5f35b8ca30] Yusuke Endoh 2019-09-22 13:12:18 UTC

st_xxx() の関数名を全て rb_st_xxx() と rb_st_ を prefix にするようにしています。 st.c は元々外部の (public domain らしい)コードを持ってきてたものですが、ruby 内では既に大幅に改造が繰り返されていてオリジナルの st.c とは型も異なっているので両方使おうとする拡張ライブラリを書こうとすると関数名の衝突がおきるので改名しようということだそうです。互換性のため st_xxx のほうもマクロで置換するようにしています。型名も変えるのかな。 https://github.com/ruby/ruby/pull/2479

[7fe7dec7e5] Nobuyoshi Nakada 2019-09-22 12:56:58 UTC

tool/make-snapshot でパッケージの .zip アーカイブを作るための zip コマンドのオプションに -X を追加しています。 uid/gid と atime の情報を落とすようにするためのものみたいです。

[b0d24e262f] Nobuyoshi Nakada 2019-09-22 13:26:07 UTC

tool/make-snapshot に gzip 圧縮に 7z を使わないようにするオプション -no7z を追加…とあるのですがグローバル変数 $no7z を参照してるだけでセットしてるところがないんですよね…と思ったら shebangruby -s って書かれてたので、この -s オプションで自動的にセットされるようでした。はー、こんなオプションあったのか。

[d8221a54f2] Kazuhiro NISHIYAMA 2019-09-22 15:55:48 UTC

.zip パッケージを作るために 7z コマンドを使う場合 -mtc=off というオプションも追加しています。 NTFS のタイムスタンプの保存を抑制するとのこと。

[2afe86e4be] git 2019-09-22 16:04:25 UTC

version.h の日付更新

[642dbb962c] Nobuyoshi Nakada 2019-09-22 16:25:17 UTC

tool/make-snapshot の最初に環境変数 TZ を UTC にしておいてアーカイブファイルのタイムスタンプを UTC ベースにするようにしています。zip ファイルはタイムゾーンの概念がないらしい。

[cadfaacb25] Lourens Naudé 2019-07-20 01:42:10 UTC

Thread の生成時に thread local storage、ここでは Ruby の Thread オブジェクトが保持する Thread#[], #[]= などでアクセスできる Hash オブジェクトのこと、の初期化を実際にアクセスするまで遅延するようにしています。

[142efba93e] Nobuyoshi Nakada 2019-09-22 17:20:43 UTC

cadfaacb2533d47d52dbb5dbefe724d7bf11112e で追加した rb_thread_local_storage() の宣言の修飾子の順番の修正とスタイルの修正。

[934507472c] aycabta 2019-09-23 08:26:38 UTC

標準添付ライブラリ reline の Reline::ANSI.prep でその時点での入力の IO から読めるぶんは読みためておくようにしています。 stty 実行するとバッファが消えるのでその前に書かれてたぶんを救おうとしているのだと思います。

[b443bdbdb9] aycabta 2019-09-23 08:31:41 UTC

934507472c92ccada3f30be183fea5066427efda の再修正で IO#select の待ち時間を 0.1 → 0.001 に短かくしています。

[8487193b10] Nobuyoshi Nakada 2019-09-23 10:22:31 UTC

拡張ライブラリ io/console の POSIX 環境でカーソル位置を取得するのにクエリ文字列を書き込みする IO が書き込み可能なモードで開かれていなかったら無視するようにしています。

[9e4be78ea8] Nobuyoshi Nakada 2019-09-23 10:27:18 UTC

8487193b109ab8cecea74ff383b01b5ecce172c4 で追加した direct_query() の追加修正。 fd が 0、つまり標準入力だった時には特別にかわりに標準出力にクエリを書き込むようにしています。

ruby-trunk-changes 2019-09-22

今日は Module#class_variables の不具合修正や Kernel#Complex(), Kernel#BigDecimal(), Kernel#Pathname() などに変換が不要なときオブジェクトをそのまま返すようにする変更などがありました。

[7470f96565] Jeremy Evans 2019-08-09 23:44:43 UTC

Module#class_variables を Class/Module の singleton class に対して使うと、include している Module のクラス変数が漏れてくる不具合を修正。クラス変数をもつ Module を extend するとその Class/Module の singleton_class にもクラス変数が見えてしまうという問題で、一瞬これ仕様じゃないかな? と思いましたが参照はできない(class_variable_get では取得できない)ということで class_variables のみの不具合のようでした。 [ruby-core:54463] [Bug #8297]

[2e551356a7] Jeremy Evans 2019-08-07 16:01:33 UTC

Kernel#Complex(), #BigDecimal(), #Pathname() などの大文字で始まるオブジェクトの変換用メソッドで引数が元から変換したいクラスのインスタンスだったら変換処理を呼ばずそのオブジェクトをそのまま返すようにしています。 [ruby-core:50596] [Bug #7522]

[c020fd6aa8] git 2019-09-21 23:10:56 UTC

version.h の日付更新

[a0ce0b6297] Kazuhiro NISHIYAMA 2019-09-22 01:11:06 UTC

.github/workflows/draft-release.yml の make install と ruby -v の実行に if: always() というコマンド? を追加しています。2.4 ブランチで make check は失敗することがわかっているので、エラー時にもその後のこれらの処理を実行させようということだと思います。

[b4c328bebc] Yusuke Endoh 2019-09-22 02:55:00 UTC

2e551356a7a6e74ba07283e000ff16f5d1ea6506 で追加したテストで deprecated になって警告が出るようになった BigDecimal.new が使われてたので BigDecimal() を使うように修正しています。

[28eefb33c8] Yusuke Endoh 2019-09-22 07:21:26 UTC

rb_st_copy() という関数は常に struct rb_classext_struct の iv_tbl にセットするために使われているので、rb_iv_tbl_copy() という名前に変更して、関数内で iv_tbl へのセットまで含めて行なうようにリファクタリングしています。

[2272efa463] Yusuke Endoh 2019-09-22 07:35:50 UTC

st.c の st_add_direct_with_hash() を static inline 関数として宣言するように変更しています。 8f675cdd00e2c5b5a0f143f5e508dbbafdb20ccd の Transient Heap 対応時にうっかり公開関数にされてしまっていたようです。