01:04
vendethiel joined
01:48
ilbot3 joined
02:39
colomon joined
03:00
prammer joined
03:14
prammer joined
05:28
ilbot3 joined
05:39
pyrimidine joined
06:16
FROGGS joined
06:52
colomon joined
07:40
brrt joined
|
|||
brrt | \o | 07:49 | |
FROGGS | o/ | ||
nwc10 | o/ | ||
brrt | you're all very awake today | ||
FROGGS | I just pretend that I am :/ | 07:50 | |
brrt | that's also a good strategy | 07:51 | |
08:02
zakharyas joined
|
|||
brrt | hmmm | 08:16 | |
this... sucks | 08:17 | ||
i plug a hole here, it reappears there | |||
FROGGS | is this about rats or abotu programming? | 08:26 | |
about* | |||
brrt | programming | 08:28 | |
nwc10 | at least it's not about coffee | ||
FROGGS | well, in some way every cup has at least one hole | 08:29 | |
nwc10 | I claimed that the problem with my beer glass was that it had a hole, and hence the beer escaped | ||
and Joseph (who doesn't exist) observed that topologically, it doesn't | |||
and he's right | |||
(Next time, I need to find a glass with a handle) | 08:30 | ||
FROGGS | O.o | ||
===SORRY!=== ===CONFUSED=== | |||
nwc10 | FROGGS: "picture" of Josef on vienna.yapceurope.org/ye2007/team.html confirms the doubtfulness of his existence | 08:31 | |
FROGGS | *g* | 08:36 | |
brrt | lol | 08:37 | |
09:22
vendethiel joined
09:28
brrt joined
|
|||
jnthn | brrt: I was pondering write barrier JIT a bit | 09:29 | |
brrt | aye | ||
i'm listening | |||
nwc10 | \o/ jnthn bootstrapped! | ||
jnthn | brrt: And we know a few things about them that let us cheat quite hard and have better code, maybe... | ||
brrt | ok, i'm listening | ||
nwc10 was worried about holes in the coffee system | |||
brrt | summer has failed to bootstrap here | 09:30 | |
jnthn | We know (a) hitting is rare, and (b) yes it's a C function we call if we miss, but it never will trigger a GC so we don't need to spill to correct MoarVM registers | ||
nwc10 | brrt: it has here: www.bbc.com/weather/2761369 | ||
(and the previous weeks, but we were in the UK avoiding it) | |||
brrt | wat, 36C | ||
nwc10 | it does that here. | 09:31 | |
there isn't a nearby sea to keep things cool. | |||
jnthn | So we could in theory emit write barriers as checking if we'd hit it, and if so pushing the object in question to the stack, pushing our current PC to the stack, jumping to a single handler at the end of the JITted machine code that saves all callee-save registers unconditionally and calls the write-barrier funtion | 09:32 | |
nwc10 | be more worried that the temperature drops no lower than 27ā°C overnight | ||
jnthn | *function | ||
(And then we always emit that code at the "tail") | 09:33 | ||
We know we can get away with it since we'll never need the MoarVM register bank to be in good shape. | 09:34 | ||
And we can not worry about wasting time saving too much as it should be relatively uncommon. | |||
jnthn hopes this isn't a really dumb suggestion for some reason he's not seeing yet :) | 09:35 | ||
brrt | no, it's a good idea | 09:38 | |
however, it'd mean 'upping' the write barrier in the expr ir from macro to full node | 09:39 | ||
but, i like it | 09:40 | ||
jnthn | Explain the "upping"? | ||
brrt | a write barrier would have to be a primitive node, as far as i can tell | 09:42 | |
rather than a macro for a tree | |||
nwc10 | it's just occurred to me - how is the *implementation* of Rakudo doing, by this criteria? www.wired.com/2012/06/beard-gallery/ | ||
brrt | i'm working on it, nwc10 | 09:43 | |
nwc10 | my thought was promted by | ||
brrt | jnthn also has a significant contribution in that regard | ||
nwc10 | 09:40 < masak> so now I simply don't see the point. | ||
and wondering if masak needs more moustache. And then remembering that he has a beard | 09:44 | ||
brrt | www.wired.com/wiredenterprise/wp-co...al-two.png | 09:46 | |
aha, i've got it | 10:01 | ||
pfew | |||
jnthn | brrt: The bug you were hutning? | 10:03 | |
*hunting | |||
brrt | yes | ||
it seems | |||
long story short | |||
an IF (expression IF, not statement if, that's called WHEN) tries to spill registers before starting | 10:04 | ||
the THEN and ELSE parts will *invalidate* registers before doing so | |||
eh, after | |||
basically, after you've reached the end of the IF, you can't really be sure whether you took THEN or ELSE, right | 10:05 | ||
they're just basic blocks in that regard | 10:06 | ||
(i'm pondering adding a 'basic block' abstraction into the tree, to be used for register allocation) | 10:07 | ||
anyway, the values used in the THEN and ELSE statement may refer to those computed in the IF statement | |||
hence, the spill should come after the condition, not before the IF | 10:08 | ||
not sure if making sense, but there it is | |||
jnthn | yeah, makes sense. | 10:11 | |
dalek | MoarVM/even-moar-jit: b78261f | brrt++ | src/jit/ (2 files): | 10:22 | |
MoarVM/even-moar-jit: Emit spill should come after IF condition | |||
MoarVM/even-moar-jit: | |||
MoarVM/even-moar-jit: The condition part of an IF expression is always taken, and may | |||
MoarVM/even-moar-jit: be the first time a value is computed. Thus, values need to be | |||
MoarVM/even-moar-jit: spilled there because they may be invalidated elsewhere. | |||
MoarVM/even-moar-jit: | |||
MoarVM/even-moar-jit: In general the logic of 'invalidation' and 'spilling' is much | |||
MoarVM/even-moar-jit: to simplistic, because the value may also be computed during | |||
MoarVM/even-moar-jit: traversal to any other node, and if invalidated the traverser | |||
MoarVM/even-moar-jit: is not willing to revisit it. (Thus, the value may be lost an | |||
MoarVM/even-moar-jit: incomputable). | |||
brrt | i'd argue that 90% of my work this week is of the building-to-throw-away type | 10:23 | |
it's .. understandable on a high level that this should be so, but at the same time quite frustrating | |||
jnthn | You may still come out ahead | 10:25 | |
In so far as when you replace this with the clever thing, you'll know any bugs are in *it*, not elsewhere in the stack. | |||
brrt | yeah, that's the plan :-) | 10:26 | |
also gathering knowledge on whats actually needed in our case | |||
10:29
cognominal joined
|
|||
brrt | lunch & | 10:38 | |
10:39
xiaomiao joined
|
|||
[Coke] | (picture of josef) Holy crap, it's Leo! | 13:04 | |
nwc10 | [Coke]: I'm not sure what Leo's doing in his spare time these days | 13:06 | |
timotimo | i'm increasingly feeling the need/interest for building a web app for spesh log analysis | 13:28 | |
i wonder if the spesh log should grow a second mode where it outputs json or if should just output json by default | |||
nwc10 | to output well-formed JSON you'd need to add a closing ']' at program exit time? | 13:37 | |
timotimo | i'm actually thinking of evil invalid json with "stanzas" | 13:38 | |
but AFAIK you wouldn't attach to the spesh output during a live program anyway | 13:39 | ||
nwc10 | there seem to be some de-facto standards: en.wikipedia.org/wiki/JSON_Streaming | ||
timotimo | ah, neato | 13:42 | |
"send json objects formatted without newlines" - nope. nope. nope. | |||
i want to retain *some* readability for hoomans | |||
that jq tool that's mentioned in the article seems helpful in that regard | 13:45 | ||
if you want to grep stuff, schwartzian it through jq | |||
masak | newlines tend to clog up the tubes. they're very tall, vertically. | ||
they get stuck easily in bends. | 13:46 | ||
timotimo | that's no good, then | ||
what about | characters? | |||
how do pipes fit into tubes? | |||
worst case they just let all the rest flow through themselves and hardly move forward at all | 13:47 | ||
your code ends up missing all | characters and a day later they all arrive as one long pipe inside the tube | |||
13:53
FROGGS joined
14:37
brrt joined
15:13
JimmyZ_ joined
17:13
FROGGS joined
20:35
raiph joined
|
|||
timotimo | ah, i just stumbled upon why prefix:<!> with a native int won't turn into good code ... | 22:11 | |
box_i boxes the native int into an object that has the boolification mode BIGINT | |||
so i can build a mode for the bigint boolification that checks for KNOWN_BOX_SOURCE | 22:12 | ||
22:19
TEttinger joined,
vendethiel joined
|
|||
timotimo | jnthn: under what circumstances can we throw out a bindlex_no? we have one that binds &?ROUTINE for pretty much every routine-level piece of code | 23:02 | |
23:49
raiph joined
23:52
xiaomiao joined,
vendethiel joined
|