Welcome to the main channel on the development of MoarVM, a virtual machine for NQP and Rakudo (moarvm.org). This channel is being logged for historical purposes.
Set by lizmat on 24 May 2021.
00:07 reportable6 left 01:07 linkable6 left, evalable6 left, bisectable6 left 01:10 reportable6 joined, bisectable6 joined 02:08 evalable6 joined 03:41 frost joined 06:07 reportable6 left 06:10 linkable6 joined 07:10 linkable6 left, bisectable6 left, sourceable6 left, greppable6 left, nativecallable6 left, releasable6 left, notable6 left, unicodable6 left, shareable6 left, committable6 left, tellable6 left, coverable6 left, evalable6 left, squashable6 left, benchable6 left, statisfiable6 left, bloatable6 left, quotable6 left 07:11 benchable6 joined, greppable6 joined, linkable6 joined 07:12 tellable6 joined, bisectable6 joined, bloatable6 joined 07:13 notable6 joined, shareable6 joined, sourceable6 joined 07:14 unicodable6 joined 08:08 reportable6 joined 08:11 squashable6 joined, statisfiable6 joined 08:13 releasable6 joined, evalable6 joined, nativecallable6 joined
MasterDuke m: dd Array[Str]("a", "b", "c") 08:44
camelia Array[Str].new("a", "b", "c")
MasterDuke jnthnwrthngtn: why/how does ^^^ work? to me it looks like either a C-style cast or a Python-ish object instantiation 08:45
timo MasterDuke: coverage log says it goes via List.pm6's method CALL-ME, which calles self.new on the argument capture 08:48
MasterDuke huh. do we have a lot of other types that do that? 08:50
timo what exactly, like Int(99)? 08:51
m: say Int(99.0)
camelia 99
timo m: say Int(99.1)
camelia 99
timo m: dd Str(123)
camelia "123"
timo m: dd Hash("a", "b", "c", "d")
camelia Has % = {:a("b"), :c("d")}
timo "Has" :D 08:52
nine MasterDuke: github.com/rakudo/rakudo/commit/90...8e259306a0
MasterDuke huh
i don't know if it's because i haven't finished my first cup of coffee yet, but i'm still surprised 08:53
nine same here, despite the coffee
MasterDuke m: dd Array("a", "b"); dd Hash("a", "b")  #  lizmat two oddities. github.com/rakudo/rakudo/commit/49...0503e2d3e2 caused the "Has", but i'm not sure why the Array one has 'element' instead of '@' 09:03
camelia Array element = ["a", "b"]
Has % = {:a("b")}
MasterDuke 'element' comes from here maybe github.com/rakudo/rakudo/blob/mast...1870-L1874 09:06
09:11 committable6 joined 09:12 coverable6 joined 09:13 quotable6 joined
MasterDuke in the end, getting mimalloc integrated wasn't too terrible. anybody have any thoughts on github.com/MoarVM/MoarVM/pull/1634 ? 09:41
moon-child MasterDuke: might be good to make MVM_strdup instead of going to mi_ versions, so any future changes don't have to track down where those are used 09:44
(and for those, would maybe straight str(n)len -> mvm_malloc+memcpy rather than calling mi_strdup, to further reduce cognitive overhead of a future change. That's not going to be any different from how mi implements it anyway) 09:46
MasterDuke hm, but future changes should be easier, since e.g., switching away from mimalloc would show up the use of mi_* as a compile-time error
moon-child good point
but still requires effort at all, vs _just_ swapping out malloc/calloc/realloc/free
nine Yeah, we may as well go all the way and wrap all mimalloc functions 09:50
Or #define it in that case
MasterDuke simple enough 09:52
nine What triggered the bool -> _Bool change? 09:53
MasterDuke i think it was a type redeclaration 09:55
don't have the error in my scrollback anymore
i could try undoing those now that i'm just including the single static file 09:56
nine Could take the opportunity and #include <stdbool.h> and get bool as it's intended to be
timo ok everybody, turn up your music, because without dB, that's just "stool.h" 09:57
moon-child ugh 10:03
lizmat m: dd [1,2].VAR.name # MasterDuke the origin of "element" 10:15
camelia "element"
lizmat m: dd {:a,:b}.VAR.name # the origin of % 10:16
camelia "\%"
10:20 discord-raku-bot left, discord-raku-bot joined 10:23 Geth__ joined 10:25 Geth left
MasterDuke there are some differences between the implementation of at least .name() and .of() between Array and Hash. i have no idea if those differences are required 10:25
lizmat MasterDuke: github.com/rakudo/rakudo/commit/59929f0a23 10:41
workaround for now
MasterDuke cool. wonder if github.com/rakudo/rakudo/commit/39...5ae8c3f964 can be done for Array also? 10:44
lizmat m: use nqp; dd nqp::getattr([1],Array,q/$!descriptor/).name 10:46
camelia "element"
lizmat I guess it could, let's see
MasterDuke m: use nqp; dd nqp::getattr(Map.new.Hash,Hash,q/$!descriptor/).name 10:50
camelia Use of Nil in string context
in block <unit> at <tmp> line 1
jnthnwrthngtn Array[Int](1,2,3) is a coercion 10:51
Or at least, that's how I'd expect it to work
MasterDuke m: dd 1 10:52
camelia Use of Nil in string context
in block <unit> at <tmp> line 1
MasterDuke lizmat: looks like that 'Use of Nil <...>' warning always happens now 10:53
lizmat yeah, looking at that
MasterDuke github.com/rakudo/rakudo/blob/mast...ap.pm6#L35 where my Map.new.Hash example gets it's 'element' from
*its 10:54
11:01 Geth__ left, Geth joined
MasterDuke jnthnwrthngtn: if i look at the ast of e.g., `sub foo(Int() $a) { say $a };` i see a `Perl6::Metamodel::CoercionHOW`, but the ast of `say Array[Str]("a", "b", "c")` doesn't have any 11:02
jnthnwrthngtn MasterDuke: Possibly raku-call takes care of mapping to any coercion logic 11:03
MasterDuke well, timo was correct that it goes through List's CALL-ME (i added a print in there and it gets triggered) 11:07
jnthnwrthngtn That may be sorta-legacy or at least pre-date when we had more proper coercion stuff 11:08
MasterDuke yeah, the commit nine found introducing it was from 2015 iirc
github.com/rakudo/rakudo/commit/90...8e259306a0 11:09
github.com/rakudo/rakudo/blame/mas...#L913-L916 essentially unchanged since then 11:10
jnthnwrthngtn Correct results by dubious means, I guess... :) 11:12
(Although at the time it was probably the only way)
MasterDuke huh. entirely removing CALL-ME from List still give the same output 11:17
jnthnwrthngtn Cool, so then everything involving the coercion protocol is wired up already :)
iirc, a CALL-ME takes precedence 11:18
If there's not one, the dispatcher looks if it's a type object and if it can do the coercion
nine Removed code is debugged code!
MasterDuke no `Perl6::Metamodel::CoercionHOW` in the new ast though
timo and smaller core setting and less ram and ...
that wouldn't show up in the ast anyway, though?
nine No, it's a runtime thing 11:19
MasterDuke it does for a sub with a coersion parameter, but yeah, that's really not quite the same thing
nine Int() in a place where we expect a type is an object of a CoercionHOW meta class. It's for talking about a specific coercion type. Coercion by itself doesn't actually have much to do with CoercionHOW, its more of an abstract concept. 11:20
MasterDuke cool, spectest passed. guess i should try removing some of those other CALL-MEs to see if it's the same for them 11:24
11:50 Altai-man joined 12:07 reportable6 left 13:10 reportable6 joined 13:59 Geth left, Geth joined 14:10 frost left
MasterDuke wow, there are two new sets of warnings when building moarvm in our CI, but they don't seem to be about any newly added/modified code 14:30
dev.azure.com/MoarVM/MoarVM/_build...&l=240 14:31
dev.azure.com/MoarVM/MoarVM/_build...&l=216 14:32
dev.azure.com/MoarVM/MoarVM/_build...&l=268 14:33
oops, four new sets
vrurg Looking for an advise. I'm considering splitting Junction into subclasses – one for each kind of junction. This would allow to shrink methods like Bool and ACCEPTS to a couple of ops possibly improving their inlinability. Does it make sense to play with this? 15:00
[Coke] Would that break any spectests? 15:04
if it can be hidden as an implementation detail, seems reasonable.
vrurg [Coke]: I don't know if it would break anything. That's why it's going to be an experiment. 15:05
But if the methods currently fit into inline limits nicely then there might be no reason to waste time on this. 15:06
MasterDuke do you have some benchmarks you've looked at spesh logs of? or maybe MVM_SPESH_INLINE_LOG will give more useful data 15:08
vrurg MasterDuke: never done it before. Looks like it is the time to start. :) 15:09
15:29 Geth left, reportable6 left, discord-raku-bot left, quotable6 left, coverable6 left, committable6 left, nativecallable6 left, evalable6 left, releasable6 left, statisfiable6 left, squashable6 left, unicodable6 left, sourceable6 left, shareable6 left, notable6 left, bloatable6 left, bisectable6 left, tellable6 left, linkable6 left, greppable6 left, benchable6 left, sena_kun left, [Coke] left, MasterDuke left, bartolin left, Kaiepi left, leedo left, ugexe left, camelia left, dogbert11 left, moon-child left, SmokeMachine left, nebuchadnezzar left, leont left, jnthnwrthngtn left, rba left, JRaspass left, jdv left, Altai-man left, kjp left, Voldenet left, gfldex left, psydroid left, TempIRCLogger left, ilogger2 left, nine left, vrurg left, Nicholas left, samcv left, timo left, rypervenche left, tbrowder left, Util_ left, codesections left, harrow left, samebchase left, japhb left, lizmat left 15:32 timo joined, samcv joined, vrurg joined, Nicholas joined, nine joined, ilogger2 joined, codesections joined, Util_ joined, tbrowder joined, rypervenche joined, rba joined, jnthnwrthngtn joined, leont joined, camelia joined, nebuchadnezzar joined, SmokeMachine joined, moon-child joined, ugexe joined, dogbert11 joined, MasterDuke joined, leedo joined, Kaiepi joined, bartolin joined, [Coke] joined, sena_kun joined, benchable6 joined, greppable6 joined, linkable6 joined, tellable6 joined, bisectable6 joined, bloatable6 joined, notable6 joined, shareable6 joined, sourceable6 joined, unicodable6 joined, squashable6 joined, statisfiable6 joined, releasable6 joined, evalable6 joined, nativecallable6 joined, committable6 joined, coverable6 joined, quotable6 joined, discord-raku-bot joined, reportable6 joined, Geth joined, harrow joined, samebchase joined, JRaspass joined, jdv joined, TempIRCLogger joined, AlexDaniel left 15:33 japhb joined, lizmat joined
Nicholas MasterDuke: newer MIPS system has a newer gcc. It too has no __atomic_load_8 etc. 15:33
15:33 Altai-man joined, kjp joined, Voldenet joined, gfldex joined
Nicholas one needs to add -latomic to the link command line 15:33
for moar. for nqm-m. and I guess for rakudo-m
but meanwhile, on arm32 15:34
Thread 1 "moar" received signal SIGSEGV, Segmentation fault.
deserialize_callsites (rs=0xb6388680, cu=0x1, tc=0xb6010080) at src/core/bytecode.c:900
900 if (!callsites[i]->is_interned) {
(gdb) p callsites[i]
$2 = (MVMCallsite *) 0x0
so, that's a bug of some sort.
vrurg NQP and Rakudo puck up their compile options from moar backend config. 15:35
MasterDuke huh. thanks for checking
Nicholas ah OK, so it could be fixed in one place
vrurg I hope so.
Nicholas anyway, sparc64 builds OK
everything else fails early in some way currently
everything else tried taht is 15:36
need to go AFK
will try aarch64 linux later. And the M1 Mac. To see what 64 bit ARMs think 15:37
MasterDuke so it looks like there's a combination of: actual bug (maybe upstream), build options we need to (and most likely can) set, and build problems we can't work around but are potentially fixable if one is willing and able to upgrade packages on the system 15:38
i would say the first two definitely need to be addressed. personally i'm ok with the third 15:41
lizmat vrurg: In the past I tried playing with Junctions like that, it did not end well 15:44
but things have changed since then, so more power to you if you get that working
nine Nicholas: that cu=0x1 looks fishy already. That's supposed to be a MVMCompUnit* 15:45
vrurg lizmat: won't be asking what went wrong for you as to not get biased from the start. :) 15:47
lizmat vrurg: if it fails, it's probably in a different way than then anyway :-) 15:48
MasterDuke looks like cpython is experimenting with mimalloc also. maybe we can steal something from them github.com/python/cpython/pull/29123 15:49
lizmat if I recall correctly, the main failure mode was a lot of places where expecting nqp::eqaddr((1|2).WHAT,Junction) to be True
jnthnwrthngtn If it's just about opt, then probably it's possible to write a dispatcher that guards on the type attribute inside of the Junction object 15:50
vrurg Dispatcher would limit it to moar only. Though if JVM doesn't inline then it probably doesn't worth trying. 15:56
MasterDuke Nicholas: `3rdparty/mimalloc/include/mimalloc-types.h:42:#define MI_SECURE 0` do you mind trying with that set to 4 instead? 15:58
vrurg I also have a guess that guarding on a type object is slightly faster than guarding on an attribute value. 16:02
jnthnwrthngtn After JIT/spesh maybe not all that much 16:03
Also note that a type explosion will potentially turn monomorphic callsites (just Junction) polymorphic too, which also prevents inlining 16:05
vrurg This is certainly the last nail into coffin. 16:07
Will refocus on dispatchers. I wanted to have smartmatch optimizations based on dispatchers anyway. 16:09
jnthnwrthngtn: One last request. If you get some spare time for github.com/Raku/problem-solving/is...-912087363 (just that comment only) and tell if it makes sense to you. 16:10
Any time. It's no rush at all.
jnthnwrthngtn OK. Alas, maybe not this week if it needs much thinking, I'm buried in $other-job this week still :( 16:11
vrurg As I said, no rush. It's waiting since Sep anyway. The related PR is at low risk of merge conflicts because barely anybody else works with pseudostashes. 16:13
16:20 discord-raku-bot left 16:21 discord-raku-bot joined 16:37 discord-raku-bot left 16:38 discord-raku-bot joined 17:26 AlexDaniel joined 18:06 linkable6 left, reportable6 left 18:08 reportable6 joined, linkable6 joined 18:40 Altai-man left 18:41 squashable6 left 18:44 squashable6 joined 20:19 linkable6 left
Geth MoarVM/C11-mimalloc-swings-and-roundabouts: 7 commits pushed by (Daniel Green)++, (Nicholas Clark)++ 21:03
21:03 psydroid joined
22:33 Geth left 22:34 Geth__ joined 22:49 sena_kun left 22:51 sena_kun joined 23:19 Geth__ left, Geth joined 23:20 RakuIRCLogger__ left