ruby-trunk-changes r33662 - r33673

今日は Windows 環境での IO パフォーマンスの改善や改行コード変換の修正等がありました。

usa:r33662 2011-11-08 02:48:11 +0900

IO の改行コード変換モードの処理の修正です。読み込み時と出力時のフラグを独立して管理するようにして(これまでもしていたかもしれませんが)、標準出力や ARGF、pipe で IO が binmode でない時に出力時の改行コード変換を(TEXTMODE_NEWLINE_DECORATOR_ON_WRITE が定義済みなら == Windows 環境なら) CR+LF モードにセットするようにしています。
標準出力や ARGF など一部の IO で出力時の変換が有効になっていなかったのを修正しているのだと思いますが、まあ正直なところよくわかりません。改行コード変換は仕様からして複雑そうですね。そういえば JIS には改行コード変換の仕様は記載されているのだろうか。特定プラットフォーム向け機能のような気がするので書いてないかな。

svn:r33663 2011-11-08 02:48:17 +0900

version.h の日付更新。

akr:r33664 2011-11-08 06:01:40 +0900

IO#read の rdoc にシステムコールの read(2) みたいなことをしたかったら readpartial、read_nonblock、sysread などを使うこと、と書いてあるところで IO#read は non-blocking だろうが指定されただけ読み込むか EOF がくるまでブロックするよということを追記しています。

naruse:r33665 2011-11-08 11:03:57 +0900

ext/pty/pty.c で posix_openpt() の flags に O_CLOEXEC をセットしようとしているところで FreeBSD では O_CLOEXEC がサポートされていなくて、エラーになるので条件コンパイルで __FreeBSD__ の時は利用しないようにしています。

usa:r33666 2011-11-08 14:50:43 +0900

r33662 に ChangeLog エントリが抜けていたので追記しています。

usa:r33667 2011-11-08 14:52:32 +0900

rb_w32_write_console() という WriteConsoleW() という API を使って出力するコンソール出力用の処理を利用するのを FMODE_TTY フラグをチェックして、IO が端末の時だけにするようにしています。 Windows での IO 出力が遅くなったのを改善しているそうです。

naruse:r33668 2011-11-08 17:26:00 +0900

FreeBSDposix_openpt() の O_CLOEXEC の対応は FreeBSD 8 で一旦サポートされて、 9 でエラーになるようにされたそうで、Solaris と同じ処理に変更しています。 Solaris のほうは grantpt() が内部でプロセスを起動しているため close-on-exec がセットされた状態で呼ばれるとエラーになるために grantpt() 後に close-on-exec フラグをセットしようとしているので、 FreeBSD がコメントの通り posix_openpt() の O_CLOEXEC のサポートだけなら元の修正で良かったんじゃないかと思います。

nobu:r33669 2011-11-08 17:30:53 +0900

mkmf.rb で $CPP (プリプロセッサ) のコマンドラインを作る際に、universal で -arch フラグ(ARCH_FLAG)が複数あったら削るようにしています。 cpp がエラーになるからだそうですが、 -arch が1つだけでも空にしているような気がしますが、それはいいのでしょうか。

nobu:r33670 2011-11-08 17:59:28 +0900

rb_long2int() を inline 関数として宣言する場合とマクロとして定義している場合があるので、常にマクロとして定義するようにしています。

nobu:r33671 2011-11-08 18:02:59 +0900

ext/-test-/old_thread_select/extconf.rb でテスト用の拡張ライブラリのビルドの際に -Wno-deprecated-declarations をつけてコンパイルしてみるようにしています。

akr:r33672 2011-11-08 19:04:32 +0900

ext/pty/pty.c の MasterDevice、SlaveDevice という端末のデバイスファイル(/dev/pty/tts## とか)の名前を定義しているところを移動して、必要な時だけ定義するように。

akr:r33673 2011-11-08 20:51:28 +0900

dbm と gdbm のテストから read only のデータベースを使ったテストのクラスを別に切り出しています。