Hatena::ブログ(Diary)

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

2014-11-28 ruby-trunk-changes r48611 - r48629

[][]ruby-trunk-changes r48611 - r48629

今日は依存関係の生成の修正/再生成や拡張ライブラリの静的リンク時の方法の変更などがありました。

kazu: r48611 2014-11-27 21:26:39 +0900

NEWS ファイルに callcc の obsolete 化について追記しています。

akr: r48612 2014-11-27 21:51:04 +0900

tool/update-deps でソースディレクトリに生成するファイルとビルドディレクトリに生成するファイルを明確に分けてファイル名の prefix を変更するようにしています。 ファイルによっては両方に生成されたりしていたみたいなのでそれを修正しているのだと思います。

akr: r48613 2014-11-27 21:51:52 +0900

r48612 の ChangeLog エントリの追加。

akr: r48614 2014-11-27 21:52:17 +0900

r48612 で tool/update-deps を更新したので common.mk と一部 deps の依存関係の記述を再生成しています。

akr: r48615 2014-11-27 21:59:18 +0900

common.mk で miniprelude.c の依存関係から prelude.rb を消しています。 r48606 で利用しなくなったため。

kazu: r48616 2014-11-27 22:51:01 +0900

r48608 の ChangeLog エントリ内のインデントの調整。

kazu: r48617 2014-11-27 22:59:01 +0900

r48608 で追加された ArgumentError 生成のための関数 arugment_kw_error() → argument_kw_error() と typo を修正しています。おお、気がつかなかった。

akr: r48618 2014-11-27 23:42:05 +0900

tool/update-deps で make -p の実行時の標準出力/標準エラー出力へのメッセージをファイルに残すようにしています。

nobu: r48619 2014-11-28 00:39:39 +0900

r48615 の ChangeLog エントリの文法修正。

svn: r48620 2014-11-28 00:39:48 +0900

version.h の日付更新。

nobu: r48621 2014-11-28 01:21:51 +0900

enc/make_encmake.rb でファイル名の typo していたところがあったのを修正。

nobu: r48622 2014-11-28 04:58:04 +0900

r48588 で拡張ライブラリ continuation の初期化時に警告を発生させるようにしましたが、static-linked-ext で静的リンクされる時は警告が出ないように #ifndef で括っています。

nobu: r48623 2014-11-28 05:02:32 +0900

dmyext.c から dmyenc.c として Init_enc() を分離しています。 拡張ライブラリの静的リンク時に encoding は除くようにできるようにしているのかと思います。

nobu: r48624 2014-11-28 05:04:48 +0900

r48623 の変更の絡みだと思いますが dmyext.o と dmyenc.o をあわせたものを common.mk 内で DMYEXT という変数にしていたのを INITOBJS という名前に変更しています。

nobu: r48625 2014-11-28 05:10:26 +0900

configure に --with-setup オプションを追加して、拡張ライブラリを静的リンクする時に参照する ext/Setup ファイルを指定できるようにしています。 多分手動で Setup を編集するか、Setup.??? から Setup にコピーしてから configure && make するのがこれまでの手順だったのだと思います。[追記]OS名が Setup.??? の ??? にあればそれを使うようになっていたそうです。明示的に指定したり、自分で書いたものを指定できるようになったということですね。[/追記]

nobu: r48626 2014-11-28 05:38:51 +0900

r48590 で追記した README.EXT の typo 修正。

akr: r48627 2014-11-28 07:47:57 +0900

r48623 で dmyenc.c ファイルを分離したので make の依存関係も更新しています。

nobu: r48629 2014-11-28 12:39:18 +0900

file.c に 不要な #undef flock があったのを削っています。 [ruby-core:66503] [Bug #10551]

2014-11-27 ruby-trunk-changes r48593 - r48609

[][]ruby-trunk-changes r48593 - r48609

今日はキーワード引数のエラー時の ArgumentError のバックトレースの修正、TracePoint の :line イベントが重複して呼ばれることがある不具合の修正、TracePoint の再帰チェックの高速化、malloc_increase が契機の GC をフル GC ではなく LazySweep させるようにするメモリ管理のチューニングなどがありました。

そろそろ 2.2-preview2 が出てきそうな雰囲気です。

normal: r48593 2014-11-27 07:11:54 +0900

compile.c の iseq_set_arguments() から iseq->param.size 設定部分を iseq_calc_param_size() という関数として括り出すリファクタリング

svn: r48594 2014-11-27 07:12:05 +0900

version.h の日付更新。

marcandre: r48595 2014-11-27 10:03:46 +0900

標準添付ライブラリ matrix の rdoc 用コメントの typo 修正。 https://github.com/ruby/ruby/pull/772

ko1: r48596 2014-11-27 10:56:38 +0900

メソッド再帰ループの検出のために利用される Thread#[] のキー :__recursive_key__ を特別扱いして、st_table には入れず rb_thread_t の構造体に直接格納するようにして高速化しています。 [ruby-core:66282] [Bug #10511]

normal: r48597 2014-11-27 11:48:14 +0900

iseq.c の iseq_data_to_ary() に RB_GC_GUARD() によるコンパイラ最適化避けを追加しています。

nobu: r48598 2014-11-27 12:42:32 +0900

EnvUtil の assert_no_memory_leak で fiddle がないために LoadError が発生するケースに対応するために LoadError を捕捉して無視するようにしています。

nobu: r48599 2014-11-27 12:42:45 +0900

定数の再定義の警告メッセージのテストで assert_output を使って標準エラー出力をチェックしていたのを assert_warning を使うように変更しています。またメモリリークについてのテストのテストメソッドを分割しています。

nobu: r48600 2014-11-27 12:42:54 +0900

tool/generic_erb.rb で出力先のファイルが存在していた時に読み込む際に open に "rb" モードを指定して内容の変換がおこらないようにしています。

akr: r48601 2014-11-27 12:46:13 +0900

r48584 で TSort.tsort_each, TSort.each_strongly_connected_component, TSort.each_strongly_connected_component_from などのメソッドがブロックなしで Enumerator を返すようになったことを NEWS ファイルに追記しています。

akr: r48602 2014-11-27 12:48:42 +0900

Time.utc や Time.mktime などの 10個引数を受け付ける時に wday, yday, isdst(は Time.utc の時だけ), tz などの引数(第7から第10引数)は rdoc コメント上で dummy として利用されないように表記しています。 time_arg() をみると isdst は見てるみたいですけど、utc の時はその後 isdst が 0 に上書きされるので意味がないみたいです。

ko1: r48603 2014-11-27 13:20:14 +0900

malloc(3) がトリガーとなった GC の時にも LazySweep が有効になるようにしています。 malloc(3) でメモリ不足の時は極力メモリを回収して空きをつくるようにということですぐフルGCを実行するようになっていたのだと思いますが、今はメモリ使用量をみて GC 頻度を調節するようになっているのでこの時も Lazy Sweep するようにしているようです。このため回収が遅延してメモリ使用量が増える可能性がありますが、何か問題があったら報告してね、とのことです。2.2 の preview2 が出たらメモリ使用量を確認してみましょう。

nobu: r48604 2014-11-27 17:08:32 +0900

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

nobu: r48605 2014-11-27 17:10:21 +0900

template/prelude.c.tmpl で対象の prelude が空の時は余分なソースコードの生成を抑制するようにしています。

nobu: r48606 2014-11-27 17:12:16 +0900

miniruby 用の miniprelude.c は prelude.rb を含めないようにしています。さっきの r48605 はこの変更の伏線だったんですね。

nobu: r48607 2014-11-27 17:32:01 +0900

r48566 で template/prelude.c.tmpl で RbConfig::CONFIG の値の展開の機能を削ったので、prelude の生成に miniruby を利用する必要がなくなったということで、BASERUBY で生成するようにしています。

ko1: r48608 2014-11-27 19:15:47 +0900

メソッド呼び出し時のキーワード引数のエラーで ArgumentError が発生した時のバックトレースの位置が、メソッド定義の位置ではなくて呼び出しの位置までになってしまっていた不具合を修正しています。メソッド呼び出しの処理中に rb_raise() で例外発生させると呼び出し元のスタックフレーム上で例外発生させたことになってしまうので、例外オブジェクトを作って、一旦スタックフレームを積んでバックトレースをセットして rb_exc_raise() でその例外オブジェクトを投げるようにする raise_argument_error() という関数を追加して(というか argument_error() から拡張して)これを使うようにしています。

ko1: r48609 2014-11-27 20:06:51 +0900

TracePoint で :line イベントが同じ行で重複して呼ばれることがある不具合を修正しています。 "()" で式がまとめられている時に余分に trace 命令が作られていたようです。前の行と変更がなければ trace 命令は作らないように修正しています。 [ruby-core:65995] [Bug #10449]

2014-11-26 ruby-trunk-changes r48566 - r48592

[][]ruby-trunk-changes r48566 - r48592

今日はパッケージからのビルド時の余計な自動生成ファイルの再生成の抑制や、拡張ライブラリ continuation の obsolete 警告の追加、C の拡張ライブラリキーワード引数を取り出すための関数の公開 API 化などがありました。

akr: r48566 2014-11-26 00:22:01 +0900

template/prelude.c.tmpl で RbConfig::CONFIG の値の参照を展開する処理は、もうこの値の参照を使っていないとのことで削っています。

svn: r48567 2014-11-26 00:22:11 +0900

version.h の日付更新。

akr: r48568 2014-11-26 00:55:34 +0900

make prereq に preludes の依存をしていたのをやめて miniprelude.c に依存するようにしています。 tar パッケージからビルドする時に再生成されるのを防ぐためみたいです。

akr: r48569 2014-11-26 02:12:03 +0900

tool/make-snapshot で enc/trans/newline.c を生成するのを防いでいるそうです。手元だと newline.c はビルド時にビルドディレクトリ直下にできるみたいですね。

nobu: r48570 2014-11-26 03:43:47 +0900

taint で汚染されたオブジェクトが禁止されたメソッドに渡された時の例外メッセージで PRIsVALUE を使って埋め込むようにしてエンコーディングを保持するようにしています。

nobu: r48571 2014-11-26 03:43:58 +0900

同じく rb_secure() でも $SAFE の値で禁止されたメソッドが呼ばれた時の例外にメソッド名を埋め込む時に PRIsVALUE を使ってエンコーディングを保持するようにしています。

nobu: r48572 2014-11-26 03:44:07 +0900

さらに $SAFE=3 で定義されたメソッドを呼ぼうとした時に発生する SecurityError のメッセージでも PRIsVALUE を使ってメソッド名を埋め込むようにしています。

nobu: r48573 2014-11-26 03:44:12 +0900

メソッドの再定義時の警告メッセージに埋め込むメソッド名も PRIsVALUE を利用するようにしています。

nobu: r48574 2014-11-26 03:44:16 +0900

Object#inspect でインスタンス変数の内容を書き込むのにも PRIsVALUE を使うようにして、インスタンス変数名のエンコーディングも保持するようにしています。

nobu: r48575 2014-11-26 03:44:22 +0900

メソッド定義やら ISeq コンパイルなどの各所で rb_id2name() で C の文字列を取得して埋め込んでいたところを rb_id2str() を使って String オブジェクトを取得して PRIsVALUE を使って埋め込むようにしています。

nobu: r48576 2014-11-26 03:58:05 +0900

Module#remove_method で対象のメソッドがない時の例外メッセージでも PRIsVALUE を使って埋め込むようにしています。

akr: r48577 2014-11-26 06:09:34 +0900

make incs の依存関係から encdb.h と transdb.h を削除して all-incs の依存関係に移動しています。 tarball パッケージからビルドする時の不要な再生成を抑制するためみたいです。

normal: r48578 2014-11-26 11:03:06 +0900

iseq.c の iseq_s_compile_file() で入力ファイルを close していなかったのを修正しています。一応 RubyVM::InstructionSequence.compile_file で rubyメソッドから呼べる関数ですね。

ko1: r48579 2014-11-26 15:48:21 +0900

compile.c の iseq_set_sequence() で命令列へのコンパイル時に adjuststack 命令が不要だった時に jump 命令を使っていたのを nop を利用するようにしています。 ISeq.load でコンパイル結果をロードして最適化にかけると消えるので roundtrip テストが失敗する、というのを回避するためみたいです。 https://bugs.ruby-lang.org/issues/8543#change-50085

nobu: r48580 2014-11-26 17:01:56 +0900

proc.c で $SAFE のレベルを 4 と固定の値が書かれていたのを RUBY_SAFE_LEVEL_MAX を参照するように修正しています。既に 3 が最大の SAFE レベルになっているので間違ってたみたいですね。

naruse: r48581 2014-11-26 17:22:27 +0900

r48563 の net/http で SSL の SNI を使った時の不具合修正のテストを追加しています。

naruse: r48582 2014-11-26 17:22:35 +0900

r48563 の net/http の修正で Time.now を使ってセッションタイムアウトを測っていたのを Process.clock_gettime で時刻を取得するようにしてオブジェクトの生成を抑制しています。

nobu: r48583 2014-11-26 17:25:48 +0900

メソッド定義でキーワード引数名に大文字ではじまる名前などキーワードとして不正な文字列が指定された時に SEGV する可能性がある不具合を修正しています。 [ruby-dev:48742] [Bug #10545]

akr: r48584 2014-11-26 19:46:50 +0900

標準添付ライブラリ tsort で TSort.tsort や TSort.tsort_each などがブロックを渡されなかった時に Enumerator を返すようにしています。 [ruby-core:66270] [Feature #10508]

nobu: r48585 2014-11-26 19:54:35 +0900

Windows 版で標準のコンソールではないコンソールを利用している時に console のリセット処理をしないようにしているそうです。 [ruby-core:66471] [Bug #10546]

ko1: r48586 2014-11-26 20:00:19 +0900

GC のテストで test_latest_gc_info の一部を子プロセスに分離して実施するようにしています。 mysterious behavior を回避するためだそうです。

sorah: r48587 2014-11-26 20:32:16 +0900

r48585 の ChangeLog エントリの typo 修正。

tarui: r48588 2014-11-26 20:50:55 +0900

拡張ライブラリ continuation に require された時に警告メッセージを出して obsolete であることを表示するようにしています。 callcc は obsolete なので Fiber などの代替を利用するように移行しましょう。 [ruby-core:66486] [Feature #10548]

hsbt: r48589 2014-11-26 21:18:49 +0900

test/inlinetest.rb という未使用のテストのヘルパーを削除しています。

nobu: r48590 2014-11-26 22:28:15 +0900

C 実装のメソッドキーワード引数を取り出すための関数 rb_get_kwargs() と rb_extract_keywords() を公開 API にして README.EXT(.ja) にも説明を追記しています。 おお、これでキーワード引数を受け取るメソッドを拡張ライブラリで実装しやすくなりますね(2.2 からは)。

svn: r48591 2014-11-26 22:28:32 +0900

r48590 の README.EXT の追記部分の行末の空白除去。

tarui: r48592 2014-11-26 22:31:23 +0900

r48588 の require "continuation" での警告の追加で autoload のテストがこけるようになってしまったので autoload 対象のライブラリを continuation から date に変更しています。

2014-11-25 ruby-trunk-changes r48554 - r48565

[][]ruby-trunk-changes r48554 - r48565

今日は rake の更新(10.4.0)、net/http の SSL 接続時の SNI の不具合修正などがありました。また明日は開発者会議があり、そろそろ 2.2 の preview2 のリリースにむけて残件が話し合われるようです。

normal: r48554 2014-11-25 10:46:11 +0900

compile.c で非公開(メソッドになってない) iseq_build_from_ary_body() で ISeq#to_a でダンプした配列から ISeq を構築する時の callinfo の処理を iseq_build_callinfo_from_hash() という関数に括り出しています。

こういう時 "hoist out" って言うんですね。はじめて聞いた単語だ。

svn: r48555 2014-11-25 10:46:24 +0900

version.h の日付更新。

nobu: r48556 2014-11-25 12:14:45 +0900

r48551 で Init_process() で process.c 内の ID の定義を最初に行っておくようにしたのを、定数の定義の前に実行するように Init_process() と InitVM_process() に分離しています。 Process の定数が GC されてしまう現象が起きていたようです。はて、なんでだろう……。 というのは勘違いで、PROCESS::CLOCK_REALTIME は環境によっては RUBY_GETTIMEOFDAY_BASED_CLOCK_REALTIME というマクロ定義が実体の場合があって、そのマクロは id の ID2SYM() で実装されているので先に id が作られている必要があるそうです。 [ruby-core:66445]

kazu: r48557 2014-11-25 12:18:39 +0900

r48553 の ChangeLog エントリに更新した gem 名を追加しています。

nobu: r48558 2014-11-25 13:37:58 +0900

make update-gems で古い gem パッケージファイルを削除するようにしています。

nobu: r48559 2014-11-25 15:26:26 +0900

tool/vcs.rb で 1.9 以前の ruby で正しく時刻の offset を扱えるように手動で offset を調整するようにしています。

drbrain: r48560 2014-11-25 16:03:36 +0900

rake のバージョンを 10.4.0 に更新しています。

また rake のテストは minitest 5 を利用しているようで、 test/lib/minitest/unit.rb は minitest 4 ベースなので、利用している minitest 5 のメソッドの互換性のため名前空間を追加しています。

svn: r48561 2014-11-25 16:03:55 +0900

r48560 で追加された lib/rake/contrib/.document が改行を持たない空ファイルだったので空行を追加しています。

svn: r48562 2014-11-25 16:03:58 +0900

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

drbrain: r48563 2014-11-25 16:09:48 +0900

標準添付ライブラリ net/http で SNI (Server Name Indication) を使ってホスト名を元に利用する証明書を決める仕組み(多分)を使うと、Net::HTTP の接続を使いまわした時にしばらくたってから再度リクエストを投げた時に証明書エラーになるという不具合があるらしく、これを回避するため SSL Session がタイムアウトしていたら使いまわさないようにしています。 不具合自体は OpenSSL の不具合なんじゃないかということですが、この変更で対策できるそうです。 [ruby-core:66388] [Bug #10533]

ko1: r48564 2014-11-25 17:07:44 +0900

NEWS ファイルに Implementation changes というセクションを追加して Symbol GC や Incremental GC、および Hash のキーの文字列リテラルの freeze 化、rest 引数の効率化などを追記しています。 NEWS には新機能や互換性の問題などメソッドの追加/変更を伴なうものが主に書かれててこういうパフォーマンスや内部実装にかかわる点は書きにくかったのでまとめて追加したのだと思います。

akr: r48565 2014-11-25 22:39:19 +0900

NEWS の Process.spawn や exec の vfork(2) を使った高速化についての記述を Process の項目から r48564 で追加された "Implementation changes" のセクションに移動しています。

2014-11-24 ruby-trunk-changes r48550 - r48553

[][]ruby-trunk-changes r48550 - r48553

今日は Process.spawn などのメソッドオプションでの Symbol の不要な pindown の回避などがありました。

nobu: r48550 2014-11-24 12:43:59 +0900

marshal.c で内部的に呼び出すメソッド名の Symbol を毎回 ID から生成していたのを、変数名から自動的に名前を生成してチェックするようにマクロを定義しています。

nobu: r48551 2014-11-24 12:44:24 +0900

process.c の Init_process() で内部で利用しているメソッド名などの ID を毎回 rb_intern() せずに事前に static 変数に定義しておくようにしています。

nobu: r48552 2014-11-24 12:44:45 +0900

Process.spawn や exec での引数オプションのキーの Symbol やリダイレクトの指定のための Symbol (err: :out のような標準入出力の指定をするやつなど)をチェックする時に pindown しないようにしています。

kou: r48553 2014-11-24 23:03:54 +0900

gems/bundled_gems の test-unit を 3.0.7 に更新しています。