ruby-trunk-changes r55792 - r55800

今日は Windows 向けの pioinfo 構造体の内容推測の強化や Solaris でのビルド修正、Math.tanh の代替実装の高速化などがありました。

usa: r55792 2016-08-02 04:12:28 +0900

r54737 とかのあたりで VC14 から pioinfo という構造体型の中身が見えなくなったのでメンバのレイアウトを推測するためにコードからパターンを検出しているところで検出するパターンを追加して精度を上げています。またデバッグ用ライブラリとリンクすると関数内のアセンブラ命令が微妙に異なるのにも対応するようにしています。 あらためてこの検出のルーチンすごいことをしてるな。 [ruby-core:76644] [Bug #12644] [ruby-core:76644] [Bug #12631]

svn: r55793 2016-08-02 04:12:29 +0900

version.h の日付更新。

nobu: r55794 2016-08-02 10:47:21 +0900

vm_core.h の inline 関数 VM_ENV_FLAGS() と VM_FRAME_TYPE() は警告除去のため戻り値の型を long から unsigned long に変更しています。

nobu: r55795 2016-08-02 10:59:13 +0900

拡張ライブラリ tk の tcltklib_compile_info() という関数でビルド時の情報で決まる文字列を呼び出し毎の組み立てていたのを静的な文字列として宣言しておいてそこから文字列オブジェクトを作って返すようにしています。

nobu: r55796 2016-08-02 11:18:14 +0900

拡張ライブラリ tk の tcltklib_compile_info() で RUBY_VERSION を参照していましたが、拡張ライブラリは一度ビルドしたものが異なるバージョンで動く可能性があるので RUBY_API_VERSION のほうを参照するようにしています。 また extconf.rb を実行している ruby の定数をコンパイルオプション -D 経由でマクロに反映させてましたが普通にマクロ定義されてるのでそれは削っています。

nobu: r55797 2016-08-02 12:37:02 +0900

拡張ライブラリ socket で inet_ntop(3) がシステム標準ライブラリに存在しなかった時の代替実装が2箇所にそれぞれ static 関数として存在していたので1つにまとめて ext/socket/rubysocket.h に宣言を追加しています。 Solaris でのビルドの失敗の調査でそもそも HAVE_INET_NTOP のチェックなしで使っている箇所があって、それを修正するためにさらに代替実装を追加するより共有化したほうがいいだろということだったみたいです。 [ruby-core:76646] [Bug #12645]

nobu: r55798 2016-08-02 21:40:51 +0900

Math.tanhtanh(3) が存在しない時の代替実装で cosh(3) が Infinity を返した時を考慮して +1.0/-1.0 を返すようにしています。

nobu: r55799 2016-08-02 21:42:42 +0900

さらに Math.tanhtanh(3) の代替実装で exp(3) を使った実装 (sinh(x)/cosh(x) のかわらりに (exp(x*2)-1)/(exp(x*2)+1) を計算する)を追加しています。 sinh(3) と cosh(3) にシステムライブラリの実装があったらそっちを使ったほうが速いのでそれも残してますが、tanh(3) がなくて sinh(3) と cosh(3) があるというのは妙なので多分そっちも代替実装のはずで、代替実装の関数呼び出しを使うよりは exp() を1回読んで演算するほうが速い、ということだそうです。 [ruby-core:76657] [Feature #12647]

kazu: r55800 2016-08-02 22:18:47 +0900

空のディレクトリをまとめて削除しています。 git でみてると差分がわからないですが、最近 git-svn で作業している人が多いから svn リポジトリ的には空ディレクトリが残ってるんだけど気がつかないっていうことがあるんですよね。