github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm
Set by AlexDaniel on 12 June 2018.
01:03 pamplemousse joined 01:19 pamplemousse left 07:00 sena_kun joined
MasterDuke timotimo: it's from implementing the neither bigint is big branch 07:27
and simplifying `infix:<%>` 07:32
maybe a better test `my $a = 0; for ^10_000_000 { $a += $_ % 3; $a += $_ % -5; $a += $_ % 258 }; say now - INIT now; say $a` gives the same results, but goes from ~5.8s to 3.8s (this is all on my gmp branch, but changing non-(gmp/tommath) code 07:41
currently src/math/bigintops.c is just shy of 600 lines shorter on my branch 07:47
09:42 Altai-man joined 09:44 sena_kun left 10:06 Altreus_ joined 10:08 codesections left, codesections joined, Altreus left
lizmat MasterDuke++ 10:28
11:56 Kaiepi left 11:58 Kaiepi joined 12:08 Kaiepi left 12:11 leont joined, Kaiepi joined 12:16 Kaiepi left
nine I think, there's only one more big stumbling block on the way to in-process-precompilation. It's the type parameterization cache. This cache is vital for correct functioning as multiple parameterizations with the same type and same arguments must result in the same type object. But same object also means that it may come from an earlier compilation. 12:29
timotimo: do you have any idea for me how to get around this?
12:30 Kaiepi joined
timotimo do we have the solution for when something should be shared vs when it shouldn't? 12:32
does scdisclaim do anything useful here?
nine You mean like after we precompiled, sc_disclaim, so e.g. those parameterized types will get added to a future compilation's sc? 12:34
timotimo possibly
i'm operating on not much or at least not good sleep, so kind of cloudy perception and thinking in my head
at least scdisclaim would prevent a CU from depending on an "external" SC "just because" it pulled an earlier cached parameterized type out of the cache 12:35
but when we now load another SC later, the check would still be identity? or only identity of the parameters probably 12:36
nine There's a resolve_param_interns which de-duplicates those types if I understand this correctly 12:40
Intriguingly with the parameterizations, the failure mode is not a superfluous dependency on some different SC but a failure to serialize: STable %s does not exist in serialization context 12:41
timotimo oh, huh. 12:52
maybe whenever we pull something out of the parameterization cache we need to grab its ST and add it to the current compilee's SC
nine I've tried that but didn't get terribly far. Could be a good approach anyway, but I probably luck understanding to make sense of how it goes wrong 12:53
lizmat
.oO( such a small difference between lack and luck )
12:54
nine Hah! Small difference in words, huge difference in results
Oh...scdisclaim does make a difference. It fixes the golfed example, even though it causes "Object of type Block is QAST::Block code object, but not in SC" elsewhere 13:09
13:09 Kaiepi left, Kaiepi joined
timotimo code object, huh? 13:10
nine Also it breaks the parameterized type cache somehow. Type comparisons now fail when done in the process that precompiled the library but succeed in subsequent runs (where we use the already precompiled module) 13:27
lizmat wouldn't the module being precompiled not have a completely different parameterized cache ? 13:32
a clone of the one that existed when the process started ?
aka, make the parameterized type cache a parameter of the precompilation ? 13:33
nine That cache hangs of the STable, i.e. the type description in the VM. 13:34
timotimo ah, right
that's the paramet. attribute in the struct
nine st->paramet.ric.lookup 13:35
13:42 sena_kun joined 13:44 Altai-man left
timotimo just throwing a random thing, does there have to be something special to handle that the parameterizers are usually closures with their own objects they close over? 14:09
nine I don't see much special handling. 14:17
In the spec tests the parameterizer is usually loaded from the setting as those tests parameterize Hash 14:19
timotimo i don't really mean whether we have any special handling, more that it may be needed 14:21
nine Well it's certainly something to keep in mind and something that could keep an additional test 14:26
15:01 domidumont joined 15:20 domidumont1 joined 15:22 domidumont left
nine Fun fact: the scdisclaim op has been added in 2015 but never actually used anywhere 15:26
So it's quite possible that it's even buggy 15:27
16:24 hankache joined
timotimo froggs used it for serializing simple datastructures without causing annoying sc deps 16:25
16:51 hankache left 16:56 pamplemousse joined 17:08 domidumont1 left 17:10 pamplemousse left 17:41 Altai-man joined 17:44 sena_kun left 17:50 domidumont joined 18:03 domidumont left 20:38 Altai-man left 21:07 brrt joined 22:14 brrt left 23:08 leont left