ruby-trunk-changes r65906 - r65927

今日は Proc/Method の合成を行うメソッド Proc#<<, Proc#>> などの追加や、Fiber の Windows 版の実装のスタック領域確保の方法の変更などがありました。

odaira: r65906 2018-11-22 05:39:09 +0900

ruby/config.h で定義するマクロが errno.h の errno の種類に影響を与えることがある(たぶん AIX で?)ので、ext/openssl/ossl.h や include/ruby/io.h で errno.h を #include する順番を ruby/config.h や ruby.h の後にくるように変更しています。

svn: r65907 2018-11-22 05:39:12 +0900

version.h の日付更新。

odaira: r65908 2018-11-22 07:44:24 +0900

AIX 上で configure で TRYLINK で実際にリンクしてみる時にコンパイラオプションに LDFLAGS の内容を渡すのを LIBPATH の後にするように移動しています。libruby-static.a の検索をシステムにインストールされているものをみてしまうのを避けるためとのこと。

samuel: r65909 2018-11-22 11:17:44 +0900

r65873 で cont.c で Fiber 用のスタックを Windows 版では malloc/free で確保するようにしていましたが、VirtualAlloc()/VirtualFree() というライブラリ関数? を使うように変更しています。また確保した領域に VirtualProtect() という関数でスタックの最上部(アドレス的には最初のほう?)に overflow 検出用の guard page を設定しているようです。

k0kubun: r65910 2018-11-22 12:39:07 +0900

r65905 の rubygems の Gems::RemoteFetcher のテストで MJIT を一時的に pause する変更を revert しています。 --jit-wait つきで実行した時の RubyVM::MJIT.pause がうまく効いてない? みたいでまずそれを修正するとのこと。

nobu: r65911 2018-11-22 14:51:40 +0900

Proc#* というメソッドを追加して、引数に Proc または Method オブジェクトを受け取って Proc の合成(f * g で f.call(g.call(args...) を実行するのと同等の Proc オブジェクトを生成して返す)ができるようにしています。使いどころあるかなぁ。 [ruby-core:44303] [Feature #6284]

nobu: r65912 2018-11-22 14:51:41 +0900

r65911 の続きで同様に Method#* も追加しています。 [ruby-core:44303] [Feature #6284]

nobu: r65913 2018-11-22 14:51:42 +0900

r65911 の続きで Proc#* で引数には Proc/Method だけでなく、call メソッドが呼べる任意のオブジェクトを受付けるようにしています。 [ruby-core:44303] [Feature #6284]

nobu: r65914 2018-11-22 14:51:43 +0900

さらに r65911, r65912 の続きというか、Proc#* というメソッド名はやめて Proce#<< および Proc#>> と Method にも同名のメソッドを追加して、これで合成できるようにしています。 f << g は先に g を呼んで、f >> g は先に f を呼ぶというふうに、合成する順序が逆にできるようにしているようです。 [ruby-core:44303] [Feature #6284]

kazu: r65915 2018-11-22 15:08:47 +0900

r65834 で .gitignore から *.s が消された件ですが、やはり revert して coroutine/ の配下の *.s のみ無視しないようにしています。 .gitignore で先頭に ! をつけると否定になるのか。

kazu: r65916 2018-11-22 15:08:49 +0900

.gitignore にサブディレクトリの作成用のタイムスタンプファイル /coroutine/*/.time も無視するように追加しています。

kazu: r65917 2018-11-22 15:08:50 +0900

.gitignore に r65587 あたりで導入された、テスト時だけ MJIT 用のサーチディレクトリをすりかえるための共有ライブラリを作るための mjit_build_dir.c を追加しています。

nobu: r65918 2018-11-22 15:09:07 +0900

r65735 で Makefile.in から切り出した tool/mjit_archflag.sh ですが Solaris の shell への対応で arch_flags が空の時に生成するヘッダが文法エラーになってたみたいです。 [ruby-dev:50674] [Bug #15319]

nobu: r65919 2018-11-22 16:53:07 +0900

Object#public_send が Refinements の影響を受けて呼ぶメソッドを変えるように修正? 変更? しています。 https://github.com/ruby/ruby/pull/2019 [ruby-core:89921] [Feature #15326]

nobu: r65920 2018-11-22 17:29:02 +0900

Object#respond_to? も Refinements の影響を受けてメソッドが呼べるかどうか判定するようにしています。うーん、確かに呼んだら呼べる位置では respond_to? も true を返して欲しいような気がしますねぇ。 https://github.com/ruby/ruby/pull/2020 [ruby-core:89922] [Feature #15327]

normal: r65921 2018-11-22 17:46:44 +0900

configure で coroutine の実装を選択する場合に $target_cpu だけみて 3b2bit か 64bit か決めてましたが、ポインタのサイズをみて決めるようにしています。64bit 環境で 32bit 版をビルドすることもあるので、とのこと。

normal: r65922 2018-11-22 17:46:51 +0900

pipe と socket をデフォルトで non blocking な fd を作るようにしています。 pipe は O_NONBLOCK を、socket は SOCK_NONBLOCK を指定するようにしています。 あーデフォルト non-blocking 化はまだ入ってなかったか。これにより fd のレベルで non blocking になるので、timer thread の削除に伴い pipe により通信しているところでデッドロックしてたりするのが解消される、ということなのかなぁ。 Ruby の IO 実装としては fd が non-blocking かどうかにあまり影響されないと思うので、C で実装している部分でのメリットのためだと思います。 [ruby-core:89950] [Bug #14968]

nobu: r65923 2018-11-22 18:18:40 +0900

r63030 で Array#map でブロックとして lambda を渡した時の引数に配列から自動的に splat されるようにしたのを revert して、ArgumentError を発生させるようにしています。lambda 内で return した時の挙動が変わってしまっていたとのこと。うう、これはどうしたらいいものか…。 [ruby-core:86362] [Bug #14639] [ruby-core:89734] [Bug #15285]

svn: r65924 2018-11-22 18:18:43 +0900

r65923 のインデントのタブを空白に展開。

normal: r65925 2018-11-22 19:13:21 +0900

r65922 の追加修正。 rsock_socket0() で rsock_make_fd_nonblock() の呼び出しが漏れていたので追加しています。 [ruby-core:89965] [Bug #14968]

naruse: r65926 2018-11-22 19:43:42 +0900

Dir.home のテストで環境変数 HOME の値ではなくて File.expand_path に "~username" を渡した結果を答として使うようにしています。環境変数は優先順位として後のほうなので /etc/password とかで設定されているのは File.expand_path のほうがちゃんとみているので。 [ruby-core:89911] [Bug #15324]

naruse: r65927 2018-11-22 20:03:19 +0900

rubyspec の socket のテストで r64355 あたりで macOSFreeBSD でテストのために謎の IO.select を追加していたところに solaris も追加するようにしています。