ruby-trunk-changes r37483 - r37494

今日はデフォルトのソースエンコーディングが US-ASCII から UTF-8 に変更されるというコミットがありその他エンコーディングに関連する機能追加や修正がありました。また Module#const_get の機能追加もありました。

kosaki:r37483 2012-11-06 01:43:32 +0900

thread_pthread.c で #ifdef USE_SLEEPY_TIMER_THREAD という条件が typo していてタイマースレッドの通知用 pipe の fd を判定して IO にできないようにするチェックが有効になっていなかったのを修正。これは…… [ruby-core:48940] [Bug #7281]

shirosaki:r37484 2012-11-06 05:55:30 +0900

require のテストで環境変数 RUBYOPT に -w が指定されていると警告が出力されてしまうものがあったので子プロセスを起動する時に RUBYOPT をクリアするようにしています。

naruse:r37485 2012-11-06 09:49:57 +0900

Ruby スクリプトのデフォルトのソースエンコーディングが US-ASCII から UTF-8 に変更されています。文字列リテラル正規表現はマジックコメントが省略されている場合これからは "UTF-8" として扱われます。
これに対応するため標準添付ライブラリやテストにマジックコメントが追加されました。けっこう大きな変更ですが UTF-8 が通常のエンコーディングの世界ではあまり問題はないかもしれません。これまではアプリケーションはだいたい常にマジックコメントを明記するけどライブラリは -K オプションの影響などを考えて(省略されていれば指定されたデフォルトのエンコーディングが適用されるので)明示しない方針だったと思いますが、今後はライブラリもエンコーディングを意識して明示するようにすべきってことでしょうか。 [ruby-core:46021] [Feature #6679]

naruse:r37486 2012-11-06 09:50:02 +0900

String#b というメソッドが追加されていて、簡単に force_encoding("ASCII-8BIT") することができるようにしています。ただし force_encoding が元の文字列の encoding だけ変更するのに対して別の文字列オブジェクト(とはいってもバッファは共有される)を返します。 [ruby-dev:45992] [Feature #6767]

naruse:r37487 2012-11-06 14:30:17 +0900

Net::InternetMessageIO#each_crlf_line で行を分割するための正規表現に n オプション(ASCII-8BIT としてマッチ)がついているため警告を回避するために force_encoding("ASCII-8BIT") しないといけなかったので n オプションを削っています。 [ruby-dev:46394] [Bug #7278]

nobu:r37488 2012-11-06 14:31:14 +0900

新規追加されたファイルの svn property 変更。

usa:r37489 2012-11-06 14:39:36 +0900

WIN32OLE のテスト test/win32ole/test_win32ole.rb でソースエンコーディングのデフォルトが UTF-8 になったので ASCII-8BIT を期待していた文字列リテラルに String#b の呼び出しを付けて対応しています。

usa:r37490 2012-11-06 14:43:47 +0900

r37489 を revert して、テストスクリプトにマジックコメントをつけてソースエンコーディングを US-ASCII にしています。

ngoto:r37491 2012-11-06 16:30:49 +0900

Solaris 10 で #include で /usr/include/atomic.h を include しようとしても ruby のソースツリー上の atomic.h を include してしまう問題を回避するためにその内容の "sys/atomic.h" を include するようにしています。 ただし Solaris のリファレンスによると "sys/atomic.h" を直接 include するのは将来の変更の可能性もあるのでよくないようなのでこれは当面の回避策とのころです。 [ruby-dev:46414] [Bug #7287]

glass:r37492 2012-11-06 17:06:21 +0900

Tempfile#inspect が File を偽装する(File のオブジェクトへ委譲する)ために Tempfile を Tempfile と気付かずに使ってしまうのを避けるため Tempfile#inspect は独自の定義をしています。 [ruby-core:47544] [Bug #7027]

glass:r37493 2012-11-06 18:46:30 +0900

r37492 の ChangeLog のエントリに ML とチケットの参照を追加しています。

tenderlove:r37494 2012-11-06 20:42:24 +0900

Module#const_get に先頭が "::" から始まる文字列やシンボルを渡して、レシーバのモジュール/クラスからではなくトップレベル(Object)の定数を指定して取得できるようにしています。あれ、これ今までできなかったんですね。まあ Module/Class を指定して const_get しておいてトップレベルの定数を取得したいっていうのも妙なはなしですが、メタプログラミングで使っていて欲しくなることはあるのかもしれません。