Perl 6 - the future is here, just unevenly distributed

IRC log for #moarvm, 2015-08-19

| Channels | #moarvm index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

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

| Channels | #moarvm index | Today | | Search | Google Search | Plain-Text | summary