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 という名称に変更しています。