Skip Menu |
Report information
Id: 126802
Status: new
Priority: 0/
Queue: perl6

Owner: Nobody
Requestors: alex.jakimenko [at] gmail.com
Cc:
AdminCc:

Severity: (no value)
Tag: (no value)
Platform: (no value)
Patch Status: (no value)
VM: (no value)



Subject: Shaped arrays with fractional sizes (my @a[0.5])
To: rakudobug [...] perl.org
From: Aleks-Daniel Jakimenko-Aleksejev <alex.jakimenko [...] gmail.com>
Date: Fri, 4 Dec 2015 05:32:08 +0200
Download (untitled) / with headers
text/plain 1.1k
My previous bug report was about overflow associated with negative sizes (RT #126800)

This time it is a little bit different:
my @a[0.5]; say @a.perl;

Result:
Index 0 for dimension 1 out of range (must be 0..-1)
  in block <unit> at -e:1


Actually, it only accepts values that can unbox to a native integer. “0.5” is not an integer, so perhaps it should fail earlier?

That being said, I think sometimes it could be useful to create an array if you have a num value without rounding it down first. So maybe it should not be forbidden, but then it should not be buggy.

Interestingly, it is not only about “-1” sneaking in:
my @a[5.5]; say @a.perl

Result:
Index 5 for dimension 1 out of range (must be 0..4)
  in block <unit> at -e:1


Perhaps it should just round it down to an integer internally? … but why not up?


<AlexDaniel> TimToady: “my @a[5.5]” – what should it mean? [5], [6] or error?
<TimToady> AlexDaniel: I think an error would be appropriate if .narrow doesn't get an Int
<TimToady> since a dynamic 5.5 might well indicate that you need 6, but maybe not
<TimToady> and we should force them to put ceiling if they mean that

Well, hmm… Go figure!
The first part of the ticket was resolved in https://github.com/rakudo/rakudo/commit/46dca95547949bc3d791efb2620d362a68176fdc

So you can no longer create an array using 0.5.

But you can still create an array with any fractional value that's larger than 1, and it will blow up later.

♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
For SQUASHathoners:
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥

The commit mentioned above gives a clue on what part of the code can be changed to resolve the issue. https://github.com/rakudo/rakudo/blob/cef3bf3e75411a5a664f93ea72209637eaaf5e3d/src/core/Rakudo/Internals.pm#L357-L362

I *think* that calling .Int on it will resolve the issue, but this of course won't produce a Failure which was recommended by TimToady. Either way the issue should be easy to approach.

On 2015-12-03 19:32:19, alex.jakimenko@gmail.com wrote:
Show quoted text
> My previous bug report was about overflow associated with negative sizes
> (RT #126800)
>
> This time it is a little bit different:
> my @a[0.5]; say @a.perl;
>
> Result:
> Index 0 for dimension 1 out of range (must be 0..-1)
> in block <unit> at -e:1
>
>
> Actually, it only accepts values that can unbox to a native integer. “0.5”
> is not an integer, so perhaps it should fail earlier?
>
> That being said, I think sometimes it could be useful to create an array if
> you have a num value without rounding it down first. So maybe it should not
> be forbidden, but then it should not be buggy.
>
> Interestingly, it is not only about “-1” sneaking in:
> my @a[5.5]; say @a.perl
>
> Result:
> Index 5 for dimension 1 out of range (must be 0..4)
> in block <unit> at -e:1
>
>
> Perhaps it should just round it down to an integer internally? … but why
> not up?
>
>
> <AlexDaniel> TimToady: “my @a[5.5]” – what should it mean? [5], [6] or
> error?
> <TimToady> AlexDaniel: I think an error would be appropriate if .narrow
> doesn't get an Int
> <TimToady> since a dynamic 5.5 might well indicate that you need 6, but
> maybe not
> <TimToady> and we should force them to put ceiling if they mean that
>
> Well, hmm… Go figure!




This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at perl.org