01:48
ilbot3 joined
|
|||
dalek | arVM: 45863d1 | jnthn++ | src/core/exceptions.h: Register some further control exceptions. Related to upcoming async features in Perl 6. |
02:30 | |
arVM: ec051f5 | jnthn++ | lib/MAST/Nodes.nqp: Add new control exceptions to MAST::Nodes. |
|||
03:20
ingy joined
07:18
zakharyas joined
08:36
Ven joined
09:13
rarara joined
09:28
rurban_ joined
11:38
FROGGS_ joined
12:26
Ven joined
13:11
brrt joined
13:15
brrt joined
13:26
Ven joined
|
|||
brrt | i just had the luminous (i think, and hope) idea of having a 'conditional block' flag | 13:41 | |
into the register allocator | |||
that signifies that the values and blocks allocated then are used conditionally, and hence should be cleared together | 13:42 | ||
you know what i mean? | |||
timotimo | i think i understand | 13:43 | |
clearing doesn't mean actively nulling, right? just marking as re-usable? | |||
brrt | for conditional blocks, its complicated | 13:51 | |
do you want the long version? | |||
timotimo | only if it helps you advance | 13:52 | |
brrt | (but yes, invalidation doesn't mean you erase their contents, just mark them as safe to use) | ||
timotimo | otherwise i'll likely understand once i get into the finished implementation | ||
brrt | basically, registers can be in one of three states | ||
free, allocated, and used | |||
free means there is no node that refers to them | 13:53 | ||
timotimo | mhm | ||
brrt | allocated means that they are currently inhabitated (as it were) by the value of a node | ||
i.e. the node is held there | |||
actually, hmmm | |||
no, allocated means that it's safe for the allocator to use it | 13:54 | ||
hmm | |||
no, my first instinct was correct, but it means i'll need to make adjustments | |||
anyway, used means the register is currently in use by an operation, and cannot be spilled | 13:56 | ||
timotimo | mhm | 13:57 | |
brrt | an allocated register can be spilled and made free, a used register cannot | ||
must be explicitly released for that to happen | |||
timotimo | right | 13:58 | |
brrt | now i was thinking, what if upon entering a conditional block, i marked it so, so that registers allocated and values calculated within that block can be made 'invisible' upon leaving the block | ||
i.e. have a new 'conditional block' stack, or something like that | 13:59 | ||
hmm | |||
this thing is becoming mighty complicated already... | |||
timotimo | right; i don't think it can be helped very much | ||
brrt | anyway, and i probably need to up-propagate register usage counts for that to work out | 14:00 | |
possibly during the value selection step (the last tiling step) | |||
14:01
synbot6 joined
|
|||
brrt | so that i can also mark a block as possibly invalidating the whole register set (e.g. during calls) | 14:01 | |
timotimo | right | ||
brrt | which sucks, by the way | 14:05 | |
join me in the campaign against function calls | |||
timotimo | heh | 14:06 | |
let's build an x86 meta-interpretor that figures out what registers are used and what registers aren't | |||
and ... other things | 14:07 | ||
14:08
Ven joined
|
|||
brrt | lol | 14:15 | |
no, that's fortunately not necessary :-) | 14:16 | ||
you know, i had a thought yesterday evening | 14:17 | ||
in some 10 years or so, installing an AI discriminator / neural network is going to be as easy as installing MySQL is now | |||
isn't that weird? | 14:18 | ||
timotimo | a bit, yeah | 14:19 | |
but training would still be a bit of an effort, no? | |||
brrt | hmm, probably, but there'll be easy-to-use training wizards, or pre-trained sets | 14:21 | |
training, designing and querying a neural network is likely to be a skill as common as relational or object-oriented modelling is today | |||
although, that may take a few more years | |||
people still suck at SQL. but they'll suck at neural nets in mostly the same way, i think | 14:22 | ||
timotimo | possibly | 14:23 | |
brrt | you know what won't change? the front-end hell :-) | ||
timotimo | %) | ||
brrt | oh, programmers will talk, and whine, and fight little wars over frameworks and standards and build tools... | 14:24 | |
but really? it's still about making things visually appear in a way suitable to our own neural network, trained on fruit picking and predator detection | 14:25 | ||
14:31
colomon joined
|
|||
timotimo | oh yes | 14:42 | |
15:11
tadzik joined
|
|||
brrt | hmmm.... | 15:23 | |
can't do nested ALL or ANY i think | |||
that works out really ugly | 15:24 | ||
15:38
rurban_ joined
16:04
pyrimidi_ joined,
pyrimid__ joined
16:16
Ven joined
16:19
brrt joined
16:44
colomon joined
|
|||
dalek | arVM/even-moar-jit: b870a79 | brrt++ | src/jit/compile.c: Mostly implement branching Except for register/value invalidation, this mostly implements branching, including short-circuiting for ANY/ALL and nested ANY/ALL. |
16:51 | |
brrt | nested ANY/ALL should work now | ||
Ven | brrt++ !! | 16:57 | |
brrt | Ven :-) | 16:58 | |
Ven++, even | |||
Ven | brrt: I'm pretty clueless about the JIT, but I'd love to understand what this means: github.com/MoarVM/MoarVM/commit/b8...f47d18R297 | 17:00 | |
brrt | alright, i can explain that, should be fun | 17:01 | |
you know short-circuit evaluation, right? | |||
if (foo() || bar()) only evaluates bar() if foo() was false | |||
basically, WHEN is a unary conditional block node | 17:02 | ||
i.e. it's equivalent to if (condition) { block; } | |||
(unlike IF and EITHER which are binary, whereby IF yields a value and EITHER does not) | 17:03 | ||
anyway, to implement short-circuit evaluation for the OR case (called ANY here because it is variadic, e.g. takes multiple arguments) | |||
what you need to do is jump into the block after foo() is true | |||
so far so clear? | 17:04 | ||
(and you need to jump beyond the block if you reach the end with bar() being false) | 17:06 | ||
well, that's kind of the logic that determines these things | 17:10 | ||
Ven re-reads another time | 17:13 | ||
brrt | :-) | ||
Ven | yes, that's clear | 17:14 | |
the only part i don't seem to get is the "if/either" being binary | |||
brrt | oh, that's just an IR tree design decision | ||
Ven | and what does it entails? | 17:15 | |
brrt | basically, nodes should best have a fixed number of children, to deal with more easily | ||
Ven | oh, you mean if has some kind of "tails" node | ||
that's there for the "else" part? | |||
brrt | yes, the IF node has two alternatives (the 'true' and 'false' blocks), and WHEN only has a 'true' block | 17:16 | |
obviously WHEN cannot yield a value | 17:17 | ||
Ven | alright, I think I got it :) | ||
thanks. brrt++ # jitting my brain | |||
brrt | ok great :-) | ||
if you have any more questions, be sure to ask | |||
17:50
Ven joined
18:32
ggoebel joined
19:07
zakharyas joined
20:40
colomon joined
21:33
colomon joined
21:53
TEttinger joined
23:01
danaj joined
|