Hatena::ブログ(Diary)

PB memo このページをアンテナに追加 RSSフィード

2018-02-22 ruby-trunk-changes r62517 - r62526

[][]ruby-trunk-changes r62517 - r62526

今日は主に NEWS ファイルに過去の新機能についての追記をしているという平和な日でした。

mame: r62517 2018-02-22 02:06:23 +0900

Binding#source_location メソッドについて NEWS ファイルに追記しています。 [ruby-core:84435] [Feature #14230]

svn: r62518 2018-02-22 02:06:24 +0900

version.h の日付更新。

nobu: r62519 2018-02-22 10:58:29 +0900

Process.maxgroups のテストで Process.maxgroups が正の数を返すことをチェックするテストを追加しています。

nobu: r62520 2018-02-22 12:14:39 +0900

r62514 の NEWS ファイルの追記の typo を修正。

kou: r62521 2018-02-22 12:33:42 +0900

NEWS ファイルに KeyError#initialize, NameError#initialize, NoMethodError#initialize のキーワード引数の追加について追記しています。 [Feature #14313]

nobu: r62522 2018-02-22 13:13:02 +0900

NEWS ファイルの文に適宜改行を入れるようにしています。

nobu: r62523 2018-02-22 13:55:58 +0900

62522 で改行しすぎた? のを修正しています。行頭にチケット参照の [...] がくるとマークアップとして認識されてしまうのかも?

nobu: r62524 2018-02-22 14:06:46 +0900

r62523 と同様に NEWS ファイルで行頭にチケット参照がきていたのを前の行の末尾に移動しています。

nobu: r62525 2018-02-22 16:34:42 +0900

.gitignore にビルド時に生成する mjit_config.h を追記しています。 https://github.com/ruby/ruby/pull/1822

nobu: r62526 2018-02-22 16:34:43 +0900

.gitignore の MJIT 用のヘッダの arch 毎の minimize 版のファイルのエントリのファイル名パターンに min が抜けてたので修正しています。 https://github.com/ruby/ruby/pull/1822

2018-02-21 ruby-trunk-changes r62502 - r62516

[][]ruby-trunk-changes r62502 - r62516

今日は timezone 関連のテストの tzdata パッケージ更新によるエラーの対応などがありました。

nobu: r62502 2018-02-21 09:17:54 +0900

r62496 で make mjit_config.h の生成ルールの関数の修正の再修正で、マクロの定義が空っぽの時はコメントを書いて間違いじゃなくてわざと空にしていることがわかるようにしています。

svn: r62503 2018-02-21 09:17:54 +0900

version.h の日付更新。

nobu: r62504 2018-02-21 09:36:29 +0900

r62496 および r62502 の再修正。えーと、Makefile に書かれたエスケープつきの shell を読むのツラい……。変数展開の ${1+...} が何度も利用されてたので後のほうは普通の(?)変数展開にしています。

nobu: r62505 2018-02-21 09:55:22 +0900

vm_insnhelper.c で MJIT の実行時の JIT コンパイル時には #include "insns_info.inc" しないようにしています。 JIT コンパイル時には MJIT 用にヘッダに展開されたものを使うのでこっちは不要とのこと。これまで問題になってなかったってことは特に衝突とかはしないんですね。

nobu: r62506 2018-02-21 11:21:10 +0900

Time のタイムゾーンについてのテストが tzdata パッケージの更新によって挙動が変わってこけるようになったので、新しいパッケージの仕様にも対応するようにしています。日本にもいわゆる夏時間があったことがあるんですね。 [ruby-core:85373] [Bug #14438]

nobu: r62508 2018-02-21 14:37:23 +0900

62506 の timezone のテストの再修正。offset が間違ってたところがあったようです。 [ruby-core:85373] [Bug #14438]

hsbt: r62512 2018-02-21 15:31:39 +0900

doc/maintainers.rdoc のメンテナのいない拡張ライブラリ etc, fcntl, zlib について unmaintained と書いてたのを Ruby core team と表記するようにしています。 zlib については naruse さんがメンテナになったようです。 [ruby-core:84383] [Misc #14211]

hsbt: r62513 2018-02-21 16:12:17 +0900

LEGAL ファイルにリンク切れになってた URL を更新したり、Internet Archive に残っているアーカイブへのリンクを追記したりしています。 [ruby-dev:49802] [Bug #12762]

ko1: r62514 2018-02-21 17:14:51 +0900

NEWS ファイルに Proc#call の高速化と、ブロック引数に対する call の高速化について追記しています。 [Feature #14318] [Feature #14330]

ko1: r62515 2018-02-21 17:51:49 +0900

benchmark/driver.rb で実行する ruby のバージョンを取得するために -v オプションを使ってたのを --version を使うように変更しています。

nobu: r62516 2018-02-21 18:04:48 +0900

Process.maxgroups のテストで macOS では MAXGROUPS の制限の影響を受けない? みたいなのでテストを skip するようにしています。

2018-02-20 ruby-trunk-changes r62486 - r62500

[][]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 のあたりかな。なので関係なかった。

2018-02-19 ruby-trunk-changes r62473 - r62485

[][]ruby-trunk-changes r62473 - r62485

今日は主に thread_pthread.c のリファクタリングや cross compile 用のビルドプロセスの修正などがありました。

normal: r62473 2018-02-19 06:03:13 +0900

マクロ USE_SIGALTSTACK の定義は vm_core.h により詳しい条件分岐したものがあったので、thread.c で定義していたものは削除して #include "vm_core.h" するようにしています。

svn: r62474 2018-02-19 06:03:14 +0900

version.h の日付更新。

normal: r62475 2018-02-19 08:58:30 +0900

thread_pthread.c の MJIT 用スレッドを起動する rb_thread_create_mjit_thread() で pthread_create() 後に pthread_detach() を使っていたのを、pthread_attr_setdetachstate() を使って pthread_attr にフラグセットしてから pthread_create() するようにしています。こっちのほうが排他処理が減るからちょっと効率的だ、とのこと。

normal: r62476 2018-02-19 08:58:35 +0900

r62466 の再修正。 pthread のキャッシュの実装の register_cached_thread_and_wait() で rb_native_cond_t を破棄する rb_native_cond_destroy() の呼び出しを mutex ロックの解放後に移動しています。

normal: r62477 2018-02-19 09:23:00 +0900

thread_pthread.c の MJIT 用スレッドを生成する rb_thread_create_mjit_thread() で pthread_attr_destroy() を呼ぶようにしています。環境によってはこれを呼ばないとリソースの leak がある場合があるみたいです。

normal: r62478 2018-02-19 09:30:43 +0900

r61719 で pthread_attr_init() が利用可能かどうか分岐してたのをやめていましたが、これにより pthrea_attr_t のポインタ型の変数を使ってこれで一度自動変数へのポインタを格納してる書きかたが不要になった(元は分岐してたので NULL で初期化するケースもあった)ので直接引数に &attr のように書くようにしています。 [ruby-core:84758] [Misc #14342]

nobu: r62479 2018-02-19 10:45:17 +0900

template/configure-ext.mk.tmpl で変数 MINIRUBY を展開するところでクオートされていなかったので、cross compile 時にコマンドラインオプションつきになる時に正しく実行されないことがあった不具合を修正しています。 https://github.com/ruby/ruby/pull/1819 [ruby-core:85620] [Bug #14486]

nobu: r62480 2018-02-19 15:28:03 +0900

mjit.c のコメントの typo 修正。

normal: r62484 2018-02-19 18:28:51 +0900

r62466 の pthread cache の変更の再修正。 register_cached_thread_and_wait() でタイムアウトする時刻を end にせっとする処理を native_cond_timeout() という関数にまかせるようにしています。 USE_MONOTONIC_COND が真の時の処理が抜けてたので専用の関数を使うようにしています。

normal: r62485 2018-02-19 18:28:56 +0900

thread_pthread.c の mjit_worker() の警告メッセージの typo 修正。

2018-02-18 ruby-trunk-changes r62452 - r62469

[][]ruby-trunk-changes r62452 - r62469

今日は MJIT の cross compile 向けの修正や thread.c/thread_pthread.c のリファクタリングなどがありました。

kazu: r62452 2018-02-17 23:03:52 +0900

r62436 の test/rubygems/test_gem_server.rb の正規表現リテラルの警告除去の続き。 でくくって文字クラスにしていましたが、\s だけになったのでもう は不要だったので削除しています。

normal: r62453 2018-02-18 09:38:35 +0900

r62450 の再修正。拡張ライブラリ fiddle の型に応じた pack/unpack の指示子を持つ PACK_MAP の TYPE_VOIDP の時の値を PACK_MAP[TYPE_LONG_LONG] にしていましたが long long と void * のサイズが同じときだけにしています。

svn: r62454 2018-02-18 09:38:36 +0900

version.h の日付更新。

normal: r62455 2018-02-18 09:38:40 +0900

thread.c の変数引数の名前の時刻の終端を表すものを to から end に改名しています。

normal: r62456 2018-02-18 09:38:45 +0900

構造体 struct timespec で表現されている時刻の比較をする処理を timespec_cmp() という関数に切り出しています。

normal: r62457 2018-02-18 11:12:13 +0900

thread.c の update_timespec() の内容を timespec_update_expire() に委譲する変更と、r62455 と同様に to -> end に変数名を改名する変更です。

normal: r62458 2018-02-18 11:12:18 +0900

thread.c の do_select() から update_timespec() を呼ぶ時に渡す timeout をタイムアウトがある時のみ有効なポインタを渡すようにしています。

normal: r62459 2018-02-18 11:12:23 +0900

native_cond_timeout() でタイムアウトのチェックのために変数をわざわざコピーしていたところを同じ変数を使いまわすように書き換えています。処理を軽量化するためみたいです。また timespec_add() はオーバーフロー対策を含んでいるので冗長なチェックを削っています。

usa: r62460 2018-02-18 11:51:31 +0900

mjit.c で mswin 環境でコンパイラコマンドラインオプションcl.exe を使うかどうかで分岐するようにしています。

normal: r62461 2018-02-18 12:00:28 +0900

thread.c の double2timespec() が struct timespec をそのまま戻り値に持つようになっていたのを、引数に struct timespec のポインタを受け取るようにして、戻り値もそのポインタを返すようにしています。また引数の double を変換してオーバーフローした時に NULL を返すようにしています。Float::INFINITY が扱えるようにしているみたいです。

normal: r62462 2018-02-18 12:00:33 +0900

Thread#join の引数タイムアウトに負の値を渡した時に 0 が指定されたのと同様に処理するようにしています。

nobu: r62463 2018-02-18 14:10:52 +0900

mjit.c で可変長引数を扱うのに va_copy() を使うのをやめています。移植性に問題があって cross compile が難しかったみたいです。

nobu: r62464 2018-02-18 14:12:26 +0900

aclocal.m4 から r62463 で削除した tool/m4/ruby_check_va_copy.m4 の m4_include を削除しています。

nobu: r62465 2018-02-18 15:21:28 +0900

r62460 の mjit.c のコンパイラオプションの修正の追加修正。常に CC_DLDFLAGS_ARGS のオプションを最後に移動するようにしています。cl.exe 以外でオプションの順序は重要ではないので分岐は不要だったみたいですね。

normal: r62466 2018-02-18 16:54:10 +0900

thread_pthread.c にはシステムスレッド(pthread)をプールに管理しておいて Thread を頻繁に生成/削除した時に毎回 pthread を実際に生成/削除せずにすむようにする cache 用のリストがある(けどデフォルトでは有効になってない)のですが、fork 時にこのリストを排他するための mutex を再初期化するように修正しています。さらにリストのエントリである struct cached_thread_entry のメンバーも rb_nativethread_cond_t をポインタで持ってたのを埋め込みで持つようにしたり rb_nativethread_id_t を持つようにしたりと変更して、use_cached_thread() の中でより早めに th->thread_id にセットするようにしています。

kazu: r62467 2018-02-18 17:11:50 +0900

README.ja.md に Mac OS X という表記があったところを macOS に変更しています。

nobu: r62468 2018-02-18 18:23:47 +0900

thread_pthread.c のインデント修正のみ。

nobu: r62469 2018-02-18 18:33:21 +0900

mjit.c の compile_c_to_so() で --include-pch オプション引数部分を埋める処理が __clang__ が定義されている時だけ配列に用意されているので、代入部分も分岐するようにしています。