ruby-trunk-changes 2019-08-30

今日は Struct の属性名に代入記号でおわるものを禁止する変更や UnboundMethod#bind_call という bind+call の動作をするメソッドの新規追加などがありました。

[2c1e902cba] aycabta 2019-08-29 12:49:19 UTC

978ff1ff3a0db5455d591e151f212f4eff0f86c0 で tool/sync_default_gems.rb で reline の同期時に lib/readline.rb も更新するようにしていましたが、やっぱりやめています。

[79117d4a9b] Nobuyoshi Nakada 2019-08-29 13:06:05 UTC

a4a19b114ba94b8f28d5a91aee5d595a516006d5 の ObjectSpace::WeakMap の仕様変更について NEWS ファイルに追記しています。 [ruby-core:94101] [Feature #16035]

[01b723ba6d] Nobuyoshi Nakada 2019-08-29 14:06:27 UTC

あんまりちゃんと読んでないのですが parse.y で flip-flop のオペランドっていうのかな? にリテラルが書かれてたら警告を出すようにしています。

[e51dca2596] Jeremy Evans 2019-07-05 17:01:06 UTC

Struct で属性名として代入記号つきのものを指定すると参照と代入がこんがらがるので禁止するようにしています。 [ruby-core:69849] [Bug #11326]

[c52d38b7b6] git 2019-08-29 15:23:35 UTC

version.h の日付更新

[a8b310e14c] Kazuhiro NISHIYAMA 2019-08-29 15:35:18 UTC

tool/make-snapshot で環境変数 GZIP で指定されていたオプションを gzip に渡すように実装されてたのを gzip コマンドのかわりに 7z を利用する場合は渡さないようにしています。

[94b79bffb1] schneems 2019-08-29 18:01:43 UTC

定数 Math::E についての rdoc 用コメントで Euler's number という表現を追加しています。ネイピア数っていうんじゃなかったっけ?

[bdc36094e3] Aaron Patterson 2019-08-29 21:51:34 UTC

misc/lldb_cruby.py の lldb_inspect コマンドで T_NODE 型オブジェクトの情報表示を対応しています。

[0a9d74f8cf] Charles Oliver Nutter 2019-08-29 21:15:45 UTC

IO#pread および IO#pwrite についてのテストが CRuby でのみ有効なように RUBY_ENGINE == "ruby" の時のみ定義されるようにされてましたが、これは他の実装でも動くので(というか JRuby でってことでしょうけど)分岐の外にテストメソッド定義を動かしています。

[500149709b] Kazuhiro NISHIYAMA 2019-08-30 01:18:32 UTC

bundler および rubygems で標準添付ライブラリ pp の定数 PP を参照する前に明示的に require するようにしています。 Kernel#pp メソッドの呼び出し時には prelude.rb で自動 require が起きるようなメソッドが用意されているので大丈夫だけど PP はいきなり参照はできないので。

[83c6a1ef45] Yusuke Endoh 2019-08-30 02:01:25 UTC

UnboundMethod のインスタンスメソッドに bind してから call するのと同じ働きをする bind_call というメソッドを追加しています。うむ、非常にわかりやすい。また中間オブジェクト(Method)の生成を抑えるため若干メモリ効率的にも優れているようです。 [ruby-core:93337] [Feature #15955]

[09c940b17f] Yusuke Endoh 2019-08-30 02:10:29 UTC

83c6a1ef454c51ad1c0ca58e8a95fd67a033f710 で追加した UnboundMethod#bind_call についてのテストを rubyspec に追加しています。 [ruby-core:93337] [Feature #15955]

[c9fc82983c] Yusuke Endoh 2019-08-30 02:11:55 UTC

83c6a1ef454c51ad1c0ca58e8a95fd67a033f710 で追加した UnboundMethod#bind_call を標準添付ライブラリ pp で利用するようにしています。 [ruby-core:93337] [Feature #15955]

[43ab88c737] 卜部昌平 2019-08-30 02:20:43 UTC

昨日 9ef51b0b89a10c8c401cb9f2337e47a25be72cbe から 3df37259d81d9fc71f8b4f0b8d45dc9d0af81ab4 あたりまでの一連のコミットでメソッド定義関係の関数で渡す関数ポインタの引数の数ごとに overload して引数の間違いを検出できるようにした実装が古い clang でうまく動かないらしく、関数ポインタの型の引数の union につける __transparent_union__ という attribute の位置を調整しています。

[1191049436] Nobuyoshi Nakada 2019-08-30 01:13:45 UTC

tool/lib/vcs.rb の VCS#get_revisions のコメントでの返り値についての記述が古かったので、 4要素の配列が返ることとそれぞれの意味を追記しています。

[55f496c89b] Nobuyoshi Nakada 2019-08-30 01:14:15 UTC

tool/lib/vcs.rb の VCS::GIT に svn_revision というメソッドを追加して git-svn 経由のコミットの場合の subversion 側の revision 番号を切り出せるようにしています。

[e593d5b31a] Nobuyoshi Nakada 2019-08-30 02:18:23 UTC

tool/lib/vcs.rb の未初期化インスタンス変数の警告除去。

[98ccdd744a] Nobuyoshi Nakada 2019-08-30 02:23:06 UTC

tool/make-snapshot でタグ指定してパッケージ作成する時に利用する revision 番号としてそのブランチの最新ではなくタグに対応する revision を利用するようにしています。

[96b32aad93] Nobuyoshi Nakada 2019-08-30 02:26:48 UTC

tool/make-snapshot で自動生成系ファイルの生成後に削除するファイルのリストに ext/ripper/y.output を追加しています。

[ba9adcc175] Yusuke Endoh 2019-08-30 02:49:14 UTC

09c940b17fcbaec2f7d04e528b8869c8c51ff336 で追加した UnboundMethod#bind_call のテストを ruby 2.7 以降でのみテストするように guard を追加しています。

[1680bd4e4f] Kazuhiro NISHIYAMA 2019-08-30 03:01:45 UTC

83c6a1ef454c51ad1c0ca58e8a95fd67a033f710 で追加した UnboundMethod#bind_call の rdoc 用コメントの call-seq で第1引数を recv としてこれが receiver としてメソッドが bind されるというのがわかるように、というのと戻り値とは違うというのがわかるようにしています。

[e9da4f57b3] Nobuyoshi Nakada 2019-08-27 04:42:53 UTC

iseq.c のインデント修正、って書いてあるけど実際には switch 文の break の位置をブロックの中から外に出しています。無条件に入るブロックなので意味は変化してないはずですけどね。

[896d9f967b] Nobuyoshi Nakada 2019-08-27 04:43:16 UTC

iseq.c の rb_iseq_each_value() の変数 translator に const 修飾子をつけて、代入の条件分岐を初期化子の条件演算子にするようにしています。

[b870ca5879] Kazuhiro NISHIYAMA 2019-08-30 03:49:27 UTC

bundler のテスト用のヘルパー? Bundler::Resolver::SpecGroup#eql? で引数が同じクラスのインスタンスじゃない時の処理を追加。

[631db0de27] Nobuyoshi Nakada 2019-08-30 07:00:18 UTC

b870ca58791e576f5dbb263f54ae433a7f6d65ee の bundler の修正で 4419b5dbc2e3fe4ec3ac27e3d8b8a2b357f27426 で調査しようとしてた bundler のテストのエラーが解決したそうなのでデバッグ用のコードを削除しています。

[998ee350b9] Kazuhiro NISHIYAMA 2019-08-30 07:09:08 UTC

631db0de274ff3d00d47c3d3581d8af5592f8a14 で bundler のテストのデバッグ出力用コードを消した結果 PP の参照も消えたので 500149709b92ccb36396589a0c39afb3ff77bfb6 で追加した明示的な require "pp" も不要になったので削除しています。

[c45dd4d482] Maciej Mensfeld 2019-08-30 09:24:33 UTC

abe12d8b96be3c12618811f22ca01788366f99f8 でやってた VM 命令の methodref で返す Method オブジェクトを freeze する変更の続きでテストの追加と VM 命令のコメントをちょっと修正しています。これチケットをよく読むと省メモリについては "Freezing keeps a window of opportunity for introducing method reference caching..." とあって使いまわしについては将来の話で、あとサンプルコードで示されてるのは Method オブジェクトを手動でというか変数にキャッシュしておくと抑えられる(ので自動的にキャッシュされるようになるとこれだけ減る)という話でした。 https://github.com/ruby/ruby/pull/2267 [ruby-core:94349] [Feature #16103]

[8c7f4e8f8b] Takashi Kokubun 2019-08-30 13:03:36 UTC

mjit_worker.c の compile_c_to_o() で JIT コンパイルのために実行時にコンパイラ起動する時のオプションから CC_DLDFLAGS_ARGS も削っています。オブジェクトファイルへのコンパイル時だからリンカオプションはいらないってことかなぁ。これによって OpenBSD での CI が修正できそうとのこと。

[b0a291f6f6] Takashi Kokubun 2019-08-30 13:16:32 UTC

8c7f4e8f8b7f9e74195ea0eb51f39014fec342c0 の続き。 i686-linux ではうまくいかなかったのでコンパイラオプションを格納してる変数 CC_DLDFLAGS_ARGS から -nostartfiles を CC_LINKER_ARGS という新しい変数に分離して、この CC_LINKER_ARGS は compile_c_to_o() でも渡すようにしています。へー、オブジェクトの生成時にもこれいるのか…。