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 |