ruby-trunk-changes r56827 - r56843

今日も Rational や Complex の最適化や標準添付ライブラリ net/ftpTLS 対応などがありました。

mrkn: r56827 2016-11-18 23:24:15 +0900

complex.c で nucomp_abs() や nucomp_arg() で使っていた m_atan2() や m_hypot() という rb_math_xxx() 関数を呼び出すだけのマクロを使わず直接対応する関数を呼び出すようにしてマクロ定義を削除しています。

mrkn: r56828 2016-11-19 00:04:36 +0900

rational.c で f_negate() というメソッド呼び出しを含む関数を削除してかわりに直接 rb_int_uminus() を呼び出すように最適化しています。

svn: r56829 2016-11-19 00:04:37 +0900

version.h の日付更新。

mrkn: r56830 2016-11-19 00:17:19 +0900

complex.c で f_negate() という関数をマクロを使って定義していたメソッド呼び出しを行う実装ではなく、引数のオブジェクトのタイプによって極力直接関数を呼び出し、該当しなかったらメソッド呼び出しに fallback するような実装に変更する最適化を行なっています。このため float_uminus() や nurat_uminus() に rb_ の prefix をつけて static をはずしています。

tadd: r56831 2016-11-19 00:31:05 +0900

NEWS ファイルに Rational の最適化について追記しています。 [ruby-core:75960] [Feature #12484]

nobu: r56832 2016-11-19 10:16:50 +0900

r50412 および r50413 のあたりで libruby のバージョン一致の確認をするようにした時に OS X では dlclose(3) が SEGV することがあるということで、閉じずに rb_fatal() でバージョン不一致のエラーにしていたのを、最近の OS X (macOS?) (El Capitan 以降とのこと) では直っているそうなので、通常のプラットフォームと同様に LoadError を発生させるように変更しています。 [ruby-core:78200] [Bug #12956]

nobu: r56833 2016-11-19 10:55:34 +0900

math.c のモジュール関数を定義している関数群の第1引数は利用されてないので unused_obj と名前を変更し、さらに rb_mMath を渡しているところで 0 を渡しています。別に rb_mMath を渡しても悪いことはないような気がしますが、変数参照のメモリアクセスすらも省略しようという最適化なのかも。

shugo: r56834 2016-11-19 11:29:23 +0900

標準添付ライブラリ net/ftpTLS サポートを追加しています。また Net::FTP.new などの引数に第2引数に Hash でオプションを渡す方式を追加しています。FTP over TLS かー使ったことないですね。というか少し調べると通信経路を暗号化した ftp というのは sftp (名前はよくみる)かと思ったけど sftp は FTPSSH で暗号化するもので SSL/TLS で暗号化したものは ftps と呼ぶそうです。

svn: r56835 2016-11-19 11:29:24 +0900

r56834 の行末の空白除去。

shugo: r56836 2016-11-19 11:37:39 +0900

test/net/imap の下にあった net/xx のテスト用の証明書などを test/net/fixtures に移動しています。

shugo: r56837 2016-11-19 11:40:33 +0900

標準添付ライブラリ net/ftp の Net::FTP.new の rdoc 用コメントに r56834 で追記した部分に不要な文が残っていたのを削除しています。

shugo: r56839 2016-11-19 13:19:35 +0900

標準添付ライブラリ net/ftp で Net::FTP#stop や Net::FTP::BufferedSocket#shutdown で TLS のソケットを graceful に停止するため処理を追加しています。

nobu: r56840 2016-11-19 13:32:52 +0900

Bignum の符号を返す rb_big_sign() という関数を追加して RBIGNUM_SIGN() や RBIGNUM_POSITIVE_P()、RBIGNUM_NEGATIVE_P() といったマクロでこの関数を利用するようにしています。

shugo: r56842 2016-11-19 16:02:32 +0900

r56834 で追加した Net::FTP.new のオプション引数でオプション名を passwd や acct など省略形式にしてたのを password や account などちゃんとした単語になるようにしています。

shugo: r56843 2016-11-19 20:01:55 +0900

標準添付ライブラリ net/ftp で TSPSocket や TCPServer を使っていたところを Socket や Addrinfo#listen を使うようにしています。