| [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 |