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