lizmat | . | 00:06 | |
yoleaux2 | 22 Jun 2016 21:52Z <timotimo> lizmat: you think you can figure out how to make comb's pull-one not allocate Int? i tried replacing < with islt_i, but that's not it, so maybe it's $!pos++? | ||
lizmat | timotimo: not sure what you benchmark is and which candidate you're talking about | 00:52 | |
timotimo | oh | 00:53 | |
my benchmark is 'my @res; for line() { @res.append: .comb }' over my linux' word list | |||
lizmat | timotimo: ok, will check | 01:17 | |
dalek | kudo/nom: 78d2ce6 | hoelzro++ | t/harness6: Chomp fudged filename output Otherwise, TAP::Harness ends up with filenames that have a trailing \n, and run(..., :!err) will silently fail with no TAP plan |
04:14 | |
[Tux] | This is Rakudo version 2016.06-23-g78d2ce6 built on MoarVM version 2016.06 | 07:59 | |
test 16.725 | |||
test-t 9.934 | |||
csv-parser 22.277 | |||
psch | well, i'm not really getting anywhere with trying to figure out what's wrong from scratch, so i thought "just do the thing with the patch-method for the nested cu already" | 10:06 | |
but then i realized that i need to have the knowledge of the nested cu in the containing cu | |||
and i'm not sure i do | |||
nine | But the containing CU is the one running the EVAL, so it should by definition know about the nested CU? | 10:25 | |
yoleaux2 | 22 Jun 2016 23:14Z <Zoffix> nine: the bug I found last night where a P5 module loaded together with a P6 module had errors was introduced by this commit: github.com/rakudo/rakudo/commit/bf59085 | ||
psch | nine: i'm not sure. i only reliably know the classname of the EVAL after it ran | ||
nine: and i cannot say if the outer cu is finished then or not | |||
nine | For a BEGIN time EVAL (which the bug is about) the outer CU cannot be finished before the EVAL ran | 10:26 | |
psch | okay, yeah, i can see that | 10:29 | |
...also i think hack is dying | 10:30 | ||
$ uptime 10:30:48 up 31 days, 11:15, 30 users, load average: 61.24, 28.46, 13.51 | |||
it's 1min, 5min, 10min? | 10:31 | ||
ah, 1 5 15 | 10:32 | ||
anyway, yeah, that puts a stop on my hacking for now vOv | |||
moritz: can you poke hack? with something that reboots it, preferably? | 10:37 | ||
Woodi | I wonder about GC... we have generational one so "promoting" to 2nd generation is coping object memory or moving info about promoted object ? | 10:38 | |
psch | Woodi: i think it's just putting the pointer in a different array | ||
Woodi: but that's probably more a #moarvm question | 10:39 | ||
Woodi | psch: I hope and right :) | ||
jnthn | We actually move the object | ||
Same during the semispace collection | |||
Once an object reached gen2 it (at present) never moves any more. | 10:40 | ||
uh, "any further" is perhaps clearer | |||
So generally an object that makes it to the old generation will have been copied twice | |||
Note though that this is about the direct object body | |||
Arrays and strings in turn point to buffers, which are not moved. | 10:41 | ||
Woodi | jnthn: why not just reference (and eg. not worry about memory fragmentation, etc) | ||
jnthn | The point of copying is to avoid memory fragmentation, in fact. :) | ||
Well, a point of is probably more correct, but still.... :) | 10:42 | ||
Woodi have counter-example but forget what it was... | |||
jnthn | A semi-space copying GC lets you just bump-the-pointer allocate your way through a nursery space, and when it's full you evacuate the living objects to the other semi-space, and they all land up packed together at the start of it. | ||
Then the old generation in Moar is implemented as - up to a size limit anyway - a set of regions that all contain objects of the same size. | 10:43 | ||
Also note that in most programs the majority of objects die young, and so never have to be copied at all. | 10:45 | ||
timotimo | psch: i can also poke hack with something that reboots it | ||
psch | timotimo: ah, i wasn't aware and didn't think to check | ||
timotimo: fwiw, i think your fuzzer ran shortly before this started | |||
timotimo | it's been running for like 3 or 4 days | ||
psch | although i doubt that's what drove hack to (now) 200 load | ||
timotimo | yeah, it shows "task blah blocked for more than 120 seconds" on its screen | 10:46 | |
i bet it's the virtual disks again | 10:47 | ||
timotimo forces a reset | |||
Woodi | probably I was imagining outsorcing defragmentation to system malloc, which it don't offer... on the other hand freeing VM from that would be nice :) | ||
timotimo | "force reset" didn't seem to do anything, but "force off" and "power on" did the trick | 10:49 | |
did a bit of fsck, and is now booting | |||
yup, there it is | |||
psch | what a wonderful opportunity to reorganize my screen sessions \o/ | 10:51 | |
timotimo | yeah, i guess | ||
tmux would have let you do that on-the-fly, i bet :P | |||
psch | well, think positive | ||
idk if tmux does that automatically | |||
but getting screen titles to always include CWD or "vim $openfile" was so annoying | 10:52 | ||
Woodi | jnthn: if moust of object have something in common then Flyweight pattern applies (if they group into classes with common, immutable set of attrs)... so it allows to acquire simpler/smaller objects | ||
psch | otoh, with tmux i'd have to conf it for screen binds, so that's annoying too :P | ||
Woodi | psch: I lastly learned tmux with ^Z bindings :) | 10:57 | |
timotimo | all in all, the response time to the crash was about 30 minutes. that's better than the last time. | 10:59 | |
blurgh. the afl commandlines didn't end up in my bash history | 11:01 | ||
timotimo is resuming afl, which seems to take a while | 11:13 | ||
timotimo knows what most of the cached portions of hack's RAM will contain for the forseeable future | |||
moritz | there seem to be a few (sd-pam) processes on hack | 11:18 | |
does anybody what they do, and if I should care? | 11:19 | ||
timotimo | "I think it's intended to guarantee that pam_close_session() is closed | 11:20 | |
when its parent "systemd --user" exits. | |||
" | |||
wow, each of the three fuzzers has a sync_dir that's 4 gigs in size | 11:23 | ||
hmm. the memory used on the root partition was also going up over the last days. not sure why that would be; all my fuzzing happens in my home directory | 11:24 | ||
maybe it's collecting core dumps or something? but afl should prevent that, i'd think | |||
going through / with ncdu -x doesn't highlight anything critical | 11:28 | ||
oooh, q&a with larry wall, that's gotta be interesting | 11:35 | ||
nine | timotimo++ # teaching me about ncdu | ||
timotimo | ncdu is especially fantastic as it has a "delete this" button | 11:36 | |
and the popup lets you tell it to "never ask me again (in this session)" | |||
tadzik | oh yes :) | ||
ncdu is great | |||
dalek | kudo/nom: efbfdaa | lizmat++ | src/core/Str.pm: Make Str.comb 30% faster, timotimo++ Please note that I got rid of the ProcessStr role, because we cannot yet work with native int attributes from a role :-( |
13:35 | |
kudo/nom: 9b579d0 | lizmat++ | src/core/Seq.pm: Squeeze a few percent out of Seq.iterator|is-lazy |
14:36 | ||
psch | i am so confused right now | 14:41 | |
so i'm declaring an array in nqp | |||
then i iterate over another array and potentially push things into the declared array | 14:42 | ||
then i have some debug output that gives me the size of the array | |||
then i pass the array into a different sub in the same nqp file, and it gets copied into a different array | |||
and after that copy process, numification of the array doesn't work anymore | 14:43 | ||
on the target, though | 14:44 | ||
which maybe means the copying is a silly idea..? | |||
i really have no clue | |||
lizmat | gist? | 14:45 | |
psch | gist.github.com/peschwa/785b29f2eb...0267808653 | 14:46 | |
the p6sort is copied from src/vm/moar/Perl6/Ops.nqp | |||
well, plus a default for the &comparator parameter | 14:47 | ||
and the bindpos_i was nqp::push before, didn't work the same way | |||
lizmat | too much code to parse for me during Damian's functional programming tutorial :-( | 14:49 | |
hope someone else can have the necessary cycles | |||
psch | eh, i got it to work once before, i just lost the stash | ||
i am confident i'll figure it out again somewhen, i'm mostly just venting i guess :/ | 14:50 | ||
nine | psch: you lost the stash? Not even recoverable through the ref-log? | 14:51 | |
psch | nine: well, "lost" in "dropped it"... i'm sometimes a bit stupid, ok? ;) | ||
nine: i have no idea if that means it could still be in the reflog though | |||
s/ in / as in / # vOv | 14:55 | ||
nine | As long as the garbage collection has not run yet, it should be recoverable | 14:58 | |
psch | well, i also didn't name it :| | ||
ilmari | if you committed it it'll be in the reflog | 14:59 | |
so you can cherry-pick it by id | |||
psch | nope, didn't, i only stashed it | ||
ilmari | the stash is commits too | ||
psch | okay. can i look at diffs of that somehow? | 15:01 | |
i mean, the reflog | |||
ilmari | psch: hm, a dropped stash doesn't show up with reflog --all | ||
|Tux| | lizmat, I got an eol failure. re-running now | ||
psch | lizmat: ah, thanks for checking. i'll just try to recreate whatever i must have done... :) | 15:02 | |
ilmari | psch: try asking on #git | ||
nine | psch: git reflog -p | ||
I guess git reflog -p | grep p6sort would give a quick answer | |||
psch | nine: ah, yeah, that does indeed find it | 15:04 | |
nine | Yeah :) | 15:07 | |
Otherwise you could have tried the really hardcore desparate search: | |||
find .git/objects/ -type f | cut -d/ -f 3- | sed 's/\///' | xargs -n 1 git cat-file -p | grep p6sort | |||
psch | i don't see the crucial difference between the two patches, but well vOv | ||
|Tux| | lizmat: p6 t/46_eol_si.t | 15:08 | |
psch | like, the only thing i did different was iterating with for over the methods instead of with a while and incrementing a counter... o.o | ||
nine | If it were an obvious thing, you'd have found it already ;) | ||
psch | probably yeah :) | ||
|Tux| | that does NOT run all tests. every run has a different number of tests | ||
must be efbfdaa or 9b579d0 | 15:09 | ||
lizmat | [Tux] : will check it out | 15:20 | |
psch | compiling something that kinda maybe could potentially almost work \o/ | 16:04 | |
the big doubt remaining is "can i actually just call the nested CU main method and don't i have to like pass some program state around..?" | |||
which would be terrible if i had to, but i can easily imagine i'll have to, so there | 16:05 | ||
timotimo | lizmat: wow, 30%, i did not expect this much. nice! | 16:19 | |
psch | grr | 16:32 | |
perl6 habits even propagate into indirect jvm bytecode generation | 16:33 | ||
'cause i compiled three times, trying to fix the same problem in a few ways | |||
but in the end it clearly was just the omitted return | |||
...or not /o\ | 16:52 | ||
well, the return *was* missing, but i still get the same error | |||
codegen over too many abstractions is hard /o\ | |||
lizmat | timotimo: well, it broke Text::CSV | 17:10 | |
now looking at that | |||
timotimo | oh crap :( | ||
anyway, that'll give us a shiny new spec test ): | 17:11 | ||
:) | |||
lizmat | [Tux]: how many test *should* it run? | 17:12 | |
timotimo | 50000 or something? | 17:15 | |
lizmat | timotimo: this is not test-t | ||
it's t/46_eol_si.t of the Text::CSV test-suite | 17:16 | ||
.tell [Tux] looks like the problem existed *before* my patches: first run after re-compile: 693 tests, any other run has 673 tests | 17:23 | ||
yoleaux2 | lizmat: I'll pass your message to [Tux]. | ||
[Tux] | one run had over 750 | 17:33 | |
yoleaux2 | 17:23Z <lizmat> [Tux]: looks like the problem existed *before* my patches: first run after re-compile: 693 tests, any other run has 673 tests | ||
[Tux] | Now I get 703 every run | 17:34 | |
timotimo | oh, oof | ||
[Tux] | 703 looks ok, so I must have misremembered the 750+ | 17:38 | |
rm -rf .precomp; make test | 17:39 | ||
This is Rakudo version 2016.06-25-g9b579d0 built on MoarVM version 2016.06 | 17:43 | ||
test 16.412 | |||
test-t 9.756 | |||
csv-parser 21.924 | |||
703 it is | 17:45 | ||
sortiz | lizmat, a quick question: After fd98fc342 should we assume that Iterator.count-only, still documented, is not more in 6.c? Should its documentation be removed? | 19:39 | |
Asking 'cus, I understand that many of the removed _implementation_ where, in fact, a premature optimization, but at the interface level, still make much sense, IMO. | 19:46 | ||
lizmat | sortiz: the problem is that .elems did not cache, and this confused people | 19:58 | |
and it potentially give a different result from prefix + | |||
(because that *did* cache) | 19:59 | ||
so, until we can figure that one out, having count-only is a premature optimization | |||
so, what I did was basically 2 things: | |||
- remove all internally defined count-only methods | |||
- don't let Seq.elems call count-only on the iterator | 20:00 | ||
sortiz | Yep, that clear, but honestly I wold have preferred resolve the confusion the other way, ie. made numification attempt to count-only fist. | 20:01 | |
lizmat | sortiz: tried that :-( | 20:02 | |
sortiz: which does not mean you shouldn't try :-) | |||
it's just that *I* gave up, and *I* was the only one between pmichaud / jnthn / TimToady to who it made sense | 20:03 | ||
sortiz | The problem I see is that now, a BIG Iterabkeerator | 20:04 | |
lizmat | which is what .cache does | 20:05 | |
sortiz | oops A big iterable, when cached, isn't yet reified but when elems called, that colapse! | ||
unless marked lazy, so now there isn't any more for ask the size without loading, in memory, all the elements. And happens that I has an on-disk Hashish (LMDB) potentially really big. | 20:11 | ||
*a way for ask | |||
lizmat | sortiz: ok, so you're saying you can know the number of elements of an iterator without generating the values? | 20:15 | |
that's not generally true | |||
hmmm... perhaps the default count-only should cache... | 20:16 | ||
sortiz | In all the *DBM files that the case, and all support an Iterable interface. | ||
lizmat | hmmm... lemme think about that | ||
sortiz | *that is | 20:17 | |
lizmat starts paying more attention to Damian's tutorial again :-) | |||
sortiz | Oops, sorry.. CYL& | 20:18 | |
nine | lizmat: so you're finally learning Perl 6? ;) Wish I could join you | 20:24 | |
lizmat | yeah.... finally! :-) | ||
m: multi a() {}; multi a() {}; a # not taking the foirst | 20:46 | ||
camelia | rakudo-moar 9b579d: OUTPUT«Ambiguous call to 'a'; these signatures all match::():() in block <unit> at <tmp> line 1» | ||
lizmat | TimToady: was that what you meant ? | ||
TimToady | only if there are constraints | ||
lizmat | ah, ok | ||
m: multi a("") { say "first" }; multi a("") { say "second" }; a("") # first matching constraint | 20:48 | ||
camelia | rakudo-moar 9b579d: OUTPUT«first» | ||
sortiz | My point of is that, at the interface level, the Iterator role needs a well defined method to ask for its size, even if the default result is Inf or some kind of 'dunno'. | 21:21 | |
Zoffix | 2016.04: Stage parse: 81.936 / Bleed: Stage parse : 56.483 | 21:47 | |
m: say "{(81.936 - 56.438) / 81.936 * 100}% fastar" | |||
camelia | rakudo-moar 9b579d: OUTPUT«31.119410% fastar» | ||
Zoffix | (for rakudo build) | 21:48 | |
timotimo | nice | 21:51 | |
jdv79 | Zoffix: what causes that speedup? | 23:19 | |
Zoffix | ¯\_(ツ)_/¯ general progress? | 23:24 | |
timotimo | someone else got a bronze sponsorship for the butterfly | 23:40 | |
Zoffix | Yeah, saw it :) | 23:51 | |
They fixed my name! |