[#45627] some warnings compiled with gcc 4.6.3 — SASADA Koichi <ko1@...>
ささだです.
6 messages
2012/05/06
[#45637] [ruby-trunk - Feature #6440][Open] 引数にIOを渡した場合のMarshal.loadにバッファを持たせたい — "Glass_saga (Masaki Matsushita)" <glass.saga@...>
14 messages
2012/05/16
[#45644] Re: [ruby-trunk - Feature #6440][Open] 引数にIOを渡した場合のMarshal.loadにバッファを持たせたい
— Tanaka Akira <akr@...>
2012/05/17
2012/5/16 Glass_saga (Masaki Matsushita) <[email protected]>:
[#45645] Re: [ruby-trunk - Feature #6440][Open] 引数にIOを渡した場合のMarshal.loadにバッファを持たせたい
— Nobuyoshi Nakada <nobu@...>
2012/05/17
なかだです。
[#45646] Re: [ruby-trunk - Feature #6440][Open] 引数にIOを渡した場合のMarshal.loadにバッファを持たせたい
— Tanaka Akira <akr@...>
2012/05/17
2012/5/17 Nobuyoshi Nakada <[email protected]>:
[#45650] space in COUTFLAG — Takahiro Kambe <taca@...>
こんにちは。
6 messages
2012/05/18
[#45670] [ruby-trunk - Bug #6479][Open] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる — "kachick (Kenichi Kamiya)" <kachick1+ruby@...>
9 messages
2012/05/22
[#45673] Bug?: level argument of caller — SASADA Koichi <ko1@...>
ささだです.
4 messages
2012/05/23
[ruby-dev:45644] Re: [ruby-trunk - Feature #6440][Open] 引数にIOを渡した場合のMarshal.loadにバッファを持たせたい
From:
Tanaka Akira <akr@...>
Date:
2012-05-17 09:21:16 UTC
List:
ruby-dev #45644
2012/5/16 Glass_saga (Masaki Matsushita) <[email protected]>: > > Issue #6440 has been reported by Glass_saga (Masaki Matsushita). > > ---------------------------------------- > Feature #6440: 引数にIOを渡した場合のMarshal.loadにバッファを持たせたい > https://bugs.ruby-lang.org/issues/6440 > 現在のMarshal.loadでは、引数にIOを渡すとIO#getbyteやIO#readで当座に必要な部分のみの読み出しを繰り返すので > 大量のメソッド呼び出しが発生し、そのコストが無視できません。 > そこで、引数にIOを渡した場合のMarshal.loadにバッファを持たせる事を提案します。 バッファがあると、読みすぎることがあるのではないでしょうか。 読みすぎたぶんを捨ててしまうと、 marshal したデータが複数並んでいるものを読み込む場合に、 動作しなくなってしまうと思います。 実際、パッチを当てると以下のようにエラーになってしまいます。 % ./ruby -e '2.times { Marshal.dump(1, STDOUT) }'| ./ruby -e '2.times { p Marshal.load(STDIN) }' 1 -e:1:in `readpartial': end of file reached (EOFError) from -e:1:in `load' from -e:1:in `block in <main>' from -e:1:in `times' from -e:1:in `<main>' パッチを当てなければ、以下のように動作します。 % ruby -e '2.times { Marshal.dump(1, STDOUT) }'| ruby -e '2.times { p Marshal.load(STDIN) }' 1 1 個人的に最近作っている tb というもので、この動作を利用しているので、 気になるところです。 -- [田中 哲][たなか あきら][Tanaka Akira]