On Thu, 07 Apr 2016 09:57:57 -0700, james.n...@gmail.com wrote:
> $ perl6 --version
> This is Rakudo version 2016.03-98-g61d231c built on MoarVM version
> 2016.03-84-g4afd7b6
> implementing Perl 6.c.
> 
> I recently attempted to grab a largeish (128MiB) Buf of pseudorandom data
> from /dev/urandom, only to errors from read(). I found this surprising,
> since the IO::Handle.read() documentation doesn't specify any kind of
> limits.
> 
> At first I started thinking, aha, it's calling C's read() and that's
> limited to SSIZE_MAX or something. And if I were programming in C, it would
> not surprise me that I can't ask for arbitrarily-large buffers. I assumed
> Perl's implementation would just call the lower-level read() repeatedly and
> then give me back a nice large Buf object. I've checked SSIZE_MAX on my
> system though, and that's not quite it. After a binary search, I discovered
> that the limit is 100_000_000 bytes. I don't know what's special about that
> number.
> 
> Code to demonstrate:-
> 
> $ perl6
> To exit type 'exit' or '^D'
> > my $fh = open("/dev/zero", :r, :bin);
> IO::Handle<"/dev/zero".IO>(opened, at octet 0)
> > my $buf = $fh.read(100_000_000);
> Out of range: attempted to read 100000000 bytes from filehandle
> 
> Fun extra maybe-bug that has me questioning my sanity:-
> 
> Obviously, $fh.read(99_999_999); does not produce the error message, and in
> my original quest to find the limit managed to return a value in less than
> 30 seconds or so. But, being the responsible bug-reporter that I am, I made
> sure to upgrade my version of rakudo by running 'rakudobrew build moar',
> and checking to see if the behaviour was present on the latest version.
> Except... attempting to read the large-but-still-valid buffer seems to take
> forever now.
> 
> It's certainly testing my patience, and it's late and I'd rather submit
> this report now and figure out just how many hours it's taking later. I've
> built moar-2016.{02,01.1} and they also appear to be taking their sweet
> time in returning this ~100MB buffer. The thing is... I can't reproduce the
> "fast" experience I was getting previously. I'm pretty sure my perl6 was
> reporting itself as moar-2015.12, the Christmas release, and yet if I check
> that out specifically it still takes (figuratively) forever.
> 
> Anyway, if it's unreasonable to ask for such a large value, it's a
> documentation bug; otherwise, perhaps Perl6 needs to do some magic behind
> the scenes. It's certainly busy doing *something*.
> Thanks.
> -James


The limit was artificial and got removed in 
https://github.com/rakudo/rakudo/commit/756877e

Not going to add a test to regular stresstest, but wouldn't hurt to add one to 
the "dangerous/exotic" category of tests we were discussing awhile back.

Reply via email to