ruby-trunk-changes r52911 - r52927

今日はインデント除去つきのヒアドキュメントの新文法の追加、String の単項演算子メソッド +/- の追加、psych の更新などがありました。

naruse: r52911 2015-12-07 12:11:53 +0900

r52902 で追加した io/console の IO#getpass のテストで CI でのテスト失敗の対応でとりあえず prompt はなしにしています。

svn: r52912 2015-12-07 12:12:11 +0900

version.h の日付更新。

duerst: r52913 2015-12-07 15:50:52 +0900

.gitignore に cygruby*.def を追加しています。 Cygwin でのビルド時に作られるものかな? cygruby??.dll が作られるみたいなのでそれと一緒に生成されるのかも。

kazu: r52914 2015-12-07 23:08:44 +0900

IO#read_nonblock の rdoc 用コメントに exception 引数について追記しています。 IO#write_nonblock と合わせているそうですけど call-seq は options となっていますけど、キーワード引数だから任意のオプションを受け付けなくなっているんじゃないかな。 [ruby-core:71627] [Bug #11730]

kazu: r52915 2015-12-07 23:14:28 +0900

r52913 の ChangeLog エントリの typo 修正。

nobu: r52916 2015-12-07 23:39:52 +0900

ヒアドキュメントに '<<~' ではじまる文法を追加しています。待望のインデントを除去してくれるヒアドキュメントですね。もっともインデントがすくない行を基準に先頭の空白やタブを各行から除去してくれるようです。 [ruby-core:58243] [Feature #9098]

ko1: r52917 2015-12-08 00:10:00 +0900

単項演算子としての String#+@ と String#-@ を追加しています。つまり +"foo" や -"foo" ですね。 +str は str が freeze されていれば dup してそうでなければそのまま返す、-str は その逆で freeze されていればそのまま返しそうでなければ dup して freeze するというメソッドで、freeze されてない/された 文字列を余分なdupなしに作る方法のショートカットとして追加されたようです。frozen string literal への布石としてでしょうね。 [ruby-core:71898] [Feature #11782]

svn: r52918 2015-12-08 00:10:52 +0900

version.h の日付更新。

ko1: r52919 2015-12-08 01:30:31 +0900

r52917 で追加した String#+@ と String#-@ について NEWS ファイルに追記しています。

tenderlove: r52920 2015-12-08 01:58:10 +0900

拡張ライブラリ psych を 2.0.16 にアップデートしています。 1.9 系向けのコードの除去や line_width オプションのチェック強化などが入っているようです。

ko1: r52921 2015-12-08 02:23:18 +0900

RubyVM::InstructionSequence.translate というメソッドが呼べたらそれを呼んで結果を返す iseq_translate という関数を追加して、rb_iseq_new_with_opt() の末尾でこの関数を通すようにしています。つまり translate を定義しておくとそれ以降コンパイルされる命令列を動的に(って言うのかな)変更することができるエントリポイントを追加できるようです。これはアツい。ただ experimental なので新機能というよりデバッグ用の機能という位置付けのようです。

normal: r52922 2015-12-08 03:39:47 +0900

拡張ライブラリ socket の UNIXSocket#send_io, #recv_io の rdoc 用コメントに引数の説明を追記して、recv_io の klass と mode の引数を指定するテストを追加しています。

ko1: r52923 2015-12-08 03:44:45 +0900

ISeq の struct rb_iseq_struct::body::local_table に配列を確保する時にサイズが 0 だったらメモリは確保せず NULL で初期化するようにしています。

ko1: r52924 2015-12-08 03:46:27 +0900

iseq.c の iseq_load() 関数から ISeq を構築する時に compile option の peephole_optimization を FALSE にセットするようにしています。 peephole optimization を行なうと iseq が変更されるので、ロードしようと思った命令列をそのまま作ることができなくなってしまうからだそうです。

normal: r52925 2015-12-08 03:49:49 +0900

doc/extension.rdoc に C でキーワード引数を処理するのは高速ではないことを追記しています。 [Feature #11339]

ko1: r52926 2015-12-08 04:01:29 +0900

テストに r52921 で追加した RubyVM::InstructionSequence.translate を利用して rb_iseq_load() を使った ISeq load のテストを追加していますが、現在は難しいバグがあって通らないのでコメントアウトされています。 rb_iseq_load() は C API としては公開されていますが標準で呼べるメソッドがないのでちょくちょく壊れるので、不具合修正のたびに test/-ext-/iseq_load/test_iseq_load.rb で拡張ライブラリを利用したテストが追加されていましたがちゃんとしたテストがなかったので、網羅的なテスト用の準備でしょうか。ところで ISeq.compare_dump_and_load でエラー時に exit(1) しているのはまずいのでは(EnvUtil.assert_normal 内などで使うのかな)。

svn: r52927 2015-12-08 04:01:42 +0900

r52926 で追加されたファイルの svn property 設定。