ruby-trunk-changes r62486 - r62500

今日は Random.bytes メソッドの追加のほか、MJIT 用のヘッダ生成の変更や MJIT で JIT コンパイルしたメソッドには DTrace を無効にする変更などがありました。

nobu: r62486 2018-02-20 10:23:23 +0900

Makefile.in の mjit_config.h の生成ルールで shell の関数定義をしてそれを使うように書き換えています。また環境(shell)によってうまくいかなさそうだなぁ。

svn: r62487 2018-02-20 10:23:24 +0900

version.h の日付更新。

nobu: r62488 2018-02-20 11:37:28 +0900

MJIT の実行時の JIT コンパイル時にコンパイラに渡すオプションの一部を mjit_config.h ヘッダ内で定義するようにしています。うーむビルド時と実行時のコンパイル時が入りまじってややこしい。

nobu: r62489 2018-02-20 12:15:33 +0900

MJIT で JIT コンパイル時には dtrace を無効にするため "probes.h" のかわりに "probes.dmyh" を include するようにしています。 JIT コンパイルしたメソッドには DTrace が効かないのか。

nobu: r62490 2018-02-20 13:05:42 +0900

mjit.c の system_tmpdir() で rb_w32_wstr_to_mbstr() が返すのは malloc(3) で確保された領域で、その文字列をさらに strdup() して返していたためメモリリークしていたので、直接 WideCharToMultiByte() を使うように書き換えています。

nobu: r62491 2018-02-20 14:32:06 +0900

mjit.c で JIT コンパイル時のコンパイラに渡すオプションのうち -nostartfiles, -nodefaultlibs, -nostdlib はコンパイラの種類に応じて必要なものだけ渡すように #ifdef で分岐するようにしています。

nobu: r62492 2018-02-20 14:32:07 +0900

mjit.c の system_tmpdir() で WindowsmacOS 以外の時に環境変数 TMP や TMPDIR を参照していましたが、これらの環境変数のほうを優先するように変更しています。ただし permission が適切かどうか(書き込み可能で world writable でない)はチェックするようにしています。 [ruby-core:85651] [Bug #14496]

nobu: r62493 2018-02-20 16:51:22 +0900

r62492 で環境変数で指定されたディレクトリの permission チェックをする check_tmpdir() で S_ISDIR や W_OK が未定義な Windows でビルドエラーにならないように修正しています。

nobu: r62494 2018-02-20 17:01:44 +0900

rb_uint2big(), rb_int2big() および rb_uint2inum(), rb_int2inum() の引数を VALUE, SIGNED_VALUE にしていたのを uintptr_t と intptr_t に変更しています。VALUE とポインタ型のサイズは同じはずなので、実際には同じことだと思いますが一応ってことですかね。 [ruby-core:83424] [Bug #14036]

normal: r62495 2018-02-20 17:44:38 +0900

r62446 で clockid_t の型チェックを RB_REPLACE_TYPE() のほうにまとめましたが、RB_REPLACE_TYPE() で AC_CHECK_TYPE() を使っていたのを AC_CHECK_TYPES() を使うように変更しています。 AC_CHECK_TYPE() のほうは HAVE_xxx マクロを定義しないので RB_REPLACE_TYPE() は AC_CHECK_TYPES() のかわりに使えなかったようです。 [ruby-core:85659] [Bug #14494]

nobu: r62496 2018-02-20 18:16:34 +0900

r62486 で Makefile.in の mjit_config.h の生成ルールで関数を定義して使うようにしたところで、Solaris で変数展開内にコマンドを書くのが NG だったみたいなので printf コマンドの引数で変数展開するようにしています。やはりうまくいかない環境があったか。

nobu: r62497 2018-02-20 18:26:38 +0900

Random.bytes メソッドを追加しています。 ありそうでなかった便利メソッド。 [ruby-core:37576] [Feature #4938]

nobu: r62498 2018-02-20 18:38:55 +0900

r62494 で rb_int2inum() と rb_uint2inum() の引数の型を定義では変更してましたが include/ruby/ruby.h の prototype 宣言で変更漏れしていたので追加変更しています。 [ruby-core:83424] [Bug #14036]

nobu: r62499 2018-02-20 18:39:41 +0900

mjit.c の convert_unit_to_func() で同じオブジェクトの RSTRING_PTR() や FIX2INT() を繰り返し呼んでいたので、ローカル変数に結果を格納して使いまわすようにしています。 verbose() も ruby のメソッドは使ってないので別の処理が挟まる可能性はないので安全に使いまわせます。

nobu: r62500 2018-02-20 19:08:27 +0900

error.c の rb_exc_new() や rb_exc_new_str() で rb_funcal() で例外クラスの new メソッドを明示的に呼んで例外オブジェクトを生成していたのを、直接実装の C 関数 rb_class_new_instance() を呼ぶようにしています。なんかこれ昔例外オブジェクトのインスタンス化については理由があったような…。と思ったけどあれは to_s だったかも。チケットがみつけられない……。 r30455 のあたりかな。なので関係なかった。