Raku / old-issue-tracker

Tickets from RT
https://github.com/Raku/old-issue-tracker/issues
2 stars 1 forks source link

Binding a Seq to a `@` variable tries to consume it first #6427

Open p6rt opened 7 years ago

p6rt commented 7 years ago

Migrated from rt.perl.org#131845 (status was 'open')

Searchable as RT131845$

p6rt commented 7 years ago

From @zoffixznet

Since Seq is not a Positional type, *binding* it to a `@​` variable is typecheck error​:

13​:26 m​: my @​a := Seq.new​: class :​: does Iterator {method pull-one {IterationEnd}}.new; 13​:26 camelia rakudo-moar abf1cf​: OUTPUT​: «Type check failed in binding; expected Positional but got Seq ($(().Seq))? in block \ at \ line 1??»

However, it appears the code is trying to consume the entire Seq, before generating the error​:

13​:26 Zoffix m​: my @​a := Seq.new​: class :​: does Iterator {method pull-one {42}}.new; # hang 13​:27 camelia rakudo-moar abf1cf​: OUTPUT​: «(timeout)» 13​:31 Zoffix m​: my @​a := 1…?; # but this one has `is-lazy` set 13​:31 camelia rakudo-moar abf1cf​: OUTPUT​: «Type check failed in binding; expected Positional but got Seq (?)? in block \ at \ line 1??»

Perhaps it thinks it's gonna do assignment and consumes non-lazy Seqs in preparation for it, but then the binding happens and then it throws?

p6rt commented 7 years ago

From @AlexDaniel

Not sure if this info is relevant now, but the hang was introduced in (2016-02-18) https://github.com/rakudo/rakudo/commit/9983c2c8434ed81c532a5706996f284283b48d0a

On 2017-08-05 06​:33​:14, cpan@​zoffix.com wrote​:

Since Seq is not a Positional type, *binding* it to a `@​` variable is typecheck error​:

13​:26 m​: my @​a := Seq.new​: class :​: does Iterator {method pull-one {IterationEnd}}.new; 13​:26 camelia rakudo-moar abf1cf​: OUTPUT​: «Type check failed in binding; expected Positional but got Seq ($(().Seq))? in block \ at \ line 1??»

However, it appears the code is trying to consume the entire Seq, before generating the error​:

13​:26 Zoffix m​: my @​a := Seq.new​: class :​: does Iterator {method pull-one {42}}.new; # hang 13​:27 camelia rakudo-moar abf1cf​: OUTPUT​: «(timeout)» 13​:31 Zoffix m​: my @​a := 1…?; # but this one has `is-lazy` set 13​:31 camelia rakudo-moar abf1cf​: OUTPUT​: «Type check failed in binding; expected Positional but got Seq (?)? in block \ at \ line 1??»

Perhaps it thinks it's gonna do assignment and consumes non-lazy Seqs in preparation for it, but then the binding happens and then it throws?

p6rt commented 7 years ago

The RT System itself - Status changed from 'new' to 'open'

p6rt commented 7 years ago

From @zoffixznet

On Sun, 06 Aug 2017 18​:52​:07 -0700, alex.jakimenko@​gmail.com wrote​:

Not sure if this info is relevant now, but the hang was introduced in (2016-02-18) https://github.com/rakudo/rakudo/commit/9983c2c8434ed81c532a5706996f284283b48d0a

Yes, very relevant. It's the .perl that hangs and even in non-hanging cases it has the potential to perform huge amounts of work, just to throw it all-but-first-score of chars.

I see a bunch of other exceptions use .perl and are probably subject to the same issue. I'd say this is another face of some meta ticket for "Errors of Rakudo — The Full Picture"; discussion for which is currently happening on this ticket​: https://rt-archive.perl.org/perl6/Ticket/Display.html?id=131877#txn-1480778