[#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) <glass.saga@gmail.com>:
[#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 <nobu@ruby-lang.org>:
[#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
[#45671] [ruby-trunk - Bug #6479][Assigned] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる
— "knu (Akinori MUSHA)" <knu@...>
2012/05/23
[#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) <glass.saga@gmail.com>:
>
> 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]