On Fri, Apr 06, 2012 at 03:53:11AM -0700, Nicholas Clark via RT wrote: > On Thu Apr 05 14:56:03 2012, pmichaud wrote: > > On Thu, Apr 05, 2012 at 01:46:53PM -0700, Carl Mäsak wrote: > > > <moritz> r: say ~(1, 2, 6 ... *)[10] > > > > For the moment, I'm going to argue Rakudo's behavior here as > > "correct", or at least consistent with the spec. > > I don't know how things map consistently for the general case, but > from that example as a user I would be surprised and disappointed > that the "unable to deduce sequence" isn't reported at compile > time, as a compile time error. (Independent of the bug as reported, > that element 10 is Nil). > > In that, as a programmer I would prefer to be told about errors at > compile time, rather than having to rely on good coverage of my > test suite to spot these errors before code gets into production. > [...]
I agree compile-time detection of the above would be better. Detecting the above case at compile time will likely be a function of constant folding built into the compiler; afaik the exact mechanism for handling that in Rakudo (and even in Perl 6) hasn't been completely worked out yet. But even if that's available, I somewhat wonder about something like: my @a := (1, 2 ... 10000), 10005, 10020 ... *; my @b := 1, 2 ... 10000, 10005, 10020 ... *; In the above case, do we expect the compiler to compile-time reify this complete list beyond the 10020 element to get to the "unable to deduce sequence" error? What tells the &infix:<...> operator "Hey, it's compile time, don't be lazy and keep generating until you reach _this_ point"? Anyway, I think we'll be more productive to move the constant-folding and compile-time detection issues to a separate thread and/or ticket; for this ticket I'd prefer to stick to the case where the sequence is being deduced lazily at runtime and we're accessing elements beyond the deduction failure. Thanks! Pm