Hatena::ブログ(Diary)

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

2014-10-24 ruby-trunk-changes r48115 - r48124

[][]ruby-trunk-changes r48115 - r48124

今日は昨日の object_id などの再定義の時の警告を修正した時に入った不具合の修正などがありました。

nobu: r48115 2014-10-23 23:18:32 +0900

r48114 で追加した C API rb_hash_delete() のためのテストで、削除した値を返すようにしてそれもチェック対象にしています。

kazu: r48116 2014-10-23 23:30:56 +0900

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

nobu: r48117 2014-10-23 23:58:29 +0900

make update-unicode の並列ビルド時の競合をさけるための timestamp ファイルの作成を追加しています。 [ruby-core:65842] [Bug #10415]

nobu: r48118 2014-10-24 01:02:46 +0900

r48111 で object_id の再定義の時にメソッドがあるかどうか検査するのに rb_method_boundp() を使っていましたが、これは rb_method_entry() を使うのでキャッシュの影響を受けてしまって、再定義したメソッドが呼ばれなくなるようになっていたので、search_method() を直接呼ぶように修正しています。 [ruby-dev:48691] [Bug #10421]

svn: r48119 2014-10-24 01:02:58 +0900

version.h の日付更新。

nobu: r48120 2014-10-24 01:23:46 +0900

r48118 の追加変更の部分のテストを追加しています。 [ruby-dev:48691] [Bug #10421]

nobu: r48122 2014-10-24 17:16:52 +0900

tool/make-snapshot で IO.popen や system の引数文字列ではなく配列で与えることでシェルを介さない起動をするようにしています。また make prereq の実行時に RUNRUBY や NULLCMD などの make の変数コマンドライン引数で渡すようにしています。 まあ、make-snapshot はリリース作業する環境とか snapshot パッケージを作る環境でしか使わないので、あまり環境依存の問題は踏まないんですけどね。

kazu: r48123 2014-10-24 20:43:50 +0900

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

kazu: r48124 2014-10-24 20:44:01 +0900

r47990 で SIGSEGV や SIGBUS などのシグナルハンドラ内でさらにシグナル受信した時に出力するメッセージを マクロ NOZ() を使って末尾のNUL文字を省くようにしたのについて、r47991 で writev(2) を利用するようにした時に writev(2) が利用できない時のほうで文字列長を strlen(3) で取得するようになっていたので修正しています。

2014-10-23 ruby-trunk-changes r48097 - r48114

[][]ruby-trunk-changes r48097 - r48114

今日も unicode_normalize 関係の変更の他、REXML の不具合修正、存在しないキーワード引数を渡した時に意図しないブロック呼び出しが行われる不具合の修正などがありました。

nagachika: r48097 2014-10-22 22:55:24 +0900

r45274 で OpenSSLSSL/TLS 設定のデフォルトを変更したのですが、OpenSSL::SSL::OP_NO_SSLv3 が未定義の場合にオプションが上書きされない状態だったので修正しています。 [ruby-core:65711] [Bug #9424]

nobu: r48099 2014-10-23 02:25:35 +0900

make の依存関係不足で lib/unicode_normalize/tables.rb の生成が走らないのを修正しています。 [ruby-core:65840] [Bug #10414]

svn: r48100 2014-10-23 02:25:50 +0900

version.h の日付更新。

nobu: r48101 2014-10-23 02:33:02 +0900

make の update-unicode と $(UNICODE_FILES) のルールと依存関係を反転させています。 ALWAYS_UPDATE_UNICODE=yes にしても毎回更新確認されないようになっていたそうです。 [ruby-core:65842] [Bug #10415]

nobu: r48102 2014-10-23 03:41:54 +0900

unknown_keyword_error() で受け付けないキーワード引数のエラーを処理すようとした時に Hash の要素の削除に rb_hash_delete() を呼んでしまっていたので、メソッドに渡されたブロックを yield してしまっていたので st_delete() を使って直接 st_table から削除するようにしています。不可解な挙動だなーと思ったらこんな罠があったとは。チケットのほうでは rb_hash_delete() をブロックを呼ばないように修正しようという案も出ています。 [ruby-core:65837] [Bug #10413]

duerst: r48103 2014-10-23 10:21:25 +0900

NEWS ファイルに String#unicode_normalize, String#unicode_normalize!, String#unicode_normalized メソッドの追加について追記しています。

normal: r48104 2014-10-23 10:36:55 +0900

fork のテストでエラーを発生した時に exit! で終了ステータスに反映させるようにしています。親プロセスでチェックしているけど意味がなかったんですね。

normal: r48105 2014-10-23 10:37:04 +0900

fork のテストで pipe からの読み込みを待つのに Timeout.timeout を使ってタイムアウトするようにしていたのを io/wait を使って IO#wait_readable でタイムアウトするように変更しています。高負荷な状態ではTimeoutを使うよりこちらのほうが性能への影響が低いので失敗しにくくなるだろうということみたいです。

normal: r48106 2014-10-23 10:50:45 +0900

insns.def の getlocal と setlocal 命令に最適化命令についてコメントを追加しています。

kou: r48107 2014-10-23 16:26:39 +0900

rexml のテストで assert_equal の expected と actual が反対になっていたところがあったので修正しています。

kou: r48108 2014-10-23 16:31:31 +0900

rexml のテストでテストメソッドやテスト用のデータファイルの名前が昔の REXML のバグ管理番号を元にしたものだったので改名しています。

kou: r48109 2014-10-23 17:23:10 +0900

標準添付ライブラリ rexml で Encode.default_internal が設定された状態で XML ドキュメントを読み込んだ場合に、読み込み元の IO の Encoding ではなくて default_internal が効いてしまっていたのを修正しています。 [ruby-dev:48686] [Bug #10418]

nobu: r48111 2014-10-23 19:13:29 +0900

object_id と __send__ などいくつかのとても基本的なメソッドは再定義すると警告が出るようにしているのですが、BasicObject を継承したクラスなど元々 object_id がないのに object_id を定義しようとするとこの警告が出てしまっていたので、元々メソッドが存在する時だけ警告するように修正しています。 [ruby-dev:48691] [Bug #10421]

nobu: r48112 2014-10-23 19:16:24 +0900

test/ruby/test_object.rb が ruby-moe.el で誤検出でハイライトがおかしくなるそうで、それを回避するため正規表現リテラルを %r 記法を使うように変更しています。

nobu: r48113 2014-10-23 21:36:25 +0900

unicode_normalize のテストで assertion のメッセージの生成を Proc オブジェクトに包んで遅延することで高速化を図っています。

nobu: r48114 2014-10-23 21:42:57 +0900

r48102 の受け付けられないキーワード引数のエラー処理時にブロックが呼ばれてしまう問題の再修正。 エラー処理のほうを変更するのではなくて、rb_hash_delete() はブロックの呼び出しをしないように変更しています。 [ruby-core:65861] [Bug #10413]

2014-10-22 ruby-trunk-changes r48074 - r48096

[][]ruby-trunk-changes r48074 - r48096

今日も unicode_normalize 関係のテストやビルドの変更の他、NaCl版で nacl_io をサポートするようにする変更や Etc.nprocessors の Linux でのメモリ使用量効率化などがありました。

nobu: r48074 2014-10-21 22:48:05 +0900

r48072 で追加した lib/unicode_normalize/tables.rb を自動生成するのでやっぱり消しています。

nobu: r48075 2014-10-21 22:48:16 +0900

common.mk で enc/unicode/data/*.txt にダウンロードしてくるファイルを UNICODE_FILES として変数にまとめています。あと r48069 で導入した after-configure というターゲットはやっぱりやめて after-update で処理するようにしています。

kazu: r48076 2014-10-22 00:02:05 +0900

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

svn: r48077 2014-10-22 00:02:17 +0900

version.h の日付更新。

yugui: r48078 2014-10-22 00:23:21 +0900

NativeClient の nacl_io という機能? ライブラリ? を利用できるようにしています。 nacl_io で検索するとこんなページがヒットしますね。 https://developer.chrome.com/native-client/devguide/coding/nacl_io ちゃんと読んでませんが、システムの実際のファイルシステムアクセスするわけではなくて、http やメモリ上のストレージを fs としてアクセスできるようにするものっぽいですね。ruby での変更は主にビルドプロセス関係のものだけですが。

svn: r48079 2014-10-22 00:23:35 +0900

r48078 の行末の空白除去。

kosaki: r48080 2014-10-22 03:46:33 +0900

r47939 で拡張ライブラリ etc の Etc.nprocessors で affinity 設定を考慮したコア数を返すようにした変更で、sched_getaffinity(2) に渡すバッファをでかく取って渡していたのを、実際にそんなに大量のコア数を持つシステムは稀なので小さく(32コアx2 で 64 から)スタートして足りなかったら倍々で増やしてリトライするようにしています。

kosaki: r48081 2014-10-22 03:46:46 +0900

拡張ライブラリ etc の Etc.nprocessors の Linux での affinity 考慮部分のコメントの文法修正。

kosaki: r48082 2014-10-22 03:48:03 +0900

r48080 でリトライのためのループの上限に等号が入ってなくてバッファサイズを最大値まで試さない状態だったので修正しています。

yugui: r48083 2014-10-22 09:32:03 +0900

r48078 での NativeClient 版での nacl_io の追加に伴なって起動時に fd=0,1,2 (標準入力標準出力標準エラー出力)の準備などの初期化処理を追加しています。

duerst: r48084 2014-10-22 18:00:04 +0900

unicode_normalize のテストを https://github.com/duerst/eprun/ から移植してきています。 Encode.default_external, default_internal を変更してるのでこのままだとちょっとまずそうですが、EnvUtil を使って書き直せばいいはず……。

duerst: r48085 2014-10-22 18:06:49 +0900

r48084 で追加したテストの不要な require の削除やメソッド名の変更追随など。

duerst: r48086 2014-10-22 18:12:14 +0900

同じく r48084 で追加したテストの NormalizationTest.txt のパスを ruby リポジトリにあわせて修正。

usa: r48087 2014-10-22 18:14:24 +0900

r48086 でのファイルパスの修正をソースディレクトリ以外でのビルド&テストに対応するように再修正しています。

nobu: r48088 2014-10-22 18:55:41 +0900

r48058 で common.mk で定義されると常に unicode のデータファイルを更新確認しようとするようにした変数ですが、コメントアウトされていたのは、環境変数や make の引数で設定できるようにするためということをコメントで追記しています。 なるほどー make の変数環境変数が自動的に参照できるから…。

duerst: r48089 2014-10-22 19:18:20 +0900

tool/unicode_norm.gen.rb で String#sub の置換結果の文字列でマッチした文字列を参照する "\&" を使っているのにシングルクオート文字列を使っていたため展開されていなかったので、ダブルクオート文字列リテラルにして、バックスラッシュによるエスケープを増やしています。んん、これでいいのかな、1ペア多いような気が……。いや、これで生成した文字列を *.rb ファイルに Rubyスクリプトの一部として出力するから1段多いのかな……エスケープ地獄ですね。

nobu: r48090 2014-10-22 19:55:13 +0900

r48084 で追加したテストの先頭で Encoding.default_external と Encoding.default_internal をグローバルに変更しているのを、他のテストにも影響してしまうので消しています。

usa: r48091 2014-10-22 20:00:14 +0900

lib/unicode_normalize に再び tables.rb を無視させるように svn:ignore property を設定しているようです。

usa: r48092 2014-10-22 20:03:23 +0900

r48084 で追加されたテスト NormalizationTest.txt を読む時に open のオプションエンコーディングutf-8 に設定して読み込むようにしています。

duerst: r48093 2014-10-22 20:33:36 +0900

r48088 で追記した common.mk のコメントの英語の文法修正。

yugui: r48094 2014-10-22 21:19:16 +0900

configure の --with-static-linked-ext オプションつきの時の $(EXTSTATIC) を make build-ext で exts.mk を起動する時に伝播させるようにしています。

yugui: r48095 2014-10-22 21:19:21 +0900

r47872 での PNaCl サポートの時の configure.in の typo 修正やコンパイラフラグ追加、libnacl_io のビルドのために c++ stdlib が必要なそうでコンパイラに clang++ を利用するように nacl/GNUmakefile.in に追記したりなど。

usa: r48096 2014-10-22 21:33:36 +0900

make srcs しないと lib/unicode_normalize/tables.rb が生成されなかったので prelude.c の依存関係に $(LIB_SRCS) を追加して make all で生成されるようにしています。

2014-10-21 ruby-trunk-changes r48056 - r48073

[][]ruby-trunk-changes r48056 - r48073

今日も主に unicode_normalize ライブラリビルド周りと、それに関連してダウンロードしてくるファイルの取得のタイミングなどの変更がありました。

nobu: r48056 2014-10-20 22:43:45 +0900

r48053 の tool/downloader.rb の -e オプションの挙動を変更したのはやめて、逆に make update-unicode で -e オプションをつけないようにしています。ネットワーク接続できない時にスキップするのはそのままなので毎回更新チェックはするという状態ですね。

usa: r48057 2014-10-20 23:21:18 +0900

mkmf.rb で生成する Makefile の install-rb ターゲットでコピーする時のファイルパスのセパレータを環境に応じて変換していたのをやめています。 COPY は ruby で処理されるのでファイルパスは環境によらず "/" 区切りが使えるため。

nobu: r48058 2014-10-20 23:58:06 +0900

さらに tool/downloader.rb に -e の反対の、毎回更新確認させるようにする -a オプションを追加して、ALWAYS_UPDATE_UNICODE が yes に指定されていたら -a オプションをつけるように make update-unicode のコマンドを変更しています。 で、 ALWAYS_UPDATE_UNICODE = yes はコメントアウトされた状態で common.mk に追加されているので、現状は結局ダウンロード済みのファイルがあったらそれを使うということですね。

usa: r48059 2014-10-20 23:59:33 +0900

lib/unicode_normalize/tables.rb の自動生成のコマンドをソースディレクトリ以外でビルドしている時も動くように $(srcdir)/ を付加しています。

usa: r48060 2014-10-21 00:01:13 +0900

r48023 で enc/prelude.rb で require "unicode_normalize" するようにしましたが LoadError が発生した時にそれを無視させるようにしています。 これでとりあえず unicode_normalize 回りが未完でも動くようになりました。

svn: r48061 2014-10-21 00:01:18 +0900

version.h の日付更新。

usa: r48062 2014-10-21 00:04:37 +0900

r48032 で .gitignore には追加されてましたが lib/unicode_normalize/tables.rb と enc/unicode/data/*.txt を無視させるように svn property にも追加しています。

nobu: r48063 2014-10-21 00:14:56 +0900

r48031 と r48054 で enc/unicode/data/*.txt から update-unicode ターゲットへの依存関係を追加していましたが、after-update というターゲットからの依存関係にしています。 config.sub や config.guess をダウンロードするターゲット(update-config_files)と同様なので、相応しそうですね。

nobu: r48064 2014-10-21 10:04:37 +0900

config.sub や config.guess と同様にそもそも configure で BASERUBY の利用可否を確認した時に enc/unicode/data/*.txt もダウンロードするようにしています。

naruse: r48065 2014-10-21 11:50:23 +0900

m68k アーキテクチャでのマシンスタックの GC のマーク処理を追加しています。 詳細わかりませんが stack_end の検出の差異の対応かな。 [ruby-core:65813] [Bug #10407]

nobu: r48066 2014-10-21 12:06:32 +0900

r48063 と同様に make の after-update ターゲットで update-gems も実施するようにしています。

nobu: r48067 2014-10-21 12:33:18 +0900

tool/make-snapshot で config.guess、config.sub や bundled gems をダウンロードしていたのを make after-update で実行するようにしたので Makefile の依存関係に追加してそちらにまかせるようにしています。

nobu: r48068 2014-10-21 12:55:08 +0900

そして make の after-update ターゲットのルールを Makefile.in と common.mk に分割しています。 update-unicode と update-gems は configure を使わないプラットフォームでも必要でした。

nobu: r48069 2014-10-21 14:17:32 +0900

やっぱり make after-configure というターゲットを追加して configure 後に enc/unicode/data/*.txt と bundled gems はここでダウンロードするようにしています。

usa: r48070 2014-10-21 15:16:39 +0900

enc/unicode/data/*.txt の生成のルールもソースディレクトリ以外でのビルドに対応するため $(srcdir) を付加しています。

duerst: r48071 2014-10-21 15:56:58 +0900

lib/unicode_normalize/normalize.rb で定義されている定数のマジックナンバーの意味について参照 URL をコメントで追記しています。 http://www.unicode.org/versions/Unicode7.0.0/ch03.pdf の 144,145p 参照とのこと。

duerst: r48072 2014-10-21 17:12:20 +0900

自動生成することにしていた lib/unicode_normalize/tables.rb をコミットしています。

duerst: r48073 2014-10-21 17:32:34 +0900

make update-unicode で enc/unicode/data ディレクトリを作成しておくようにしています。 git だと空のディレクトリがチェックアウト時に作られないのでその対策として。

2014-10-20 ruby-trunk-changes r48028 - r48055

[][]ruby-trunk-changes r48028 - r48055

今日は主に昨日追加された unicode_normalize のビルド周りやスクリプトリファクタリングなどでした。

nobu: r48028 2014-10-20 00:29:58 +0900

lib/unicode_normalize.rb と lib/unicode_normalize/normalize.rb の先頭に BOM 文字列がついていたのを削っています。おお、全く気がつきませんでした……。

nobu: r48029 2014-10-20 00:30:10 +0900

common.mk で srcs-enc の依存関係として unicode_normalize/tables.rb を追加して自動生成が走るようにしています。

svn: r48030 2014-10-20 00:30:11 +0900

version.h の日付更新。

naruse: r48031 2014-10-20 01:06:57 +0900

さらに enc/unicode/data/UnicodeData.txt から update-unicode への依存関係を追加しています。 無条件実行になってますが tool/downloader.rb 自体が更新時刻をみて不要なダウンロードはスキップするようにしてたと思うので毎回ダウンロードしてしまう問題はないと思います。

naruse: r48032 2014-10-20 01:07:16 +0900

.gitignore に自動生成される lib/unicode_normalize/tables.rb と enc/unicode/data/*.txt を追加しています。

nobu: r48033 2014-10-20 01:58:58 +0900

vm_insnhelper.c のリファクタリング。 vm_getivar() で条件分岐の両方で共通して行なわれていた代入を分岐前にくくり出すなどしています。

nobu: r48034 2014-10-20 02:18:41 +0900

make update-unicode で tool/downloader.rb に -e オプションを渡して既にファイルがあったらダウンロードはしないようにしています。 更新時刻もチェックしないんですね。

nobu: r48035 2014-10-20 02:23:31 +0900

variable.c の rb_ivar_get() と vm_insnhelper.c の vm_getivar() でインスタンス変数取得時に未初期化だったら警告を出力するところで、rb_warning() を呼び出す時に ruby_verbose のチェックを追加することで不要な rb_warning() 呼び出しをしないようにして高速化しています。 rb_warning() は中でも ruby_verbose のチェックをしているのですが、頻繁に通るところなので関数呼び出しのコストも削りたい、ということでしょう。 [ruby-core:65786] [Feature #10396]

nobu: r48036 2014-10-20 02:34:02 +0900

ruby_atomic.h で gcc の組み込み関数を利用する時の ATOMIC_OR() の呼び出す組み込み関数を変更しています。元の値を返さないといけないのにそうじゃない関数を使ってたみたいです。うーんこれ結構重大な違いだけど気がついてなかったのですね。 2.0.0 と 2.1 も同じ関数を使っていたので修正が必要でしょうか。

nobu: r48037 2014-10-20 02:34:09 +0900

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

nobu: r48038 2014-10-20 09:53:14 +0900

tool/unicode_norm_gen.rb が BASERUBY が 1.8 でも動くようにしています。 Enumerable#select と #collect を #grep に変更していますけど、多分 select も collect もあると思うので、多分メソッド呼び出しの "." が行頭にある文法が問題だったのかなと思います。

duerst: r48039 2014-10-20 12:37:39 +0900

r48027 と同様に lib/unicode_normalize.rb でメソッド名の変更に追随していなかったコメントアウトされたコード部分もメソッド名を追随させています。 ま、コメントだからいいかと思って触ってなかったんです。

nobu: r48040 2014-10-20 12:42:38 +0900

configure で BASERUBY が使えない時に tool/downloader.rb で config.guess と config.sub のダウンロードを実行してしまっていたので、利用できる時だけダウンロードするようにしています。

nobu: r48041 2014-10-20 12:42:42 +0900

tool/unicode_norm_gen.rb を BASERUBY が 1.8.5 でも動くように修正しています。 ブロック引数にSymbolを map(&:to_s) みたいに渡す記法や Enumerable のメソッドが Enumerator を返す機能を使わないようにしています。

nobu: r48042 2014-10-20 12:42:44 +0900

tool/unicode_norm_gen.rb で入出力のディレクトリ名がハードコードされていたのを、コマンドライン引数から受け取るようにして common.mk でディレクトリ名を書くようにしています。

duerst: r48043 2014-10-20 12:46:50 +0900

lib/unicode_normalize.rb の String#unicode_normalize! で unicode_normalize を呼び出す時の不要な self を削っています。

nobu: r48044 2014-10-20 14:00:46 +0900

lib/unicode_normalize/normalize.rb で UnicodeNormalize のメソッド内で UnicodeNormalize のメソッドを呼ぶのに明示的に receiver を指定しないようにしています。 また特異メソッドの定義をモジュール名を明記する方法じゃなくて def self.xxx のように定義するようにしています。

nobu: r48045 2014-10-20 14:00:58 +0900

lib/unicode_normalize/normalize.rb で Hash から Hash#first で取り出せる要素を削除するのに Hash#shift というメソッドがあるのでそれを使うようにしています。 Hash#shift 知らなかった……。

nobu: r48046 2014-10-20 14:01:02 +0900

unicode_normalize/normalize.rb で変数名にハンガリアン記法(?)で prefix が付いてたのをやめるようにしています。 がこれは後にハンガリアン記法でなくて Unicode の仕様上の名前なのだということで revert されています。

nobu: r48047 2014-10-20 14:20:39 +0900

r48035 でちょっと変更した(今回の修正と直接は関係ありませんが) vm_getivar() で未初期化インスタンス変数を取得しようとした時の警告メッセージへの変数名の埋め込みを %s ではなく PRIsVALUE で VALUE 型のまま埋め込むことでエンコーディングを保存するようにしています。

nobu: r48049 2014-10-20 15:58:16 +0900

error.c の set_syserr() で EAGAIN と EWOULDBLOCK が異なる値かどうかで条件コンパイルしていたところで、そもそも EWOULDBLOCK が未定義の時も考慮するように修正しています。

nobu: r48050 2014-10-20 16:02:20 +0900

io.c の maygvl_copy_stream_read() で ENOSYS が定義されている時の分岐の外に処理が書かれていたので正しく #ifdef の中に入れるようにしています。まあ switch 文で直上に goto 文があるので、到達できない文になっていただけで実害はなさそうですが。

nobu: r48051 2014-10-20 16:38:53 +0900

r48047 で追加した未初期化インスタンス変数の参照時の警告のエンコーディングのテストで default_external を UTF-8 に指定して実行するように EnvUtil.with_default_external を使って実行するようにしています。

duerst: r48052 2014-10-20 19:06:11 +0900

r48046 の lib/unicode_normalize.rb のローカル変数名の変更を revert しています。これは syllable index という用語を元にした変数名でハンガリアン記法じゃないとのこと。まあ、sIndex みたいな Pascal Case よりは s_index のような snake case のほうが ruby っぽいとは思いますが。

duerst: r48053 2014-10-20 19:48:52 +0900

tool/downloader.rb の -e オプションでファイルが存在したらそれを利用するようにする処理は、全く更新をチェックしないのではなくて、更新チェックはするようにして、ただしネットワークが利用できない(SocketError が発生した時と Timeout::Error が発生したときとしています。これで充分かなぁ)時にエラーにしないようにしています。

duerst: r48054 2014-10-20 19:54:55 +0900

r48031 で追加した update-unicode への依存関係に enc/unicode/data/CompositionExclusions.txt と enc/unicode/data/NormalizationTest.txt からの依存関係も追加しています。

あとこのコミットで r48053 の ChangeLog エントリを消してしまっているようです。多分コミットミスじゃないかと。

nobu: r48055 2014-10-20 20:50:00 +0900

r48046 で変更されて r48052 で revert されてた変数名を再度省略しないで syllable_index という名称に変更しています。