01:31 dalek joined 02:13 FROGGS_ joined 02:48 ilbot3 joined 04:26 geekosaur joined 04:31 geekosaur joined 04:35 geekosaur joined 07:03 geekosaur joined 07:38 domidumont joined 07:45 domidumont joined
dalek arVM/even-moar-jit: 0764f9f | brrt++ | src/jit/linear_scan.c:
Free spilled and values arrays

ASAN rightly complains about me spilling memory.
09:19
arVM/coroutine: 3da6c00 | (Jimmy Zhuo)++ | / (19 files):
Add basic coroutine implementation.

This will a little more cheap than one shot conituation version, becase it saves more stacks and invocation according to Revisiting Coroutines.
  See www.inf.puc-rio.br/~roberto/docs/MCC15-04.pdf for further reading.
09:35
JimmyZ ^^ my experiment, doesn't work and segfault. 09:36
dalek arVM/coroutine: 033d34b | (Jimmy Zhuo)++ | src/core/ (2 files):
fix to run a simple test
10:12
JimmyZ ^^ this only for nqp -e 'my $coro := nqp::corocreate( { nqp::coroyield(2);}); say(nqp::cororesume($coro, nqp::null));' 10:14
samcv doesn't work and doesn't segfault you mean? 10:17
or doesn't work and segfaults? or works and doesn't segfault?
JimmyZ only works for above test ,haha 10:23
co-workers are welcome :) 10:24
dalek arVM/even-moar-jit: 71152c9 | brrt++ | src/jit/compile.c:
Remove stderr spam in compile.c
11:13
jnthn lowlevelbits.org/java-papers/ # some other potentially applicable papers 13:01
I need to read that coroutines one properly too; skimmed, it seems quite interesting. 13:07
timotimo wow, 2004? that's really fresh! 13:08
jnthn :P
timotimo as far as compsci papers go
i'm not sure i know what "full asymmetric" means in the context of coroutines 13:09
jnthn It does make the (I think reasonable) point that with a coroutine you allocate the coroutine object once and use it many times, while with continuations it's one per time you "yield"
timotimo hm, but that's already the difference between coroutines and continuations i thought 13:10
hm
though that's more like "one point where you yield from" vs "multiple points you can yield from" perhaps?
jnthn Yeah, but brings home the GC costs quite clearly. :)
timotimo i ... dunno? 13:11
jnthn Thing is, though, I find it easy to think of a continuation as something we can just take and invoke on another thread.
timotimo mhm
jnthn Since you've just sliced off a bunch of stack frames, and can re-instate them wherever you want
Which is exactly what we want for non-blocking await
timotimo right, we do 13:12
jnthn And under this model only things that `await` pay the cost of allocation for doing so
We can't really know from the "outside" if something is going to await, so we'd need to allocate a coroutine for every scheduled bit of work. It's a lot less predictable than gather/take in that sense, where you can assume that if somebody wrote gather, they're gonna take, probably quite a lot. 13:14
timotimo oh, so the difference is that we don't "create" a costly coroutine object from the start which may or may not be used ever
jnthn Yeah
timotimo right
jnthn So it's an interesting trade-off
On the other hand, many gather/take usages are in eager contexts where we don't yield every time (that got optimized away in the GLR refactor) 13:15
So it's only the truly lazy uses of gather/take that benefit.
(From switching to a coroutine model) 13:16
Which may still be worth it, of course.
timotimo lik dis if you yild everytim
13:19 brrt joined
brrt .tell japhb there are some things left before i can call the register allocator 'fully functional' 13:20
yoleaux2 brrt: I'll pass your message to japhb.
6 Jan 2017 17:39Z <japhb> brrt: Now that you have a working register allocator, what's left before you can merge that branch?
brrt .tell japhb specifically, i need to test handling PHI resolution, and i need to implement the magic that does call argument setup, preferably in a cross-platform way 13:21
yoleaux2 brrt: I'll pass your message to japhb.
jnthn Ah, 'cus calling convs differ between POSIX and Windows... :) 13:22
timotimo aye
you can also freely mix-and-match inside a program
most notably, WINE will do something like that
not sure if the linux-on-windows10 thing does anything like that, or if it requires all the stuff to be built for that platform in order to work 13:23
"partial continuations" ... is that what we have, where we have the outer continuationcontrol that defines where the continuation slice starts? 13:26
brrt indeed, the calling conventions differ, and i've also mostly separated the architectures, and i want to maintain that somehow 13:30
anyway, after that, we can realistically start talking about merging 13:31
btw, ASAN is not happy about extop register buffer allocation. i know how to solve that though...
but that will have to wait until i have time
dogbert17 jnthn: about the free-spesh-log-slots branch, I checked it out and tried both htmlify.p6 and the RT code example. Perhaps that wasn't the right way to do it because I can't see any significant improvements in memory usage.
brrt see you later 13:32
jnthn dogbert17: That was only one part of the reason for higher memory use, and alone without some of the other PRs may not make a big difference. 13:36
dogbert17 jnthn: ah that explains it, many thanks 13:38
jnthn: so when are you going to release these changes? 13:39
jnthn Well, I was hoping they might get some code review :P 13:40
timotimo i'm not sure i can provide anything beyond basic "yup, looks good", which the compiler could also do :P 13:41
and maybe spelling
it's annoyed me a bunch in the past that python's generators aren't stackful 13:42
jnthn timotimo: Well, last week I managed to commit something that null-checked the wrong pointer, then deref'd it, and one of the PRs I put up fixed that, but it's not like it'd have needed deep knowledge of the code to spot that one. :) 13:43
timotimo ah
jnthn So spotting small mistakes is certainly worthwhile :)
timotimo so ... how did "hurl"ing pull requests originate? %) 13:53
jnthn timotimo: Why did I decide to put them up as PRs? Just because I wanted to see if this workflow could help us improve quality and also help spread understanding of the codebase. :) 13:55
timotimo no i mean
why do we say "hurl"
jnthn Oh
'cus it's got url in it? :P 13:56
timotimo that's good 'nuff for me
the change of moving fixed_size_free of frame->env from before continuation_free_tags to after it seems superfluous :P 13:58
since continuation_free_tags doesn't seem to look at env
jnthn hmm :) 14:00
timotimo look, i'm reviewing! 14:01
view, i'm relooking!
jnthn Yeah, think that's an accident from removing/re-instating it :)
14:01 FROGGS_ joined
jnthn leave a comment, I can tidy it 14:02
lunch; bbiab
JimmyZ jnthn: finishing the coro branch is really hard to me, haha. it has many tricky thinks about exception and frame . 14:03
*things
and the java papers look good 14:04
timotimo oh, cool, when the frame is no longer in dynamic scope we can also ignore the args buffer in gc 14:05
i haven't looked yet if we clear those out whenever we remove a frame from dynamic scope
JimmyZ re PR: postgresql takes many months to review a *good* patch. 14:13
timotimo um, yeah, that's what args_proc_cleanup does 14:18
but that's only called from frame_destroy and remove_one_frame, is that enough? 14:20
jnthn timotimo: I believe so. A frame was either never in dynamic scope, or if it ws can only die in two ways: via remove_one_frame, or by ending up in a never-invoked continuation and getting GC'd. 14:56
timotimo good 15:01
my somewhat shallow review is thus complete
samcv morning jnthn 15:10
timotimo i wonder if we win anything if we make marking thread blocked/unblocked cheaper as long as there's no user threads 17:48
jnthn evening, samcv 18:26
jnthn was away playing a game and freezing his hands in the nippy weather
18:37 zakharyas joined
japhb
.oO( WOPR: "Would. You. Like. To. Play. A. Game?" )
19:20
yoleaux2 13:20Z <brrt> japhb: there are some things left before i can call the register allocator 'fully functional'
13:21Z <brrt> japhb: specifically, i need to test handling PHI resolution, and i need to implement the magic that does call argument setup, preferably in a cross-platform way
japhb Ah, interesting. Oh well, I was hoping to have something to play with this weekend. :-) 19:22
jnthn The game and the freezing weather were unrelated, fwiw. :-) 19:28
japhb Ah. I figured it implied that your game was e.g. a snowball fight. :-) 19:29
japhb returns to coding the dragon battle 19:30
jnthn Heh, no, the game was Ticket To Ride Switzerland. And the freezing hands was because somehow I thought it would be nice to make some photos of the snowy weather. :-) 19:33
japhb I didn't realize TTR had a Switzerland-specific variant. I've played U.S. and general Europe, but that's it. 19:34
jnthn I never played the U.S. one. Have the general Europe one, which is fun, but the Switzerland one is even more so. It comes with the India extension. 19:35
japhb Those are ... disjoint. That's an odd pairing. But I guess makes the extension more valuable. 19:36
jnthn Yeah, it's a tad odd. They sell it primarily as the India variant which happens to include Switzerland, but we actually really wanted the Switzerland one.
japhb heh
timotimo giving mark_thread_*blocked an extra path when there's no user threads doesn't show an improvement for the core setting 20:22
jnthn I'd be surprised, we don't hit it that often 21:12
21:28 ilbot3 joined
timotimo you think? :) 21:53
t.h8.lv/telemeh.log - check it out for a rough idea (this is from core setting parse, aborted it a short while into optimize) 21:59
i haven't put in the effort to translate the cycle counts into seconds 22:06
23:44 Geth joined