ruby-trunk-changes r54716 - r54733

今日は AIX での round(3) の不具合の回避や cygwin での不具合修正の他、細かな最適化などがありました。

odaira: r54716 2016-04-23 01:02:25 +0900

AIX で round(3) がおかしな挙動をすることがあるので numeric.c で定義されている round() を使うように configure で AIX の時はシステムの round(3) をチェックしないようにしています。

svn: r54717 2016-04-23 01:02:26 +0900

version.h の日付更新。

nobu: r54719 2016-04-23 09:02:25 +0900

r54716 の再修正。 configure.in の platform 固有の設定部分で ac_cv_func_round の設定を変更するように移動しています。

nobu: r54720 2016-04-23 09:03:37 +0900

cygwinコマンドラインの入力が UTF-8 でない時に文字が化ける不具合を修正しています。 cygwin では UTF8_PATH を定義しないようにしています。 [ruby-dev:49519] [Bug #12184]

nobu: r54721 2016-04-23 11:21:29 +0900

拡張ライブラリ date の rdoc 用コメントを Markdown 形式から RDoc 形式に変換しています。 [ruby-core:75136] [Bug #12311]

nobu: r54722 2016-04-23 12:23:28 +0900

error_print() の引数に rb_thread_t* を渡すようにして例外の表示の時の GET_THREAD() の呼び出し回数を減らすようにしています。

nobu: r54723 2016-04-23 12:23:51 +0900

プロセス終了時の ruby_cleanup() で TH_PUSH_TAG() と TH_POP_TAG() のペアが複数あったのを1つにまとめて、step という変数を導入して例外など発生時にはどのステップで発生したかをみて goto で次の処理を続けるようにしています。これ EXEC_TAG() から 1 がかえってきた後で再度 EXEC_TAG() の中の処理に飛び込んでもいいんでしょうか。 POP_TAG() してないから VM のスタック的に巻き戻る位置は大丈夫だけど EXEC_TAG() は1回に対して複数回の jump してもいいのかな。

yui-knk: r54724 2016-04-23 13:23:29 +0900

NEWS ファイルに DateTime#to_time の timezone の情報の扱いの変更について追記しています。 [ruby-dev:49521] [Bug #12189]

yui-knk: r54725 2016-04-23 13:27:12 +0900

NEWS ファイルに Time#to_time が timezone を保存するようにした変更について追記しています。先程の r54724 の DateTime#to_time のぶんもそうですが rails でこの挙動の変化の影響を受ける部分があるようなので、feature change として扱うようにしているみたいです。 [ruby-core:74889] [Bug #12271]

naruse: r54726 2016-04-23 16:15:25 +0900

include/ruby/ruby.h で定義している LIKELY(), UNLIKELY() に RB_ の prefix を付けるようにしています。そのうえで internal.h では LIKEKLY(), UNLIKELY() というショートカットというか別名のマクロも定義して ruby のソース内ではこれまで通り使えるようにしています。

naruse: r54727 2016-04-23 16:15:26 +0900

rb_mul_size_overflow() でオーバフロー時の分岐の条件に RB_UNLIKELY() をつけていたのをやめています。

naruse: r54728 2016-04-23 18:16:51 +0900

関数 vm_getivar() の定義に static inline と修飾子がついていたのを inline のみにしています。うまく inline 化されてない箇所があったそうです。コメントによると inline の意味は C99 で変わっているとのこと。 https://gcc.gnu.org/onlinedocs/gcc/Inline.html

nobu: r54729 2016-04-23 20:26:59 +0900

r54728 の vm_getivar() の宣言に再び static を追加しています。 最適化を off にした時に symbol が export されて link 失敗することがあるとのこと。 ChangeLog のエントリも revert するか revert した旨の ChangeLog を追加したほうがいいのではないかな。

nobu: r54730 2016-04-23 20:39:41 +0900

compile.c に LINK_ELEMENT の種類を判定するマクロ IS_INSN(), IS_LABEL(), IS_ADJUST() といったマクロを導入しています。

nobu: r54731 2016-04-23 20:43:52 +0900

r54731 に追加して IS_INSN_ID() というマクロも追加しています。

nobu: r54732 2016-04-23 21:17:36 +0900

r54728 および r54729 の vm_getivar() の inline 化について inline 修飾子は外して、呼び元で末尾呼び出しになるようにして末尾呼び出し最適化されるのを狙うように変更しているようです。

nobu: r54733 2016-04-23 23:12:27 +0900

VM の命令列時点での最適化を行なう iseq_peephole_optimize() で重複した trace 命令を削るようにしています。