|
github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm Set by AlexDaniel on 12 June 2018. |
|||
| timotimo | not a single spectest trips the oops | 00:54 | |
|
00:55
Kaiepi left
|
|||
| Geth | MoarVM: MasterDuke17++ created pull request #1038: Add smrt intify op |
01:27 | |
| MasterDuke | that one wasn't too bad. rakudo won't be terrible either, but nqp... | 01:46 | |
|
02:18
Kaiepi joined
02:26
Kaiepi left
02:44
AlexDani` joined
02:45
AlexDaniel left
03:14
Kaiepi joined
03:18
lizmat left
03:50
ufobat_ joined
03:54
ufobat left
04:08
AlexDani` is now known as AlexDaniel
04:14
Kaiepi left
04:17
Kaiepi joined
04:43
Kaiepi left
04:44
Kaiepi joined
06:51
domidumont joined
07:27
domidumont1 joined
07:31
domidumont left
07:54
patrickb joined
07:59
patrickb left
08:57
scovit joined
|
|||
| scovit | Hello, how do you free a MVMObject in MoarVM? Or hint it to be GCed? | 08:58 | |
|
09:00
lizmat joined
09:21
zakharyas joined
09:42
robertle joined
|
|||
| jnthn | scovit: You don't explicitly free them | 10:06 | |
| scovit: The GC does a reachability analysis each time it runs, and anything not reachable is freed | |||
| The only way to make that happen sooner is to trigger GC; there's an op for that | 10:07 | ||
| lizmat | jnthn: can you explain the difference between these two: | 10:39 | |
| m: dd Array.HOW; Array.^compose; dd Array.HOW | |||
| camelia | (Perl6::Metamodel::ClassHOW+{<anon>} without .perl method) Perl6::Metamodel::ClassHOW+{<anon>}+{<anon>}.new |
||
| lizmat | it looks like .^compose is mixing in yet another role ? | ||
| is Array not composed then ?? | 10:40 | ||
| jnthn | Hmm, interesting | 10:42 | |
| No, though I wonder if Array has any metamethods? | |||
| (method ^foo() { }) | |||
| lizmat | it has a ^parameterize | ||
| jnthn | If I remember correctly, those get mixed in at compose time | ||
| lizmat | this is about R#2640 | ||
| synopsebot | R#2640 [open]: github.com/rakudo/rakudo/issues/2640 [⚠ blocker ⚠] Some sort of regression in Red module | ||
| jnthn | And it's possible it does it repeatedly | 10:43 | |
| As in, once per .^compose call | |||
| lizmat | m: Array.^compose for ^10; dd Array.HOW # looks like it | 10:44 | |
| camelia | Perl6::Metamodel::ClassHOW+{<anon>}+{<anon>}+{<anon>}+{<anon>}+{<anon>}+{<anon>}+{<anon>}+{<anon>}+{<anon>}+{<anon>}+{<anon>}.new | ||
| jnthn | lol | ||
| Nice | |||
| Yeah, probably we want to somehow drain those at compose time | |||
| lizmat | this seems to fix R#2640 | 10:45 | |
| synopsebot | R#2640 [open]: github.com/rakudo/rakudo/issues/2640 [⚠ blocker ⚠] Some sort of regression in Red module | ||
| lizmat | # temporary fix for R#2640 | ||
| +BEGIN .^compose for Set,SetHash,Bag,BagHash,Mix,MixHash; | |||
| in core_epilogue | 10:46 | ||
| but that feels like a bandaid | |||
| jnthn: the only reason to allow multiple ^compose calls, is augment right ? | 10:51 | ||
| perhaps augment should reset the $!composed flag, and have ^compose be a noop if the $!composed flag is set ? | |||
| :q | 10:52 | ||
| jnthn | I'm not sure what would be recomposing it | 10:54 | |
| Certainly all of .^compose should not be a no-op | 11:10 | ||
| lizmat | datapoint: not doing anything in compose if the class is already composed, breaks the setting | 11:11 | |
| jnthn | That's no surprise | ||
| It means it would totally ignore every augmented in method, and the setting is built out of augments | |||
| lizmat | then what use is composing an already composed class ? | ||
| ok | |||
| but shouldn't an augment then not reset the $!composed flag ? | 11:12 | ||
| and *then* do nothing if already composed ? | |||
| jnthn | There's nothing in the MOP API for that, not to mention that there's already lots of code that just calls things like .^add_method followed by .^compose in the wild | 11:13 | |
| I'd just look for where it applies the meta-methods and see if we can discard them at compose time after mixing them in, so we won't repeat it next time around | 11:14 | ||
| lizmat | well, I guess add_method should reset the flag as well then ? | ||
| jnthn | No, because then you have to do this in numerous methods | ||
| lizmat | and what would be against that ? | 11:15 | |
| jnthn | I don't know why you're trying to change the entire way the API works when there's a single specific problem to solve | ||
| lizmat | I'm not sure either... I thought I found an LTA situation that could be fixed | 11:16 | |
| jnthn | Sure, it can be, by doing what I'm suggesting. | ||
| See Perl6::Metamodel::MetaMethodsContainer | 11:17 | ||
| lizmat | ok, thanks for the hints | 11:18 | |
| jnthn | I suggest adding a %!uncomposed_meta_methods hash, have add_meta_method poke them in to that, and then have compose_meta_methods read from that | ||
| Alternatively, we can just have a flag and not allow one to augment in further metamethods | 11:19 | ||
| lizmat | nah, the first suggestion seems better and more flexible | ||
|
11:33
MasterDuke left
11:55
brrt joined
|
|||
| scovit | jnthn: thanks, I am looking at the object res.o in static char callback_handler, for how long it's content will be reachable? | 12:01 | |
| in other words, what holds its reference? | 12:07 | ||
| jnthn | Well, we're invoking user code there, so in general we can't know if that code stashes a reference somewhere that keeps it alive. But if it's just a return value, then it doesn't look like the code in callback_handler references it any further | 12:08 | |
| Also it doesn't root it in callback_handler, and just relies on the code not itself triggering GC :) | 12:09 | ||
| So technically it could be unreachable after MVM_interp_run, and we just rely on nothing else that follows entering GC | 12:10 | ||
| scovit | then I wonder if also the C function that get the return value might get invalid pointers if the object got GCd? | 12:20 | |
| for instance when we pass it the pointer of a vmarray in MVM_nativecall_unmarshal_vmarray | 12:21 | ||
| jnthn | If another thread was to trigger GC while that C code was running, then yes | ||
| scovit | is it a bug? | ||
| jnthn | Well, what can we do about it? | ||
| scovit | copy all the objects | 12:22 | |
| jnthn | That sounds rather costly | ||
| scovit | also it might be a leak | ||
| jnthn | Right | ||
| That too | |||
| I don't think it's reasonable to expect to write C bindings without at least some knowledge of memory management | 12:23 | ||
| In this case, I'd probably make sure that whatever I return remains referenced for long enough. | |||
| But we can't in general know what "long enough" means | |||
| Sometimes copy might be a good behavior, and we could offer it too | |||
| scovit | I am playing with the idea of a is copy trait, but I was doing it for CStruct passed and received by value. | 12:24 | |
| jnthn | Yeah, I guess it'd be applying to the callback's return value here | 12:25 | |
| lunch, bbiab | 12:26 | ||
| scovit | that would make it become a more general concept, in that case "is copy" alone would not be enough for the "passing by value" stuff | ||
| ok, good lunch! | |||
| lizmat | m: class A { method ^a() {} } # looks like this isn't actually calling ^compose anywhere | 12:36 | |
| camelia | ( no output ) | ||
| lizmat | hmmm... or? | 12:37 | |
|
12:44
zakharyas left
12:49
brrt left
12:59
domidumont joined
13:02
domidumont1 left
|
|||
| jnthn | At compile time on the closing } it would | 13:18 | |
|
13:23
brrt joined
13:28
lucasb joined
14:18
zakharyas joined
|
|||
| brrt | \o | 15:02 | |
| nwc10 | o/ | 15:09 | |
| jnthn | o/ | 15:12 | |
| brrt | of all pieces of the JIT, I'm by far least fond of the register allocator | 15:32 | |
| timotimo | can we just have it all done by the google cloud or something | 15:33 | |
| brrt | hehe | ||
| POST cloud.google.com/simple-register-a...rch=x86-64 | |||
| jnthn | RAaaS | 15:34 | |
| brrt | funny how we never call things 'enterprise' anymore | ||
| jnthn | I'm sure we can get funded | ||
| :P | |||
| brrt | ..oO( Machine Learning optimized register allocation. On the blockchain! ) | 15:35 | |
| jnthn | I'm sure some things still do get called "enterprise", but I think the "enterprisey means it's crap" meme kinda killed it off. :) | ||
| brrt | hehe | ||
| speaking of which, I had a half-assed plan to write a testing tool for MoarVM that'd directly build spesh graphs from a description. With s-expressions of course. | 15:36 | ||
| So the name of this tool should be 'meme' | |||
| timotimo | excuse me, why would it be "meme"? | 15:37 | |
| brrt | moarvm scheme | ||
| timotimo | ooh | ||
| jnthn | haha | 15:38 | |
| Nice | 15:39 | ||
| timotimo | what makes it more interesting to create spesh graphs than to simply create moar bytecode and have it turned to a spesh graph by the usual method? | 15:40 | |
| easier to connect BBs and place handlers maybe? | |||
| than to work with labels? | |||
| brrt | I want to circumvent the whole usual process, is the thing. That's why it'd be a testing tool | 15:41 | |
| timotimo | OK | ||
| brrt | Maybe add a way to specify facts | 15:42 | |
| timotimo | ooh, to go *that* deep into the internals | ||
| brrt | pretty much | ||
| is this a decent GSoC project, or is it too small? | |||
| (I don't care that much about the s-expr syntax, so a student could choose something else) | 15:43 | ||
| timotimo | all i know is projects are always bigger than you expect ;) | ||
|
15:43
domidumont1 joined
|
|||
| brrt | this is true | 15:46 | |
|
15:46
domidumont left
|
|||
| jnthn | I think being able to write unit tests for spesh and JIT would be very helpful | 15:48 | |
| Of course we cover a huge amount with the NQP and Perl 6 test suite | 15:49 | ||
| brrt | this is true. The problem is more that I never quite know which parts are tested | 15:53 | |
| I kind of just hope for the best | |||
| jnthn | The whole approach of spesh is to record stats and hpoe for the best :P | 15:55 | |
| timotimo | true | ||
| jnthn | But yeah, it's true | ||
| Probably there's coverage tools that can tell us a bit more | |||
| timotimo | with more specific tests we can check not only "it doesn't blow up" and "it doesn't misbehave", but also "it does the optimization i was hoping for" | ||
| which will also allow us to see what effects a new optimization has, for example to prevent other kinds | 15:56 | ||
| though it needs more context for that purpose | |||
| for those tests i suppose it'd be enough to run it through spesh and not code-gen and run the code | |||
| which lets us have much more self-contained pieces of code | |||
| hm. it's the old unit test vs integration test thing again | 15:57 | ||
| brrt | yeah. We solely do integration tests, from the perspective of spesh | ||
| timotimo | right. but only the first two kinds i've mentioned earlier | 15:58 | |
| brrt | jnthn: is our GC concurrent, or is it parallel? | ||
| or is it both... | |||
| jnthn | Parallel | 15:59 | |
| timotimo | concurrent GC would be a *great* GSoC project!! | 16:00 | |
| jnthn | Ouch :) | ||
| brrt | heheeh | 16:05 | |
| nwc10 | for some value of summer, possibly Neptune's | ||
| brrt | I'm not sure if neptune has a an orbital inclination | 16:07 | |
| timotimo | right, i think there's only a small number of planets in our solar system that do | ||
| brrt | inclination is actually not the word I'm looking for | 16:08 | |
|
16:16
robertle left
|
|||
| nwc10 | I checked. 30 degrees, apparently | 16:17 | |
|
16:41
domidumont1 left
16:42
zakharyas left
|
|||
| AlexDaniel | nwc10: haha | 17:23 | |
|
17:45
robertle joined
|
|||
| robertle | ls | 17:57 | |
| sorry | |||
|
18:09
Kaiepi left
18:13
Kaiepi joined
18:16
brrt left,
brrt joined
18:28
Kaiepi left
18:29
Kaiepi joined
19:09
Kaiepi left,
Kaiepi joined
19:15
Kaiepi left
19:22
Kaiepi joined
|
|||
| AlexDaniel | robertle: a directory with just one file named “sorry”? :) | 19:27 | |
|
19:28
Kaiepi left
19:29
Kaiepi joined
19:35
lizmat left
19:46
brrt left
20:12
brrt joined
20:21
AlexDani` joined
20:23
AlexDaniel left
20:29
lizmat joined
20:52
AlexDani` left
20:53
AlexDani` joined
21:13
AlexDani` is now known as AlexDaniel
21:17
brrt left
21:58
lucasb left
22:02
sivoais joined
|
|||