Hatena::ブログ(Diary)

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

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 のマーク処理を追加しています。 詳細わかりませんが stacn_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 という名称に変更しています。

2014-10-19 ruby-trunk-changes r48005 - r48027

[][]ruby-trunk-changes r48005 - r48027

今日は主に標準添付ライブラリに unicode_normalize というライブラリが追加されている(たぶんまだ不完全)のと、tk の Tcl/Tk8.6 サポートのための変更を追加しています。

duerst: r48005 2014-10-19 09:38:40 +0900

lib/unicode_normalize/normalize.rb になにやら https://github.com/duerst/eprun/blob/master/lib/normalize.rb から Normalize というモジュールが移植されています。おお、初耳なんですが標準添付ライブラリにするんですかね…。

と思ったらこのチケットに関連していたようです。 まだ結論出てないようですけど… [Feature #10084]

svn: r48006 2014-10-19 09:38:50 +0900

version.h の日付更新。

svn: r48007 2014-10-19 09:38:53 +0900

r48005 で新規追加した lib/unicode_normalize/normalize.rb の svn property 設定。

duerst: r48008 2014-10-19 09:48:52 +0900

r48005 で導入した lib/unicode_normalize/normalize.rb のモジュール名を UnicodeNormalize に変更しています。うむ、少なくとも Normalize では一般的すぎますしファイルパスとも一貫性がありませんからね。 [Feature #10084]

svn: r48009 2014-10-19 09:48:55 +0900

lib/unicode_normalize/normalize.rb の 行末の空白除去。

duerst: r48010 2014-10-19 09:56:58 +0900

tool/unicode_norm_gen.rb の Normalize というモジュールも UnicodeNormalize と改名しています。 おや、これって同じもの…ではないですよね、require していないから。

duerst: r48011 2014-10-19 10:04:10 +0900

lib/unicode_normalize.rb にも https://github.com/duerst/eprun/ から移植しています。 String に normalzie, normalize!, normalized? などのメソッドを生やしていますね。 しかしこの require の書きかたはいまいちですね…と思ってたら次で修正されてるようでした。 [Feature #10084]

duerst: r48012 2014-10-19 10:08:13 +0900

というわけで r48011 で導入された lib/unicode_normalize.rb の require の書きかたを標準添付ライブラリとして利用できる前提の書きかたに変更しています。 [Feature #10084]

duerst: r48013 2014-10-19 10:10:12 +0900

lib/unicode_normalize.rb でも利用していたモジュール名を Normalize から UnicodeNormalize に変更して追随させています。 [Feature #10084]

duerst: r48014 2014-10-19 10:12:26 +0900

さらに lib/unicode_normalize.rb で String に追加しているメソッド名を normalize... から unicode_nomalize... に変更しています。 これらの一連の追加はこのチケットに関連していました。 [Feature #10084]

けど String#unicode_normalize! で呼んでいるメソッドが normalize のままなのでエラーになりそう。

duerst: r48015 2014-10-19 11:09:13 +0900

lib/unicode_normalize/normalize.rb と tool/unicode_norm_gen.rb で require しているファイル名を変更しているのですが、この unicode_normalize/tables.rb ってまだ追加されていないようです…。まだこの一連の変更は途中なんですかね。 [Feature #10084]

duerst: r48016 2014-10-19 17:26:35 +0900

lib/unicode_normalize.rb に String に追加されるメソッドの rdoc 用コメントを追記しています。

duerst: r48017 2014-10-19 17:37:40 +0900

r48016 の rdoc 用コメントの UTF-8 以外のエンコーディングでの扱いについての記述を少し修正しています。

nagai: r48018 2014-10-19 17:38:35 +0900

拡張ライブラリ tk の Tcl/Tk8.6 サポートのための変更のようです。 Mac 専用のコードとか追加されているので Mac OS X での動作がサポートされるようになっているのかも。まあ、tk はテストがないので差分だけ読んでもこれでいいのかなんともわからないのですが…。

svn: r48019 2014-10-19 17:38:40 +0900

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

duerst: r48020 2014-10-19 17:54:08 +0900

lib/unicode_normalize.rb で require "unicode_normalize/normalize" をメソッドを利用する時に実行するように遅延させています。またコメントアウトされた形でメソッドが呼ばれたときにStringにdefine_methodでnormalize メソッドなどを定義させるようにしているのですが、このメソッドそもそもStringに定義しているので全く意味がないような気が。まあコメントアウトされているのですが。 [Feature #10084]

duerst: r48021 2014-10-19 18:13:20 +0900

common.mk に lib/unicode_normalize/tables.rb を生成するターゲットを追加しています。なるほど、これは自動生成するんですね。しかしこのターゲットの書きかた、ソースツリー以外でビルドした時にインストールされるかな…。またそもそもこのターゲットへの依存関係がないので、まだ make や make install した時に生成されないようです。

duerst: r48022 2014-10-19 18:35:45 +0900

lib/unicode_normalize/normalize.rb で require "unicode_normalize/tables" に明示的に ".rb" 拡張子を書くように変更しています。

duerst: r48023 2014-10-19 18:39:41 +0900

enc/prelude.rb に require "unicode_normalize" を追加しています。これにより Encoding がロードされている環境(従って miniruby は自動的にはロードされないらし)では String#unicode_normalize メソッドが生えるようです。

hsbt: r48024 2014-10-19 20:06:07 +0900

r48018 で ext/tk/lib/tkextlib/tile/treeview.rb に追記したメソッドの syntax error を修正しています。

usa: r48025 2014-10-19 20:08:27 +0900

r48021 で common.mk に追加した unicode_normalize/tables.rb の生成ルールの ${ } という変数展開の記法は nmake では使えないそうなので $() に変更しています。そうだったのか、知りませんでした…。

nobu: r48026 2014-10-19 20:27:00 +0900

さらに r48021 で common.mk に追加したルールのコマンドにクオートを追加しています。

nagachika: r48027 2014-10-19 23:34:20 +0900

r48014 で lib/unicode_normalize.rb のメソッド名を変更した時に変更漏れしていた呼び出しのほうのメソッド名も変更しています。 [Feature #10084]

2014-10-18 ruby-trunk-changes r48000 - r48002

[][]ruby-trunk-changes r48000 - r48002

今日は Binding オブジェクトのマーク処理が足りなくて SEGV の恐れのある不具合の修正がありました。

ktsj: r48000 2014-10-18 20:46:31 +0900

ブロックを渡したメソッドから Binding オブジェクトを作って返して、その Binding#eval で yield を呼び出すとブロックの情報が GC されてしまっていて SEGV される可能性がある不具合を修正しています。 Binding オブジェクトのマーク処理が不十分だったようです。ついでに Biding の生成処理を関数にまとめています。 [ruby-dev:48616] [Bug #10368]

ktsj: r48001 2014-10-18 20:46:41 +0900

Binding オブジェクトの作成で r48000 で切り出した rb_vm_make_binding() を直接呼び出すようにして、ただのラッパとなっていた rb_binding_new_with_cfp() 関数は削除しています。

svn: r48002 2014-10-18 20:46:47 +0900

version.h の日付更新。