|Tux| | This is Rakudo version 2016.11-102-gabc64393d built on MoarVM version 2016.11-27-g3171dbbe | 09:01 | |
csv-ip5xs 3.158 | |||
test 13.951 | |||
test-t 6.480 | |||
csv-parser 14.019 | |||
|Tux| just finished s thriller that had a character called Froggs. He was evil :) | 09:03 | ||
Reliquary, by Preston & Child | 09:08 | ||
psch | feh, findmethod is wonky /o\ | 09:14 | |
as in, after patching it to throw when we have an authorative method cache i can't compile nqp anymore, because it cannot find handle-exception on NQP::Compiler | |||
the weird thing is that there's an nqp::can call that looks for handle-exception, and even if i change nqp::can to catch exceptions from findmethod it *still* dies | 09:15 | ||
so it probably doesn't findmethod but methcall_* directly via indy, which i don't quite understand why it would do that | |||
gfldex | i put a link to perl6.org and and the webchat #perl6 in the about page of the advent blog | 09:58 | |
Ulti | if anyone's interested the slowest operation by far in my bioinformatics code still is postcircumfix:<{ }> src/core/hash_slice.pm:51 and its pull-one src/core/Any-iterable-methods.pm:703 within there that takes up most of that time | 10:23 | |
like thats nearly all of the codes time | 10:24 | ||
75% of its time | |||
all other operations are relative to that lightning fast | |||
s/75/50/ mattoates.co.uk/files/perl6/bioinfo...12-02.html | 10:32 | ||
still considerable | |||
timotimo | i wonder if that already has the newer angular versions that are supposed to be a bit faster | 10:53 | |
Ulti | timotimo that profile was taken from head at 10:30 GMT today | 13:05 | |
timotimo | right, but did head do an nqp bump since the profile html template was updated? | 13:07 | |
anyway, i can just replace the paths to the angular scripts and it'll be enough | |||
it kind of seems b0rked in the call graph view | 13:08 | ||
it shows stuff that belongs to another tab entirely | |||
in general, that profile is rather short | 13:09 | ||
i.e. the code didn't run for too long | |||
so i think the instance of postcircumfix:<{ }> refers to the line in Nucleic's translate method that maps over the sequence | 13:11 | ||
i have a suggestion for you | |||
instead of map *~*~*, $.sequence.uc.comb | |||
please try $.sequence.uc.comb(3) | |||
see if that helps | 13:12 | ||
Ulti: ^ | 13:13 | ||
Ulti | helps with what? | 13:21 | |
timotimo: I'm not trying to make my code faster | |||
I'm trying to point out things that are slow and how dumb first pass code works | |||
but yeah the tests take about 1s to run now down from 35s so its not much time to see | 13:22 | ||
timotimo | OK, but could you have a look if it makes things very fast? | ||
Ulti | sure | ||
timotimo | cool | 13:23 | |
Ulti | yup good chunk faster | 13:26 | |
1.01s to 0.89s | |||
timotimo | cool | 13:28 | |
arnsholt | Array and dictionary are a known weak spot, IIRC | ||
timotimo | how's the percentage of postcircumfix:<{ }> inclusive now? | ||
arnsholt | There are some tricks you can do to make it faster, like replacing simple dereferences with AT-POS/AT-KEY I think | ||
Ulti | timotimo: mattoates.co.uk/files/perl6/comb3_profile.html | 13:29 | |
timotimo: yeah a lot smaller | |||
weird thats coming up as hash slice :S | |||
I guess its on that call you have the expression being evaluated | 13:30 | ||
timotimo | of course it's a hash slice? | ||
you have a list inside the { } | |||
so it gets passed an iterator, and it eagerly evaluates all the values | 13:31 | ||
Ulti | yeah but its the list generation thats slower not the hash slice | ||
timotimo | right, but inclusive is inclusive | ||
Ulti | k k | ||
so its the pull one on that iterator thats slow | |||
arnsholt | Kinda weird that postcircumfix:<{ }> gets *interpreted* though, isn't it? | ||
Ulti | I imagine the comb itself is about the same cost | ||
arnsholt | Not even speshed? | 13:32 | |
timotimo | the first thing i do is usually sort by exclusive time | ||
that shows push-all is very expensive, 2004 entries, but 7.18% exclusive time | |||
arnsholt | Not hot enough, perhaps? | ||
timotimo | pull-one has 20k entries and 3.73% time | ||
of course push-all has an OSR flair on it, which means there's a loop inside that does a bunch of work | 13:33 | ||
i expect push-all just calls pull-one over and over? | |||
arnsholt: you're looking at which profile there? in comb3 the postcircumfixis speshed | 14:05 | ||
in the other profile it's speshed, too | |||
Ulti: would you like to give us spesh- and jitlogs for both pieces of code to see what's what? | 14:06 | ||
arnsholt | timotimo: My bad, probably | 14:07 | |
timotimo | arnsholt: okay | ||
the most common cases of "we can't jit this" is the unsupported kinds of parameter grabbing | |||
Ulti | timotimo: sure | 14:09 | |
do you want them in isolation though? | |||
arnsholt | I guess ideally we'd like to inline common operations like indexing? | ||
Ulti | as in golf the code to just that expression? | ||
timotimo | i'd prefer each to be its own file | ||
no, the full files are fine | |||
Ulti | k | ||
timotimo | compress them, though. they can become quite big | ||
but they ought to compress really well | |||
[Coke] | anyone see the patch interaction on perl6-language? Is there a way for me to phrase that more clearly? | 14:10 | |
like, the hardcore thing is, "our time is valuable. if you really want to help us, make it EASY for us to take your help" | |||
but I'm trying to phrase it more nicely. I think I failed there. | 14:11 | ||
timotimo | but it isn't terribly difficult | ||
done | 14:12 | ||
Ulti | timotimo ok how do I actually get those dumped out? | 14:14 | |
I can only see an option for the heap dump | |||
;_; | 14:15 | ||
timotimo | oh, it's the environment variables | ||
they are documented near the bottom of moar --help | |||
Ulti | k k thanks | 14:17 | |
[Coke] | we've been talking in #perl6 about getting people to volunteer to write advent articles over the past few weeks. Anyone in here who is on the fence? we still have half a dozen slots open. | 15:59 | |
docs.perl6.org/routine/install_method_cache - should that be kebab cased? | 16:01 | ||
)(looks like a lot of the Metamodel::* stuff has _'s | |||
babydrop | Yeah, the advancish stuff is snake_cased on purpose. | 16:02 | |
timotimo | i think i have an idea for a post | ||
i'll call it ... | |||
"shocking: perl6 mascot 'camelia' blown to smithereens in this gruesome blog post" | 16:03 | ||
(suggestions welcome) | |||
babydrop | :o | ||
I'd read it :) | |||
timotimo | "you won't believe what happened next!" | ||
babydrop | "Last one will blow your mind!" | ||
moritz | reddit/r/SavedYouAClick comes to mind :-) | 16:11 | |
japhb | [Coke]: I am one of the "still on the fence" people. In case you're wondering why someone would be: I have an idea, but the code behind it needs to get in a better state before I can write about it. Thus I won't sign up unless I get the code to "won't be embarassed by it" levels, and there's currently about a 70% chance that won't happen this year. | 16:22 | |
TimToady is always on the fence | 16:25 | ||
TimToady is usually on several fences simultaneously... | |||
timotimo | tim minchin has some good words about the fence | 16:26 | |
Ulti: do you still have a bit of time left over? :) | 17:11 | ||
Ulti: because i just pushed two moarvm commits that have the potential of removing up to 25 bailed frames | 17:12 | ||
but knowing the jit, those frames all just have something else unimplemented following that :D | |||
perlpilot | japhb: that's where I'm at too. | 17:43 | |
gfldex | m: class C {}; role R {}; sub postfix:<.>(C:D $c){ $c but R }; my $c = C.new; $c. | 19:08 | |
camelia | rakudo-moar abc643: OUTPUTĀ«===SORRY!===ā¤Cannot find method 'ast' on object of type NQPMuā¤Ā» | ||
gfldex | I know what I'm doing is silly but is this still a bug? | ||
(because it leaks NQPMu) | |||
psch | i think it's a parsing bug, yes | 19:09 | |
babydrop | It's at the very least an LTA error, 'cause it doesn't show where the problem is. | ||
psch | as in, dottyop/methodop shouldn't match if there's nothing afterwards | ||
so it should hit the postfix and just work | |||
babydrop | ohh | 19:10 | |
psch | i'm not sure LTM allows that though :) | ||
m: class C {}; role R {}; sub postfix:<.>(C:D $c){ $c but R }; my $c = C.new; $c.; | |||
camelia | rakudo-moar abc643: OUTPUTĀ«===SORRY!===ā¤Cannot find method 'ast' on object of type NQPMuā¤Ā» | ||
psch | note though that explicit statement end doesn't help | ||
m: 1.; | 19:11 | ||
camelia | rakudo-moar abc643: OUTPUTĀ«===SORRY!===ā¤Decimal point must be followed by digitā¤at <tmp>:1ā¤------> 1.ā;ā¤Malformed postfix callā¤at <tmp>:1ā¤------> 1.ā;ā¤ā¤Ā» | ||
psch | m: "foo".; | ||
camelia | rakudo-moar abc643: OUTPUTĀ«===SORRY!=== Error while compiling <tmp>ā¤Malformed postfix callā¤at <tmp>:1ā¤------> "foo".ā;ā¤Ā» | ||
psch | the added postfix:<.> gets us out of somewhere where we would call the latter error message | ||
but we apparently still do the wrong action afterwards | |||
m: "foo" . uc | 19:12 | ||
camelia | ( no output ) | ||
psch | i suspect the fact that that one works plays a role there :) | ||
gfldex | i shall rakudobug | 19:13 | |
babydrop | m: sub postfix:<.>($){ }; 1. | 19:14 | |
camelia | rakudo-moar abc643: OUTPUTĀ«===SORRY!===ā¤Cannot find method 'ast' on object of type NQPMuā¤Ā» | ||
babydrop | m: sub prefix:<.>($){}; . 1 | 19:16 | |
camelia | rakudo-moar abc643: OUTPUTĀ«===SORRY!===ā¤Cannot find method 'ast' on object of type NQPMuā¤Ā» | ||
psch | m: sub postfix:<.>($) { }; 1..1 # oh geez | 19:19 | |
camelia | rakudo-moar abc643: OUTPUTĀ«===SORRY!===ā¤Cannot find method 'ast' on object of type NQPMuā¤Ā» | ||
psch | yeah, that's gonna be a lot of fun to untangle | 19:20 | |
maybe the sanest thing is to bail on every foofix that consists of only a single dot :) | |||
m: sub infix:<.>($, $) { }; 1 . 1 | |||
camelia | rakudo-moar abc643: OUTPUTĀ«===SORRY!=== Error while compiling <tmp>ā¤Unsupported use of . to concatenate strings; in Perl 6 please use ~ā¤at <tmp>:1ā¤------> sub infix:<.>($, $) { }; 1 .ā 1ā¤Ā» | ||
gfldex | i c/p the wrong line into the bugreport :-/ | 19:21 | |
i was in a hurry! | |||
psch | m: sub postcircumfix:<. .>($,$) { }; "foo".1. | ||
camelia | rakudo-moar abc643: OUTPUTĀ«===SORRY!===ā¤Decimal point must be followed by digitā¤at <tmp>:1ā¤------> b postcircumfix:<. .>($,$) { }; "foo".1.ā<EOL>ā¤Malformed postfix callā¤at <tmp>:1ā¤------> b postcircumfix:<. .>($,$) { }; "foo".1.ā<EOL>ā¤ā¤Ā» | ||
gfldex | filed as #130245 | 19:24 | |
synopsebot6 | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=130245 | ||
babydrop | bartolin: FWIW, you already have a commit bit to perl6/nqp... | 19:38 | |
bartolin | babydrop: yeah, I know. and since forgiveness > permission I should probably just commit stuff, even if I'm not 100% sure | 20:03 | |
psch | ++bartolin :) | 20:04 | |
dalek | p: 94b38a3 | usev6++ | src/vm/jvm/runtime/org/perl6/nqp/runtime/ExceptionHandling.java: [JVM] Add null check in backtrace generation |
20:06 | |
ast: a151379 | bartolin++ | integration/error-reporting.t: Make test for output of backtrace less specific After the recent changes to backtrace handling this test started to fail on rakudo-j. There are references to lines in gen/jvm/CORE.setting which are causing the test to fail because of the 's' in 'setting'. Allowing additional lines in the backtrace still fits the test description 'Thrown Failure outputs dual backtraces'. |
20:16 | ||
roast: bdd5db7 | bartolin++ | integration/error-reporting.t: | |||
bartolin | iiuc that commit to roast (a151379e39) should also go into 6.c-errata. how do I do that? I used cherry picking only once or twice, but that's the way to do it? | 20:22 | |
timotimo | yeah, checkout the 6.c-errata branch and just cherry-pick, but make sure to pull in there first | 20:23 | |
babydrop | The handful of times I've done it, I just did it manually on 6.c-errata :( | ||
dalek | ast/6.c-errata: cce58c2 | bartolin++ | integration/error-reporting.t: Make test for output of backtrace less specific After the recent changes to backtrace handling this test started to fail on rakudo-j. There are references to lines in gen/jvm/CORE.setting which are causing the test to fail because of the 's' in 'setting'. Allowing additional lines in the backtrace still fits the test description 'Thrown Failure outputs dual backtraces'. |
20:25 | |
bartolin hopes that was correct | 20:26 | ||
hmm, shouldn't it have the same commit id in both branches? | 20:28 | ||
bartolin goes and reads some more about cherry-picking | |||
timotimo | no, can't | 20:29 | |
IDs are cryptographic hashes of the commit including the parent commit hash, among other things | |||
since the branch has different commits in it (and the files also differ), it'll better have a different hash | |||
bartolin | aha! I didn't know about the parent commit thing (et al.). thanks! | 20:30 | |
masak | timotimo: was gonna correct you on the term "cryptographic hashes", but Wikipedia agrees with you ;) | 21:03 | |
timotimo | another important term that you should definitely look up is "content-addressed storage" | ||
masak | reminds me of the winner of the "unorthodox uses of Git" contest (or whatever it was called): someone checked if his photos were duplicates by doing `git add` on them one by one, and checking whether a new blob was added to .git/objects | 21:05 | |
timotimo | ugh :) | 21:08 | |
jnthn | It may be unorthodox, but it's O(n) :P | 21:41 | |
masak | yes, I thought it was pretty creative and cute | 21:45 | |
japhb | jnthn: Under the assumption that calculating the hash is much faster than checking whether that hash already exists in the object pile, at least ... | ||
*much slower | |||
And that writing a new object to the backing store is O(1) | 21:46 | ||
japhb remembers the days that "You have >1000 files in one directory? Well, there's your performance problem!" was actually a thing | 21:47 | ||
jnthn wonders where the "no, that's too many" threshold is today... :) | 21:48 | ||
masak | that's why .git/objects does the .git/objects/hh/ subdirectories thing, is it not? | 21:49 | |
jnthn | I always figured so | ||
Though I've no good intuition if that's for the sake of non-modern filesystems :) | |||
Or for modern ones too | |||
[Coke] | japhb: I ran into that in the last 5 years here. (though it was a bigger number) | 21:50 | |
japhb | [Coke]: I'm not too surprised. Eventually anything above O(1) will grow to be big enough to notice. And if it's well above O(1), it will be noticed rather quickly. :-) | 21:52 | |
Although I still get a kick out of inverse-Ackerman being so slow growing that it is bounded by a small constant within the physical universe. | 21:53 | ||
geekosaur | jnthn, same place unless you're using ext4 btree dirs, zfs, or (if you can find a quasi-stable version) btrfs | 22:06 | |
and ext4 still has problems, and large dirs still have some problems even with btrees --- they solve the namei() performance issue but not others | 22:07 | ||
jnthn | Good to know; thanks | 22:08 | |
jfhek | md5sum *.jpg | cut -d ' ' -f 1 | sort | uniq -c | sort # O(n) + smallcoeff * O(n log n) | 22:10 | |
if you need filenames, you need to do what perl groupies call Shwartzian transformation lol | 22:15 | ||
MasterDuke | timotimo: what sort of rakudo-level operations would be sped up by those ops you implemented on the JIT earlier today? | 22:40 | |
timotimo | MasterDuke: some kinds of returns and gotos/break/whatever | 22:46 | |
MasterDuke: try "moar --dump CORE.setting.moarvm > coresettingdump.txt; grep throwpayloadlex coresettingdump.txt" | 22:47 |