ruby-trunk-changes r60086 - r60100

今日は rename(2) の呼び出しを GVL 解放するようにする変更やぼっち演算子演算子つき代入を組み合わせた時の stack consistency error の修正などがありました。

glass: r60086 2017-10-01 22:44:49 +0900

String#index や String#include? の実装で str_strlen() を呼ぶ回数を減らす最適化。

svn: r60087 2017-10-01 22:44:50 +0900

r60086 で新規追加したベンチマークスクリプトsvn property 設定。

normal: r60088 2017-10-02 06:19:24 +0900

File.rename で rename(2) を呼ぶ時に GVL を解放するようにしています。 rename(2) は同じデバイス(filesystem というべきか)上でしか移動できないので普通は不要だと思いますが遅い filesystem 向けに GVL 解放して他のスレッドが動けるようにしたみたいです。そのかわりオーバーヘッドで若干遅くなるようです。

svn: r60089 2017-10-02 06:19:25 +0900

version.h の日付更新。

svn: r60090 2017-10-02 06:19:25 +0900

r60088 で新規追加したベンチマークスクリプトsvn property の設定。

normal: r60091 2017-10-02 06:29:27 +0900

NEWS ファイルに r60027 や r60088 での stat(2) や rename(2) を呼ぶ時に GVL 解放する変更について追記しています。 [Bug #13941] [Feature #13951]

ko1: r60092 2017-10-02 10:22:11 +0900

r60088 の rename(2) で GVL を解放する変更に Windows 環境(DOSISH が定義されている環境)のコードの追随がなかったので追加修正しています。

ko1: r60093 2017-10-02 10:57:27 +0900

r60092 の修正は src と dst という変数が消されたので再度追加してましたが、同じものが構造体 struct rename_args のメンバとして移動されてたので、そちらを参照するように再々修正しています。

nobu: r60094 2017-10-02 13:06:55 +0900

misc/ruby-additional.el の begin と end をマーカーとして使ってインデントを保存しつつヒアドキュメントでコードブロックを書く関数でマーカーを begin end から { と } のかっこを使うようにしています。これマーカーに使えるのか!?

glass: r60095 2017-10-02 14:29:11 +0900

複数の値 を yield する時の処理のリファクタリング、ですが後に r60098 で revert されています。

nobu: r60096 2017-10-02 15:46:41 +0900

r60094 で misc/ruby-additional.el のヒアドキュメントのマーカーを変更したのを使って ARGF のテストのヒアドキュメントを変更しています。なるほど "{#" と "};" とまとめることでマーカーにできるのか。

nobu: r60097 2017-10-02 15:46:42 +0900

ARGF.inplace_mode= で文字列に NUL 文字が含まれていた時に ArgumentError にするようにしています。 [ruby-dev:50272] [Bug #13960]

glass: r60098 2017-10-02 16:51:27 +0900

r60095 のリファクタリングを revert しています。最適化のための分岐まで消してしまっていたので遅くなっていたそうです。

nobu: r60099 2017-10-02 17:33:30 +0900

safe navigation operator (いわゆる「ぼっち演算子」)と代入記号つきメソッドの組み合わせで stack consistency error が発生することがある不具合を修正しています。 iseq_compile_each0() で演算子つき代入のコンパイル時の LABEL の挿入箇所が popped が真の時に間違ってたみたいです。うーんこれはわからん。 [ruby-core:83078] [Bug #13964]

nobu: r60100 2017-10-02 20:43:36 +0900

r60099 のテストで右辺値は評価されないはずなので raise 式にしています。