releasable6 Next release in ≈1 day and ≈15 hours. There are no known blockers. Please log your changes in the ChangeLog: github.com/rakudo/rakudo/wiki/ChangeLog-Draft 03:00
timo m: try { my Int $lol = "a"; CATCH { .raku.say } } 05:02
camelia Method ContainerDescriptor.raku not found
in block at <tmp> line 1
in block <unit> at <tmp> line 1
timo bisectable: try { my Int $lol = "a"; CATCH { .raku.say } }
bisectable6__ timo, Will bisect the whole range automagically because no endpoints were provided, hang tight
timo, Output on all releases: gist.github.com/c4eefa63a778273e56...0481b9bc86 05:03
timo, More than 3 changes to bisect, please try a narrower range like old=2024.03 new=HEAD
timo too internals-y to have a .gist, .Str, or .raku i suppose 05:11
should the default raku method cope with objects that don't have any of the common stingifiers? 05:12
lizmat m: my Int $lol = "a"; CATCH { .raku.say } 06:09
camelia Method ContainerDescriptor.raku not found
in block <unit> at <tmp> line 1
timo m: my Int $lol = "a"; CATCH { .DUMP.say } 06:11
camelia X::TypeCheck::Assignment<1>(
:desc(ContainerDescriptor<2>(...)),
:symbol("\$lol"),
:operation("assignment"),
:$!got("a"),
:$!expected(Int),
:$!ex(BOOTException<7>(...)),
:$!bt(▶Any)
)
Type check failed i…
lizmat these classes live in src/Perl6/bootstrap.c/BOOTSTRAP.nqp 06:13
timo yeah i saw them
lizmat a .raku method is easily added 06:14
I will be afk for today, so I won't be able to do that today
timo or the default-raku method could check for the existence of a raku method and put something in the result instead of throwing an exception
found something rakuast already does better than non-rakuast 06:15
m: subset file of Str where "a".."h"; class A { has (file $.f, file $.g); }; A.new(f => "x", g => "y")
camelia Type check failed in assignment to $!f; expected <anon> but got Str ("x")
in block <unit> at <tmp> line 1
timo the "expected <anon>" gets the proper name in it when RAKUDO_RAKUAST is turned on 06:16
splitting it into two has statements also makes the name of the type show up
m: Promise.in(1).then({ say "timeout"; exit }); try { say "a".pred; CATCH { default { say DUMP $_ } } } 06:28
camelia Use of uninitialized value element of type Any in string context.
Methods .^name, .raku, .gist, or .say can be used to stringify it to something meaningful.
timeout
in block at <tmp> line 1
Use of uninitialized value element of type Any in …
timo this infinitely recurses while trying to stringify stuff
yeah, it's Failure that's doing it 06:31
m: Promise.in(2).then({ say "timeout"; exit }); sub fails { fail "aaaah" }; say DUMP fails 06:43
camelia Use of uninitialized value element of type Any in string context.
Methods .^name, .raku, .gist, or .say can be used to stringify it to something meaningful.
timeout
in block <unit> at <tmp> line 1
Use of uninitialized value element of type A…
06:48 kjp left
timo it occurs to me that when DUMP uses nqp::where to identify objects it's seen before, and there's a GC run in the middle of running DUMP, then the numbers become invalid / can collide 07:12
07:21 tonyo left, tonyo joined 07:43 kjp joined 07:46 kjp left 07:47 kjp joined 07:50 lizmat_ joined 07:54 lizmat left 07:56 sena_kun joined
timo m: class Tester { has Str $.bar; method yoink { self.new: bar => fails } }; sub fails { "fails".Failure }; my $to = Tester.new: bar => "aha"; for ^3 { try $to = Tester.yoink; say "afterwards: $to.raku()"; }; $*VM.request-garbage-collection xx 6; say "done"; # R4852 08:17
camelia afterwards: Tester.new(bar => "aha")
WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
fails
in sub fails at <tmp> line 1
timo not sure what should be done about this; should attempting to put a Failure into a parameter where it doesn't type-fit blow it up, or should we ask the language user to .self after an operation that may return a Failure? 08:18
blow it up, or defuse it, both would be okay i guess? 08:19
.seen grondilu 08:20
tellable6 timo, I saw grondilu 2023-12-10T16:58:07Z in #raku: <grondilu> m: my @idx = (1;2); say [[1,2,3],[4,5,6],[7,8,9]][|@idx]
08:24 sena_kun left
ab5tract #R4852 09:52
Huh, I thought linkable6 would provide a quick link 09:53
R#4582
linkable6 R#4582 [closed]: github.com/rakudo/rakudo/pull/4582 Fixes `require STUB:file<>` bug #4488
ab5tract There we go
timo but R#4852 definitely exists too and that really is the one i mean 11:56
linkable6 R#4852 [open]: github.com/rakudo/rakudo/issues/4852 WARNING: unhandled Failure detected in DESTROY. No such symbol '<class 'numpy.int64'>'
12:23 dawids joined
timo do we perhaps want to use nqp-m instead of nqp-j to run tools/build/raku-ast-compiler.nqp? it's slow as molasses on the jvm backend for whatever reason 12:44
13:00 greenfork left, patrickb left 13:01 greenfork joined, patrickb joined
[Coke] sneaky but probably fine. 13:20
timo so, i see the NFA crossing huge spans of input. i guess not being able to pass down fates into subrules hurts us a lot here? 13:41
src/Raku/ast/expressions.rakumod
nfa ran from 943 to 96929 in 7532
nfa ran from 1041 to 96929 in 7347
nfa ran from 1260 to 96929 in 7472 13:42
nfa ran from 1855 to 96929 in 7404
that's milliseconds at the end there
13:43 finanalyst left 13:59 dawids left
timo wow that's ... a lot faster huh 14:13
moar: before: 7.41s after: 0.91s 14:16
jvm : after: 10.38s
.o( why am i running this on a hot day ) 14:30
jvm : before: 1634.00s after: 10.38s 14:45
nine What is this magic trick you're using there? 14:46
timo hehe.
do you know the raku ast "compiler"?
nine sure 14:50
timo well, there's this big token called "nqp-code" that "tokenizes" the source
unfortunately, it seems like we're generating an NFA that tends to slurp an extreme amount of input 14:51
in order to decide for one bit; now that bit could be an inner nqp-code which can be very long, or a single identifier or string or comment, which is usually relatively short 14:52
oh, btw, when i say 10.3 seconds that's user time, it's actually running at 363% cpu so it only elapses 3 seconds 14:53
anyway, making the LTM for '(' <nqp-code> ')' and '['...']' and '{'...'}' terminate immediately after the opening paren/bracket/brace removes an immense amount of work 14:54
and that's the story of how i made the ast compiler an extreme amount faster for the jvm backend 14:55
thank you for coming to my LTM talk
nine How do you terminate? a {}? 14:57
timo yup, i put a {} before the <nqp-code>
now i'm not exactly sure why the generated NFA actually made it to the EOF so easily 14:58
it feels like there's some kind of mistake there
i feel like it can't be anything other than the "other" branch that matches <-[{}()\[\]'"\s\w$/>]+ ... surely the \w in there isn't somehow causing it to be able to consume a '}' or ')' or ']'? 15:00
ab5tract timo: wild! I wonder if this means JDK 20+ can finally compile `rakudo-j` 16:48
17:53 finanalyst joined 18:14 sena_kun joined
ab5tract timo: have you pushed your adjustment anywhere? I have to test something in the old dispatcher and would love to not have to wait 30 minutes for the compile :) 19:19
19:20 finanalyst left
Geth rakudo/splice-is-item-again-twice: b2d3b4e1e8 | ab5tract++ | 7 files
[6.e] Dispatch in Array.splice based in `is item` trait

This allows the following to DWIM:
   > use v6.e.PREVIEW;
   > my @a = 1,2,3;
   > @a.splice(1,1,$[7,8])
... (8 more lines)
20:15
rakudo/splice-is-item-again-twice: aabe618c01 | ab5tract++ | 7 files
[6.e] Dispatch in Array.splice based in `is item` trait

This allows the following to DWIM:
   > use v6.e.PREVIEW;
   > my @a = 1,2,3;
   > @a.splice(1,1,$[7,8])
... (8 more lines)
20:17
ab5tract I think that does it..
Couldn't quite get a working version that auto-attached a required revision to the proto 20:18
Geth rakudo/splice-is-item-again-twice: 832337754c | ab5tract++ | 7 files
[6.e] Dispatch in Array.splice based in `is item` trait

This allows the following to DWIM:
   > use v6.e.PREVIEW;
   > my @a = 1,2,3;
   > @a.splice(1,1,$[7,8])
... (8 more lines)
20:33
nine Huh...I don't see a change in the PR 20:36
find_best_dispatchee still does the find_method(nqp::decont(self), 'REQUIRED-REVISION', :no_fallback)); 20:37
Oh...some recent commit broke some 249 RakuAST spectests 20:38
Maybe not! Those tests segfault and at least one of them recovered after deleting all .precomp 20:41
Geth rakudo/main: e69bb58a71 | (Stefan Seifert)++ | src/Raku/ast/statements.rakumod
RakuAST: prohibit multiple CATCH/CONTROL statements per block

Fixes: CONTROL {}; CONTROL {} # to throw
20:44
nine Yep, all's well again. 1143 passing
ab5tract Ah, yeah I fixed that in a version that got stashed, one second 20:52
Oh yeah, that's why it gotstashed, because there's some stupid error about containerdescriptor 21:04
Geth rakudo/splice-is-item-again-twice: 23ecc618fa | ab5tract++ | 7 files
[6.e] Dispatch in Array.splice based in `is item` trait

This allows the following to DWIM:
   > use v6.e.PREVIEW;
   > my @a = 1,2,3;
   > @a.splice(1,1,$[7,8])
... (8 more lines)
21:14
ab5tract that should work.. in fract, it would be possible to just take the approach used in `find_best_dispatchee` and use it in dispatchers.nqp 21:16
21:26 lizmat_ left 21:27 lizmat joined
Geth rakudo/raku-ast-compiler-shorter-LTM: cf48d4f47c | (Timo Paulssen)++ | tools/build/raku-ast-compiler.nqp
drastically speed up raku-ast-compiler.nqp

Terminating the LTM immediately after opening paren, bracket, or brace prevents the NFA from running all the way to the end of the file whenever it encounters an nqp-code token. This makes nqp-m finish the raku-ast-compiler in 4 seconds instead of 1600, and moar is a bit faster, too (but already plenty fast)
21:37
timo i think i might need someone to verify that my findings are actually correct. what if i brok something related to NFA in my nqp? 21:39
ab5tract nine: in fact, the whole thing can be reconfigured so that the trait just updates $!dispatch_info directly, if that seems agreeable 21:53
timo: it’s kind of a shame that we don’t have smoke testing anymore 22:00
Though there probably aren’t enough rakudo-j installations in the wild to gather usable data anyway 22:08
timo i thought we do blin runs before every release? 22:27
22:28 sena_kun left
ab5tract Not with the JVM version, afaik 22:46
releasable6 Next release in ≈19 hours. There are no known blockers. Please log your changes in the ChangeLog: github.com/rakudo/rakudo/wiki/ChangeLog-Draft 23:00