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 のバッファを共有してて部分配列を参照している場合)はインクリメントしないようにしています。まあその場合はメモリ領域は無駄にはしてないですしね。