01:27
evalable6 left,
linkable6 left
01:29
linkable6 joined,
evalable6 joined
04:33
Kaiepi left
04:34
Kaiepi joined
07:10
frost-lab joined
08:37
tbrowder left,
zostay left,
kawaii left,
SmokeMachine left
08:38
chansen_ left
08:49
frost-lab left
08:52
tbrowder joined,
zostay joined
08:53
chansen_ joined
08:56
SmokeMachine joined,
kawaii joined
09:10
sena_kun joined
09:13
chansen_ left,
chansen_ joined
10:11
MasterDuke joined
|
|||
Geth_ | rakudo: usev6++ created pull request #4012: Add missing decont |
10:35 | |
nine | Working on getting zef up and running I seem to becoming to more and more obscure issues. Like the package variable my @herestub_queue; from Perl6::Grammar getting reposessed. | 10:39 | |
Geth_ | rakudo: patrickbkr self-assigned gmake fails on windows github.com/rakudo/rakudo/issues/4009 417ad76c07 | (Christian Bartolomäus)++ | src/core.c/ShapedNArray.pm6 The decont got lost in 18af3f4411. On the JVM backend this lead to RuntimeExceptions because the attribute $!reified was not found. |
10:41 | |
nine | Apart from being a good sign, fixing this to become an attribute instead will also fix an issue with multi threaded compilation. That variable is not protected by any locks. So multiple concurrent compilations could tread on each other's toes if they involve heredocs | ||
MasterDuke | sound like you're closing in on the end | 10:42 | |
nine | I sure hope so | 10:43 | |
MasterDuke | nice | 10:44 | |
10:54
patrickb joined
|
|||
nine | Of course, simply turning it into an attribute doesn't work. That would be too easy | 10:55 | |
Though I have no idea why. AFAICT there herestub_queue is for tracking multiple heredocs opened by a statement. Why would that need to be shared between Perl6::Grammar objects? | 10:56 | ||
timotimo | is there one perl6::grammar instance for every cursor or something? | 10:59 | |
also, mixins and such happen all the time, not exactly sure how that will interoperate | |||
so it could really be a dynamic variable that would fit best? | 11:00 | ||
nine | Luckily one doesn't have to always understand a problem to fix it :) I just moved it into the World's compilation context. That is shared between nested compilations (e.g. BEGIN time EVALs) but not within nested precompilations - which is exactly what I want | 11:04 | |
And this seems to give me a working zef :) | 11:08 | ||
Unfortunately, I don't seem to be the only one to make that X::Whatever error. It's also in JSON::Fast: modules.raku.org/dist/JSON::Fast:c...st.pm6#L67 | |||
This is wrong, isn't it? class Foo { class Bar { } } should create Foo and Foo::Bar, not Foo and Bar, should it? | 11:09 | ||
I seem to remember vrurg++ working on something like this | 11:10 | ||
Yeah, that can't be right: | 11:14 | ||
m: class Foo { class Int::Foo { } }; Int::Foo.new | |||
camelia | ( no output ) | ||
nine | m: class Foo { class Ints::Foo { } }; Ints::Foo.new | ||
camelia | Could not find symbol '&Foo' in 'Ints' in block <unit> at <tmp> line 1 |
||
rakudo: 46477cd271 | (Elizabeth Mattijsen)++ (committed using GitHub Web editor) | src/core.c/ShapedNArray.pm6 Merge pull request #4012 from usev6/shapedarray_fix Add missing decont |
|||
timotimo | ah | 11:16 | |
nine | WTH am I gonna do with this? | 11:18 | |
11:18
Kaiepi left,
Kaiepi joined
11:39
patrickb left
|
|||
lizmat | nine: re class Foo { class Ints::Foo { } }; Ints::Foo.new, could it be that when Ints::Foo is being created, it looks up Foo, finds it outside and decides it doesn't need to do anything wrt to registering it ? | 11:48 | |
nine | Well for multi-part names it's apparently looking for the prefix in all available scopes and uses whatever it finds. Otherwise it's adding the symbol to the current package | 12:06 | |
12:09
Altai-man joined
|
|||
lizmat | prefix? You mean "Foo" in this case ? | 12:10 | |
12:11
sena_kun left
|
|||
nine | No, Int or Ints | 12:19 | |
It does find an Int package in global scope, so adds to that. It doesn't find Ints, so it adds it as Foo::Ints | 12:20 | ||
The behaviour seems to be there since 2011. The comment in install_package says "If we have a multi-part name, see if we know the opening chunk already. If so, use it for that part of the name.". The commit message isn't terribly helpful: "Start to improve and clean up package and type installation to fix some bugs and make various things work that didn't before." | 12:21 | ||
Also funny: | 12:28 | ||
m: class Foo { class Int::Bar::Baz { } }; Int::Bar.^name.say; Int::Bar::Baz.^name.say; | |||
camelia | Int::Bar Foo::Int::Bar::Baz |
||
nine | m: class Foo { class Ints::Bar::Baz { } }; Ints::Bar.^name.say; Ints::Bar::Baz.^name.say; | 12:30 | |
camelia | Could not find symbol '&Bar' in 'Ints' in block <unit> at <tmp> line 1 |
||
nine | m: class Foo { class Ints::Bar::Baz { } }; Foo::Ints::Bar.^name.say; Foo::Ints::Bar::Baz.^name.say; | ||
camelia | Ints::Bar Foo::Ints::Bar::Baz |
||
12:33
patrickb joined
|
|||
lizmat | nine: it looks like my Array::Agnostic module is failing with "Object does not exist in serialization context" on bleed | 12:34 | |
perhaps that rings a bell / could be helpful ? | |||
12:36
entonian joined
|
|||
nine | rr record the run, breakpoint on src/6model/sc.c:121, look what *obj->st is (might give the first clue), otherwise, look at the bt to see if it's a root object or a repossession, set a watch point on the appropriate array, reverse-cont then call MVM_dump_backtrace(tc) to see where it gets added... | 12:38 | |
nine seems to have done that... a lto | |||
s/lto/lot/ | |||
12:43
entonian left
12:44
patrickb left
|
|||
Altai-man | nine, hmm, is rr working on ryzen? | 13:38 | |
oh, I see some patching was done recently to support it | 13:40 | ||
lizmat | nine: I have been able to golf the problem re Object does not exist down | 13:44 | |
it looks like it is specific to trying to pre-compile *anything* with Array:: | 13:45 | ||
note: this seems to be only true for Array:: | |||
Hash::Bar is ok, Int::Bar is ok etc | 13:46 | ||
and it is connected to the Array type, not to the name: constant Foo = Array; class Foo::Bar { } will fail the same way | 13:47 | ||
so I guess it's something inside the Array class that is triggering this | |||
13:51
Kaiepi left,
Kaiepi joined
13:59
Kaiepi left,
Kaiepi joined
14:10
Kaiepi left
14:13
Kaiepi joined
|
|||
lizmat | nine: good news (I guess): it's *not* caused by the latest MoarVM bump | 14:18 | |
that included the internment fixes | |||
nine | lizmat: sounds like one of those really strange issues... | 14:21 | |
Altai-man: github.com/mozilla/rr/wiki/Zen | |||
lizmat | well, the Array class is spread out over many files, and I have been doing work there recently | 14:22 | |
wish I had set up local "test all of my modules" functionality sooner | |||
ah, what I *do* know, is that it got introduced *after* 2020.10 | |||
nine | Now that does narrow it down tremendously | 14:23 | |
lizmat | yeah, because the Github Actions CI use 2020.10 and do *not* report any issues on these modules | ||
MasterDuke | huh, github.com/rakudo/rakudo/blame/mas...1623-L1639 doesn't seem to get called when it's literals on the RHS | 14:42 | |
e.g., `my @a = 1,2` doesn't do it, but `my $a = 1; my $b = 2; my @c = $a, $b` does | |||
lizmat | MasterDuke: unless it's an easy fix, I wouldn't spend too much time on it as the rakuast work will probably throw all of that out | 14:45 | |
MasterDuke | yeah, this was just a distraction | 14:46 | |
nine | zef is actually a pretty interesting case for working on precomp, because a zef install zef has to precompile stuff that's also currently loaded | 15:04 | |
lizmat | nine: looks like ee089234fc0256df54b is the cause | ||
linkable6 | (2020-11-01) github.com/rakudo/rakudo/commit/ee089234fc Expose the Array::ShapedArray role | ||
lizmat | argh, not it isn't :-( | 15:06 | |
huh? | |||
lizmat goes back to further bisecting | |||
aah... it's actually ee089234fc0256df54b **and** 532b5423f0950395af686 | 15:10 | ||
linkable6 | (2020-11-01) github.com/rakudo/rakudo/commit/ee089234fc Expose the Array::ShapedArray role | ||
(2020-11-01) github.com/rakudo/rakudo/commit/532b5423f0 Expose Array::Shaped1|2|3Array roles | |||
nine | Neither of which give a real hint about why it's broken now | 15:11 | |
lizmat | well, before, they were "my" | ||
now their "our" *inside* of another class | |||
that feels like a hint to me :-) | |||
nine | But roles are our scoped by default, which means that's a very common case | 15:12 | |
lizmat | well, maybe because it's in the setting, it's special :-) | 15:13 | |
and usually I'd say roles are top levelly exposed, no ? | |||
nine | not necessarily | ||
lizmat is going to try stubbing these roles | 15:14 | ||
yup, that seems to fix things | 15:17 | ||
nine | But why did the change break something in the first place? | 15:18 | |
lizmat | I have no idea, but I haven't been able to reproduce the problem outside of the setting | 15:20 | |
it all came back on the Array class | |||
adding roles to other core classes, such as a "Int::Foo" role all worked fine | 15:21 | ||
so I guess maybe it has to do with Array having been set up in the bootstrap ? | 15:22 | ||
nine | same's true for Int? | 15:23 | |
lizmat | yeah, but Int doesn't have any roles inside of it | 15:24 | |
nine | Hash does | 15:25 | |
lizmat | ok, lemme see what happens if I un-"my" that :-) | 15:26 | |
in any case, there's no reason to expose those, as they wouldn't have any dispatching benefits | 15:27 | ||
well, in the current naming scheme | 15:28 | ||
nine | And of course its parametrics that makes life just a bit too interesting again | 15:43 | |
Even the returns trait on routines mixes something into the routine which creates a parameterized type. | 15:45 | ||
MasterDuke | hm. the `.value` of this QAST::WVal is a Regex, not its QAST::Regex | 15:46 | |
isn't that one of the reasons `-->` is preferred over `returns`? | 15:47 | ||
or do both do that? | |||
could i get the QAST::Regex with/from the cuid of the Regex? | 15:50 | ||
nine | actually --> seems to do the same | 15:57 | |
But...this issue only appears when the module is precompiled in the same process as it's installed. I.e. a "bin/zef install ." with an empty .precomp works, but a "bin/zef ; bin/zef install ." does not | 16:02 | ||
So I guess it's one of those "add tons of debug output until you see a critical difference" things | 16:03 | ||
MasterDuke | imgflip.com/i/4lkizs | 16:05 | |
nine | yeah :) | 16:06 | |
16:10
MasterDuke left,
sena_kun joined
16:12
Altai-man left
|
|||
Geth_ | rakudo: cb95c6532e | (Elizabeth Mattijsen)++ | src/core.c/Array.pm6 Stub the Array::ShapedXArray roles These roles need stubbing for some reason, otherwise they will cause "Object does not exist in serialization context" error when trying to create something inside the Array class, like the Array::Agnostic role does, which happened after ee089234fc and 532b5423f0. |
16:14 | |
16:19
MasterDuke joined
|
|||
lizmat | nine: confirmed: exposing the TypeHash role creates similar issues with Hash::xxx | 16:20 | |
MasterDuke | nqp: grammar F { token TOP { \d <foo> \d }; token foo { "123" } }; my $a := -1; my $b := 0; my $s := nqp::time_n; while $a++ < 500_000 { $b++ if F.parse($a) }; say(nqp::sub_n(nqp::time_n, $s)); say($b) | ||
camelia | 2.530207872390747 490 |
||
MasterDuke | nqp: grammar F { token TOP { \d <foo> \d }; token foo { "123" } }; my $a := -1; my $b := 0; my $s := nqp::time_n; while $a++ < 500_000 { $b++ if nqp::index($a, "123") >= 0 && F.parse($a) }; say(nqp::sub_n(nqp::time_n, $s)); say($b) | 16:21 | |
camelia | 0.1543412208557129 490 |
||
MasterDuke | timotimo: you had some thoughts yesterday about how to get from the WVal to the QRegex? | 16:23 | |
16:30
leont joined
|
|||
MasterDuke | or any suggestions for, as the above example shows, a way to do this optimization for grammars? | 16:30 | |
nine | Ahh! It works when the module is precompiled in the same process, because after precompilation follows the sc_disclaim, i.e. the types in the parametrics cache are free for grabbing by the precompilation. When the module's already precompiled it gets loaded and remembers the SC it came from | 16:40 | |
So...what if we disclaim all objects we get from the parametrics cache? | 16:43 | ||
lizmat | .oO( I disclaim any responsibility :-) |
16:46 | |
nine | Or maybe less drastic, to disclaim then when we serialize | 16:47 | |
lizmat | alas, my cunning plan making dispatching on objecthashes possible, has failed | 16:57 | |
17:17
go|dfish left
|
|||
Geth_ | rakudo: 1321a8533d | (Elizabeth Mattijsen)++ | src/core.c/Hash.pm6 Simplify Hash parameterization - don't need a Capture, we only call this with 1 or 2 parameters - add checks for "useless" parameterization, such as my Mu %hash - give internal roles different names describing their function better |
17:55 | |
18:01
MasterDuke left
18:34
domidumont joined
18:38
domidumont left
18:58
samebchase- left
18:59
samebchase- joined
19:00
bartolin joined
19:08
gfldex left
19:09
gfldex joined
|
|||
Geth_ | roast: c4741e0954 | (Christian Bartolomäus)++ | S06-signature/shape.t Fix typos in test descriptions |
19:31 | |
19:37
MasterDuke joined
|
|||
Geth_ | rakudo/expose-objecthash-role: 1efb9e9b59 | (Elizabeth Mattijsen)++ | 19 files Expose ObjectHash/TypedHash roles These roles used to be internal to the Hash class. By exposing them it is possible to use them for easy typechecking and dispatch. This makes the rather esoteric check: ... (19 more lines) |
19:50 | |
rakudo: lizmat++ created pull request #4013: Expose ObjectHash/TypedHash roles |
|||
20:09
Altai-man joined
20:12
sena_kun left
22:28
MasterDuke left
23:17
Altai-man left
|