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