[Tux] | This is Rakudo version 2016.05-84-g87e91cc built on MoarVM version 2016.05-18-g1339332 | 07:05 | |
test 18.764 | |||
test-t 10.907 | |||
csv-parser 22.138 | |||
lizmat, this version broke csv_gram.pl - No error message given | 07:06 | ||
[Tux] => $work | 07:07 | ||
stmuk_ | one of my benchmarks which ran at 13 sec towards the end of last year now runs about 8 secs! | 09:54 | |
RabidGravy | cool | 09:56 | |
DrForr | Nice. | 09:57 | |
|Tux| | stmuk_, thanks for testing too! | 10:32 | |
lizmat | [Tux]: csv_gram.pl hangs for me at 0% CPU | 10:45 | |
|Tux| | p6 csv_gram.pl </tmp/hello.csv | ||
it needs input :) | |||
lizmat | ah, duh :-) | 10:47 | |
works ok, but then I have a much smaller hello.csv | 10:48 | ||
|Tux| | does it report a count? | ||
it should report 50000 (with my hello.csv) | |||
lizmat | ah, no, it didn't | ||
|Tux| | there you go | 10:49 | |
lizmat | it ends after 257 iterations | 10:50 | |
if I MVM_SPESH_DISABLE=1, it runs to completion | 10:53 | ||
|Tux| feels like a canary again | |||
lizmat | yup | ||
timotimo | uh oh | 10:56 | |
lizmat | This fixes it: | 11:01 | |
method getline(){ | |||
- return $!ast; | |||
+ $!ast; | |||
} | |||
I was put on this trail when I removed the MAIN around it and just ran it in the mainline of the program | |||
it then started to say "Attempt to return outside of any Routine" | 11:02 | ||
since this was the only return statement in the whole file, it was easy to check | |||
so it looks to me it loses some stack info after 257 iterations, and then the next return will just return out of the MAIN, and we're silently done | 11:03 | ||
because returning out of MAIN is a legal thing to do | |||
I wonder how many bugs we've put under the carpet by removing "return" statements | 11:04 | ||
otoh, I don't think it's wise to pursue this bug at this time, because of jnthn's work | |||
so I'll wait until that's landed | 11:05 | ||
timotimo | that could even have a tiny bit to do with how the count-only broke? | ||
lizmat | possibly, yes | ||
somehow it also feels this is GC related, and since frames have become GC collectable recently | 11:06 | ||
timotimo | if that's the case, maybe we can tease it out by putting force_gc in the right (randomly selected) spot? | 11:07 | |
lizmat | lemme try | ||
nope, forcing a gc inside the loop does not fix it | 11:08 | ||
timotimo | i'm not actually sure if that would help at all | 11:09 | |
lizmat | huh | 11:10 | |
ok, get this: | 11:12 | ||
removing the "return" from the method "getline" in class CSV_Actions fixes the issue | |||
*HOW* does that get called anyway??? | |||
in my stripped down version, the return happens from lines() | 11:13 | ||
so it looks like it is calling "getline" from the CSV_Actions class, instead of from IO::Handle | |||
oops | 11:16 | ||
maybe not :-) | |||
ok, if I have a "return outside of any Routine" error, it points to the "for lines()" | 11:18 | ||
timotimo maximum shrugs | |||
lizmat | perhaps that's part of the confusion | 11:19 | |
timotimo | if it says the return happens outside of any routine, it could just be the thing that has the return got inlined into a block that isn't a routine | 11:20 | |
and the handlers weren't fixed up properly/fully | |||
lizmat | fwiw, it's not laziness in lines | 11:21 | |
putting the lines into an array, same problem | |||
timotimo | OK | 11:24 | |
lizmat | m: class A { has $.foo; method foo { return $!foo } }; my $a = A.new(foo => 42); my $sum = 0; for ^500 { $sum += $a.foo } # golfed | 11:26 | |
camelia | rakudo-moar 87e91c: OUTPUT«Attempt to return outside of any Routine in block <unit> at /tmp/oLh4prjqJW line 1» | ||
lizmat | m: class A { has $.foo; method foo { return $!foo } }; my $a = A.new(foo => 42); for ^500 { $a.foo } # further golfed | ||
camelia | rakudo-moar 87e91c: OUTPUT«Attempt to return outside of any Routine in block <unit> at /tmp/VNXQ9AZcD1 line 1» | ||
lizmat | m: class A { has $.foo; method foo { return $!foo } }; my $a = A.new(foo => 42); for ^158 { $a.foo } # first value it breaks on 158 | 11:28 | |
camelia | rakudo-moar 87e91c: OUTPUT«Attempt to return outside of any Routine in block <unit> at /tmp/9NqzgIZLo_ line 1» | ||
lizmat | m: class A { has $.foo; method foo { return $!foo } }; my $a = A.new(foo => 42); for ^157 { $a.foo } # 157 is ok | ||
camelia | ( no output ) | ||
lizmat haz a ticket: rt.perl.org/Ticket/Display.html?id=128368 | 11:34 | ||
timotimo | ooooh, good golf! | ||
lizmat | m: class A { method foo { return 42 } }; my $a = A.new; for ^157 { $a.foo } # still smaller golf, no attributes neede | 11:41 | |
camelia | ( no output ) | ||
lizmat | m: class A { method foo { return 42 } }; my $a = A.new; for ^158 { $a.foo } # at 158 it fails | ||
camelia | rakudo-moar 87e91c: OUTPUT«Attempt to return outside of any Routine in block <unit> at /tmp/OZc4EqaZLv line 1» | ||
lizmat | can't get it to fail with a sub | 11:42 | |
eh | 11:43 | ||
m: sub foo() { return 42 }; for ^157 { foo } # still smaller golf | |||
camelia | ( no output ) | ||
lizmat | m: sub foo() { return 42 }; for ^158 { foo } # fails at 158 | ||
camelia | rakudo-moar 87e91c: OUTPUT«Attempt to return outside of any Routine in block <unit> at /tmp/tOCcim2lY1 line 1» | ||
dalek | kudo/nom: 9cfcb96 | lizmat++ | src/core/Baggy.pm: Remove no-sinks from Baggy And streamline a bit |
12:18 | |
lizmat | afk for a few hours& | 12:19 | |
psch | nine: gist.github.com/peschwa/488d4bc687...654d86c5d9 is the NPE i get when i put mast_frames into $*W | 12:56 | |
nine: well, it's a bit of jdb details... :) | 12:57 | ||
hm, m.qbid is 7 | 12:58 | ||
so we're trying to add one more CodeRef than we have..? | 12:59 | ||
doesn't that mean that we skip one? 'cause the NPE was because [5] was null afair | |||
as in, we have the correct number of CodeRefs, but bad indexing | 13:00 | ||
mlist[*] => qb_* is 0 => 3, 1 => 4, 2 => 2, 3 => 1, 4 => 0, 5 => 7, 6 => 6 | 13:02 | ||
well, however it happens, it happens during $*JMETH declarations | 17:03 | ||
somehow, somewhere, we're skipping qb_5 | |||
it's especially confusing considering we preseed %*CUID_TO_QBID | 17:08 | ||
so we either have the wrong cuid when instantiating the JAST::Method, or... something else? | 17:09 | ||
b2gills | Shouldn't &infix:<eqv>(Match:D $a, Match:D $b) be 「{ $a =:= $b || [&&] ..... }」 instead of 「{ [&&] $a =:= $b, ...... }」 because the current behavior is the same as just 「{ $a =:= $b }」 and I assume the =:= is supposed to be just an optimization | 17:34 | |
timotimo | oh, that seems very wrong | 17:35 | |
spec tests didn't catch that? shameful :( | |||
psch | i think there's a half-finished PR for that eqv candidate..? | ||
timotimo | no clue :S | 17:37 | |
i've lost overview of pretty much everything | |||
lizmat | b2gills: please RT it | 20:11 | |
dalek | kudo/nom: 74d7ac0 | lizmat++ | src/core/List.pm: Remove no-sink from List.pick Plus some streamlining |
21:06 | |
kudo/nom: 5b4470b | lizmat++ | src/core/Map.pm: Remove no-sink from Map.* Plus some streamlining |
|||
b2gills | lizmat: I just did a PR on it with a link to the PR that added the &[eqv] candidate, which bears out my suspicion of it being intended as an optimization | 22:51 |