Hatena::ブログ(Diary)

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

2017-02-25 ruby-trunk-changes r57708 - r57714

[][]ruby-trunk-changes r57708 - r57714

今日は Integer.sqrt の最適化などがありました。

nobu: r57708 2017-02-25 08:31:07 +0900

rb_big_isqrt() からおおまかな数値を推定する前処理の部分を estimate_initial_sqrt() という関数に切り出しています。 [ruby-core:79623] [Feature #13219]

svn: r57709 2017-02-25 08:31:08 +0900

version.h の日付更新。

normal: r57710 2017-02-25 11:31:03 +0900

NEWS ファイルに r57698 で String#-@ の実装が fstring を返すようになったことを追記しています。 [ruby-core:79747] [Feature #13077]

nobu: r57711 2017-02-25 11:59:47 +0900

.gdbinit の rp コマンドで Bignum を表示する時の処理を rp_bignum というコマンドに切り出して output/x でメモリのダンプとして数値部分を出力していたのを、上位バイト側から16進数で出力するように変更しています。

nobu: r57712 2017-02-25 13:13:42 +0900

bignum.c の bary_zero_p() で引数 xds に const 修飾子を追加しています。

nobu: r57713 2017-02-25 14:44:39 +0900

Integer.sqrt の最初のおおまかな数値を推定する処理(r57708 で estimate_initial_sqrt() として切り出された部分)の精度を改良しているそうです。 [ruby-core:79754] [Feature #13250]

nobu: r57714 2017-02-25 16:27:07 +0900

bignum.c で <=> や <=, ** などの演算子の ID を毎回 rb_intern() しているところがあったので、#include "id.h" して組み込みの ID を参照するようにしています。

2017-02-24 ruby-trunk-changes r57698 - r57707

[][]ruby-trunk-changes r57698 - r57707

今日は単項演算子の String#-@ が fstring を使うようにする変更や Integer.sqrt という整数平方根を求めるメソッドの追加などがありました。

normal: r57698 2017-02-24 10:01:23 +0900

String#-@ つまり単項演算子の - を文字列につけた時に dup+freeze するかわりに rb_fstring() を呼び出すようにしています。これにより頻繁に利用する文字列オブジェクトの slot を消費を抑えることができるように…とはいえリテラルなら "str".freeze で fstring 化できたと思うので、リテラル以外だと思うので、そんなにあるのかなぁ。という声を予想してかコミットログに詳しく use case が挙げられています。 [ruby-core:79663] [Feature #13077]

svn: r57699 2017-02-24 10:01:24 +0900

version.h の日付更新。

hsbt: r57700 2017-02-24 15:32:48 +0900

拡張ライブラリ psych を 2.2.3 に更新しています。 本体は変数名の spell の修正だけで、あとは gemspec ファイルで version を定数から取得するのをやめる変更などです。

hsbt: r57701 2017-02-24 15:48:55 +0900

拡張ライブラリ gdbm の gemspec ファイルを追加して default gem 化しています。 [ruby-core:79742] [Feature #13248]

hsbt: r57702 2017-02-24 15:50:43 +0900

fcntl の gemspec ファイルで gem 名が Fcntl になっていたので fcntl に修正しています。

hsbt: r57703 2017-02-24 16:39:37 +0900

標準添付ライブラリ rdoc を 5.1.0 に更新しています。 ChangeLog はこちら https://github.com/rdoc/rdoc/blob/master/History.rdoc#510--2017-02-24 parse 時に認識するタグ名の typo 修正や Windows でのエンコード関係の不具合修正などがあったみたいです。

hsbt: r57704 2017-02-24 16:55:50 +0900

doc/maintainers.rdoc と doc/standard_library.rdoc の r57701 で default gem 化した gdbm についての記述を移動しています。 [ruby-core:79742] [Feature #13248]

nobu: r57705 2017-02-24 17:36:16 +0900

Integer.sqrt という整数平方根を求めるメソッドを追加しています。 うーんなぜそんなものが必要なのか、と思いましたが、とても桁数の大きい整数平方根を求めようとすると浮動小数点数を経由すると精度が足りなくて変換する時点で情報が落ちてしまうので正確な値(結果が整数である場合でも)にならないという問題があり、それを回避するために専用の実装が必要だったということみたいです。なるほどー。 いつもの "Learn floating point." にならなかったということはなにか有力なユースケースが示されたのだと思いますが、チケットがとても長くてそれについてはよく読んでいません。 [ruby-core:79623] [Feature #13219]

nobu: r57706 2017-02-24 18:39:17 +0900

r57705 の続き。 Integer.sqrt に引数整数であることのチェックを追加しています。 [ruby-core:79623] [Feature #13219]

rhe: r57707 2017-02-24 20:33:06 +0900

r57384 で SecureRandom.raw_seed を SecureRandom.urandom に改名してましたが、Random.gen_random_openssl で raw_seed のほうをまだ呼んでいるところが残っていたので Random.urandom のほうを呼ぶように修正しています。 [ruby-core:61094] [Bug #9569]

2017-02-23 ruby-trunk-changes r57686 - r57697

[][]ruby-trunk-changes r57686 - r57697

今日は主に IO#read_nonblock, #write_nonblock などのドキュメントの整理がありました。

kazu: r57686 2017-02-23 00:46:43 +0900

Rational#floor, #ceil, #truncate, #round などの rdoc 用コメントのサンプルのコメント部分を Ruby のコメントとして記述するようにしています。 [ruby-core:79607] [Bug #13233]

svn: r57687 2017-02-23 00:46:43 +0900

version.h の日付更新。

nobu: r57688 2017-02-23 08:28:26 +0900

Rational#** で整数オーバフローによって Float になってしまった時に Float::INFINITY を返すように修正しています。 [ruby-core:79686] [Bug #13242]

nobu: r57689 2017-02-23 08:49:40 +0900

同じく Rational#** で分母のほうがオーバフローした時には 0 を返すようにしています。 [ruby-core:79686] [Bug #13242]

nobu: r57690 2017-02-23 10:15:27 +0900

IO#read_nonblock, #write_nonblock や Socket, OpenSSL::SSL::SSLSocket の同名のメソッドの rdoc 用コメントに exception: false を指定した場合の EOF に達した時の挙動について追記しています。 https://github.com/ruby/ruby/pull/1527

nobu: r57691 2017-02-23 10:54:13 +0900

拡張ライブラリ socket の BasicSocket#recv_nonblock, #recvmsg_nonblock, Socket#recvfrom_nonblock, UDPSocket#recvfrom_nonblock などのメソッドの rdoc 用コメントで例外クラス名が間違っていたのを修正しています。

nobu: r57692 2017-02-23 11:00:28 +0900

同じく IO, Socket, OpenSSL::SSL::SSLSocket などの read_nonblock, write_nonblock メソッドの rdoc 用コメントで exception キーワード引数についての表現を修正しています。

nobu: r57693 2017-02-23 11:11:16 +0900

同じく IO, Socket, OpenSSL::SSL::SSLSocket の read_nonblock, write_nonblock の rdoc 用コメントでマークアップを追加しています。

nobu: r57694 2017-02-23 11:40:17 +0900

r57690 の rdoc 用コメントの修正は write_nonblock については余計だったので revert しています。 https://github.com/ruby/ruby/pull/1527#issuecomment-281867551

nobu: r57695 2017-02-23 13:10:41 +0900

defs/gmake.mk の TEST_DEPENDS の組み立てで循環依存関係ができてしまっていたのを修正しています。

nobu: r57696 2017-02-23 15:55:42 +0900

bignum.c で整数列の乗算の bary_mul() では配列サイズに応じて適切なアルゴリズム選択して利用するようにしていますが、その閾値の naive_threshold をマクロ NAIVE_MUL_DIGITS として切り出して共有するようにリファクタリングしています。

nobu: r57697 2017-02-23 16:14:29 +0900

appveyor.yamlプラットフォーム(x64 のみ)とコンパイラの指定(vs?) の matrix 指定を使って外部ライブラリビルドなどで変数参照できるようにしています。

2017-02-22 ruby-trunk-changes r57678 - r57685

[][]ruby-trunk-changes r57678 - r57685

今日は例外発生時の標準エラー出力に出すバックトレースの向きを逆転する変更や Thread#fetch メソッドの追加、Rational/Complex/BigDecimal の close/dup の挙動の変更などがありました。

nobu: r57679 2017-02-21 23:51:22 +0900

rb_obj_clone2() で freeze されたオブジェクトの時の例外メッセージにクラス名を埋め込む時に PRIsVALUE を利用してエンコーディングを保持するようにしています。

nobu: r57680 2017-02-22 10:55:10 +0900

rb_obj_clone() と rb_obj_clone2() から共通部分を括り出すリファクタリング

svn: r57681 2017-02-22 10:55:11 +0900

version.h の日付更新。

nobu: r57682 2017-02-22 11:02:11 +0900

Rational や Complex の dup/clone が TypeError を発生させていましたが、これらも Integer や Float と同様に self を返すようにしています。 Rational や Complex って常に freeze されてましたっけ? 手元で試すと frozen? は false を返してるけど。けど破壊的メソッドはないから問題ないってことですね、多分。 r57680 でリファクタリングした immutable_obj_clone() を利用しています。 [ruby-core:79636] [Bug #13237]

nobu: r57683 2017-02-22 16:16:13 +0900

Thread#[] でアクセスできる Thread local storage の内容に別の Thread から取得する Thread#fetch というメソッドを追加しています。キーがない時は KeyError 例外を発生させるか、第2引数かブロックが渡されていたらそれを返すようにしています。 [ruby-core:78500] [Feature #13009]

akr: r57684 2017-02-22 16:31:25 +0900

バイナリのバイト列を含む正規表現をマルチバイト文字を含む文字列に対してマッチさせた時の警告メッセージに、正規表現バイナリであることが書かれてなかったので追記しています。 [ruby-core:78592] [Bug #13024]

nobu: r57685 2017-02-22 17:50:25 +0900

標準エラー出力が端末に出ている時に限り例外発生時などのバックトレースと例外メッセージの表示をいままでの逆順に、例外発生箇所に近いほうを下に出力するようにしています。つまり Python と同じ向きってことですね。これはなかなかでっかい変更ですね。まあでも多くの人が普段みているバックトレースはこれが出してるものじゃなくてログファイルに出力されているものでしょうからねぇ。 [ruby-core:56096] [Feature #8661]

2017-02-21 ruby-trunk-changes r57666 - r57677

[][]ruby-trunk-changes r57666 - r57677

今日は deprecated にした内部関数の整理やデバッグ/プロファイル用の隠し機能の追加などがありました。

yui-knk: r57666 2017-02-20 23:40:56 +0900

compile.c の compile_branch_condition() の NODE_LIT についてのコメントの内容が間違っていたので修正しています。

ko1: r57667 2017-02-21 04:12:52 +0900

r57664 で追加した gen_ivtbl_get() の NORETURN() マクロでの宣言が VC++ で動かなかったそうなので削除しています。

svn: r57668 2017-02-21 04:12:53 +0900

version.h の日付更新。

nobu: r57669 2017-02-21 10:28:30 +0900

r57667 で削除された NORETURN(rb_generic_ivar_table) ですが #ifdef __GNUC__ でくくる形で復活させています。

nobu: r57670 2017-02-21 14:16:49 +0900

internal.h に r54189 で削除されてた rb_compile_error_str() の宣言が残っていたので削除しています。

nobu: r57671 2017-02-21 14:17:41 +0900

rb_disable_super(), rb_enable_super(), rb_hash_iter_lev(), rb_hash_ifnone(), rb_str_associate(), rb_str_associated(), rb_clear_cache(), rb_frame_pop() などの内部的な関数で既に利用できなくなっているものを include/ruby/backward.h に DECLARE_DEPRECATED_FEATURE() というマクロを追加してビルドエラー時にメッセージを表示するようにしています。

nobu: r57672 2017-02-21 15:07:21 +0900

complex.c の rb_complex_set_real() と rb_complex_set_imag() も deprecated にしています。 Complex の内部を隠した時に廃止したんでしたっけ。そんな前でしたっけ…。

nobu: r57673 2017-02-21 15:07:22 +0900

error.c から rb_compile_error_with_enc()、rb_compile_error()、rb_compile_error_append() も include/ruby/backward.h に移動しています。

nobu: r57674 2017-02-21 15:16:49 +0900

variable.c から rb_generic_ivar_table() も nclude/ruby/backward.h に移動しています。これそもそも deprecated だったのか。

nobu: r57675 2017-02-21 15:16:50 +0900

include/ruby/intern.h の rb_autoload() も include/ruby/backward.h に移動しています。

ko1: r57676 2017-02-21 17:18:15 +0900

USE_DEBUG_COUNTER というマクロを 1 に定義するといくつかの VM関数にカウンタを仕込んで、呼び出された回数をカウントしておいて終了時にダンプするようにしています。ただし環境変数 RUBY_DEBUG_COUNTER_DISABLE が 1 に定義されていると出力は抑制されています。デバッグというかパフォーマンス測定用ですかね。

svn: r57677 2017-02-21 17:18:16 +0900

r57676 で新規追加されたファイルの svn property 設定。