timo | github.com/rakudo/rakudo/issues/5358 might be able to be closed now. should we ping the original reporter to hear if the solution is satisfactory? | 01:09 | |||||||||||||||||||||||||||||||||||||
Geth | nqp/main: 19bf6eccc0 | (Daniel Green)++ | src/QAST/Block.nqp Use a local for a somewhat hot class member access |
01:18 | |||||||||||||||||||||||||||||||||||||
nqp/main: 01a4822ea8 | MasterDuke17++ (committed using GitHub Web editor) | src/QAST/Block.nqp Merge pull request #839 from MasterDuke17/make_a_local_for_yet_another_somewhat_hot_class_member_access Use a local for a somewhat hot class member access |
|||||||||||||||||||||||||||||||||||||||
02:53
librasteve_ left
|
|||||||||||||||||||||||||||||||||||||||
Geth | rakudo/more_locals_instead_of_class_members: c4f67baa77 | (Daniel Green)++ | src/Perl6/Optimizer.nqp More locals instead of class members |
04:25 | |||||||||||||||||||||||||||||||||||||
rakudo/more_locals_instead_of_class_members: 4e9bf1b66a | (Daniel Green)++ | tools/templates/NQP_REVISION Bump NQP for more using-locals nano-optimizations |
|||||||||||||||||||||||||||||||||||||||
rakudo/main: 81d59d64ed | (Daniel Green)++ | tools/templates/NQP_REVISION Bump NQP for more using-locals nano-optimizations |
04:26 | ||||||||||||||||||||||||||||||||||||||
rakudo: MasterDuke17++ created pull request #5787: More locals instead of class members |
04:30 | ||||||||||||||||||||||||||||||||||||||
[Tux] | Rakudo v2025.01-98-g81d59d64e (v6.d) on MoarVM 2025.01-24-g21d96b374
|
07:49 | |||||||||||||||||||||||||||||||||||||
tux.nl/Talks/CSV6/speed4-20.html / tux.nl/Talks/CSV6/speed4.html tux.nl/Talks/CSV6/speed.log | 07:50 | ||||||||||||||||||||||||||||||||||||||
08:25
sena_kun joined
|
|||||||||||||||||||||||||||||||||||||||
Geth | rakudo/main: 99500a5db2 | MasterDuke17++ (committed using GitHub Web editor) | src/Perl6/Optimizer.nqp More locals instead of class members |
08:34 | |||||||||||||||||||||||||||||||||||||
lizmat | looks like that last one shaved about 20% off of stage optimize in core.c setting | 08:39 | |||||||||||||||||||||||||||||||||||||
ab5tract | Wow! | 08:45 | |||||||||||||||||||||||||||||||||||||
lizmat | meh... it was a fluk... more like 2% on the next run... | 09:18 | |||||||||||||||||||||||||||||||||||||
I still wonder how these differences come about | 09:19 | ||||||||||||||||||||||||||||||||||||||
Geth | rakudo/main: abb92d96c5 | (Elizabeth Mattijsen)++ | 2 files Make Blob ~ Blobx take lefthand type in 6.e Reported in #5071: having it produce a Buf if the types on either side are differently parameterized, felt weird as in other such cases the type on the left-hand side of the infix will be produced. This is now the case in 6.e. Sadly, the revision-gated mechanism could not be used. Adding it to the proto broke setting compilation, and applying it in the core epilogue made the core setting compiliation infiniloop (probably because it is using infix ~ somewhere inside). |
09:25 | |||||||||||||||||||||||||||||||||||||
ab5tract | lizmat: any reason you don’t feel like fixing/updating revision gating when you encounter issues like this? | 10:32 | |||||||||||||||||||||||||||||||||||||
lizmat | I fear it would take me a lot of time to get into the revision-gated logic right now | 10:33 | |||||||||||||||||||||||||||||||||||||
and I'm seriously considering taking a stab at the binder at some point | 10:34 | ||||||||||||||||||||||||||||||||||||||
ab5tract | Well the alternative is to keep pushing things that “should” be revision gated but aren’t | ||||||||||||||||||||||||||||||||||||||
lizmat | true, but at least these are localized to src/core.e/Fixups | 10:35 | |||||||||||||||||||||||||||||||||||||
ab5tract | How does the binder come into play here? It’s not used in dispatch unless things are very odd | ||||||||||||||||||||||||||||||||||||||
lizmat | I plan to look at the binder because I'd like to be able to indicate exact match of types: eqaddr logic vs istype logic | 10:36 | |||||||||||||||||||||||||||||||||||||
also, doesn't it still do a trial bind in dispatch ? | 10:37 | ||||||||||||||||||||||||||||||||||||||
ab5tract | Not unless it doesn’t know what else to do | 10:39 | |||||||||||||||||||||||||||||||||||||
At least as far as my experience goes | 10:40 | ||||||||||||||||||||||||||||||||||||||
lizmat | hmmmm | ||||||||||||||||||||||||||||||||||||||
ok, I'll spend some time on it :-) | 10:43 | ||||||||||||||||||||||||||||||||||||||
ab5tract | Between the commit adding is item and the commit that adds revision gating, there should be plenty to chew on. It will be worth your time to reference them | 10:44 | |||||||||||||||||||||||||||||||||||||
Geth | rakudo/main: 6e98232339 | (Elizabeth Mattijsen)++ | src/core.c/Any-iterable-methods.rakumod Handle Associative.deepmap better wrt Empty Issue #4435 describes how .deepmap messes up on Associatives the moment that some elements are skipped by returning Empty. This commit fixes that by special casing the direct Associative.deepmap to actually check for empty returns, and then not producing those ... (14 more lines) |
11:44 | |||||||||||||||||||||||||||||||||||||
rakudo/main: 8 commits pushed by (Stefan Seifert)++
|
12:06 | ||||||||||||||||||||||||||||||||||||||
jdv | sena_kun: thanks | ||||||||||||||||||||||||||||||||||||||
tellable6 | 2025-02-17T21:27:08Z #raku-dev <sena_kun> jdv this was 3.5 years ago, but my best guess is "something on Blin got broken and we reverted it" | ||||||||||||||||||||||||||||||||||||||
nine | That's 1171 | 12:07 | |||||||||||||||||||||||||||||||||||||
lizmat | nice! a lot of work for a single test file! | ||||||||||||||||||||||||||||||||||||||
nine | indeed | 12:08 | |||||||||||||||||||||||||||||||||||||
Geth | rakudo/main: ab09c6d1db | (Elizabeth Mattijsen)++ | src/core.c/Any-iterable-methods.rakumod Additional fix on Associative.deepmap Turns out 6e98232339 only fixed 1-key hashes. Found while writing the actual test for #4435 |
12:13 | |||||||||||||||||||||||||||||||||||||
roast: c5b9baef9a | (Elizabeth Mattijsen)++ | S32-list/deepmap.t Add test for #4435 |
|||||||||||||||||||||||||||||||||||||||
rakudo/main: 4d37905df1 | (Stefan Seifert)++ | src/Raku/ast/signature.rakumod Revert "RakuAST: Avoid re-declaration of $_ in sub-sigs" This reverts commit f1de73e9edf4891b8490df713257f2cf74384672. Turns out that this fix broke cases like -> $_ { }(3) which did not declare it's own $_ and thus bound to the outer scope's $_. Looks like we need a better fix for the double delcaration of $_ in sub-signatures: for [1,2],[3,4] -> ($_,$b) { } |
12:40 | ||||||||||||||||||||||||||||||||||||||
nine | A surprising fix that gets us to 1172 | ||||||||||||||||||||||||||||||||||||||
ab5tract: ^^^ | |||||||||||||||||||||||||||||||||||||||
lizmat | Q: what do you think: * = 1 | 2 does ? | 12:42 | |||||||||||||||||||||||||||||||||||||
m: say Q|sub a(:$a where * = (1,2).any) { }|.AST.DEPARSE | 12:46 | ||||||||||||||||||||||||||||||||||||||
camelia | sub a (:$a = (1, 2).any) { } |
||||||||||||||||||||||||||||||||||||||
lizmat | it feels that this is codegenned incorrectly, or should be disallowed | 12:47 | |||||||||||||||||||||||||||||||||||||
looks like the legacy grammar *is* creating a block for this | 12:48 | ||||||||||||||||||||||||||||||||||||||
if I interpret the QAST correctly | 12:49 | ||||||||||||||||||||||||||||||||||||||
in any case, it feels to me that any assignment to the topic, should be a no-no | |||||||||||||||||||||||||||||||||||||||
m: sub a(:$a where * = 42) { dd $a }() # this feels wrong | 12:50 | ||||||||||||||||||||||||||||||||||||||
camelia | 42 | ||||||||||||||||||||||||||||||||||||||
lizmat | instead of dying because it couldn't dispatch, it uses the value to assign to the missing named argument | 12:51 | |||||||||||||||||||||||||||||||||||||
see #4381 for reason of this investigation | |||||||||||||||||||||||||||||||||||||||
R#4381 | 12:52 | ||||||||||||||||||||||||||||||||||||||
linkable6 | R#4381 [open]: github.com/rakudo/rakudo/issues/4381 [junctions][dispatching] sub foo($a where * = 'a'|'b') { } infiniloops if called without arguments | ||||||||||||||||||||||||||||||||||||||
lizmat | m: sub a(:$a where * := 42) { dd $a }() # that should be the error, I think | 12:54 | |||||||||||||||||||||||||||||||||||||
camelia | ===SORRY!=== Error while compiling <tmp> Malformed parameter at <tmp>:1 ------> sub a(:$a where * :<HERE>= 42) { dd $a }() # that should be th |
||||||||||||||||||||||||||||||||||||||
nine | bartolin: I still think that loop label test enshrines wrong behavior. Most notably behavior caused by a simple bug in the legacy compiler. | 13:42 | |||||||||||||||||||||||||||||||||||||
To be precise github.com/rakudo/rakudo/blob/main...s.nqp#L199 checks whether the ast contains more than 2 elements. This is clearly meant to find C-style loops: loop (;;). However a label is also an element in that array: github.com/rakudo/rakudo/blob/main...s.nqp#L173 | 13:43 | ||||||||||||||||||||||||||||||||||||||
Thus it takes the label, thunks it and uses that as a condition. It just happens that a label boolifies to true. | 13:45 | ||||||||||||||||||||||||||||||||||||||
Without label we generate a Rakudo::Iterator::Loop: | |||||||||||||||||||||||||||||||||||||||
m: (while True { }).iterator.^name.say | |||||||||||||||||||||||||||||||||||||||
camelia | Rakudo::Iterator::Loop | ||||||||||||||||||||||||||||||||||||||
nine | While with the label, we call the 2 arg form of Seq.from-loop and end up creating a Rakudo::Iterator::WhileLoop: | 13:46 | |||||||||||||||||||||||||||||||||||||
m: (L1: while True { }).iterator.^name.say | |||||||||||||||||||||||||||||||||||||||
camelia | Rakudo::Iterator::WhileLoop | ||||||||||||||||||||||||||||||||||||||
nine | It just so happens that these have different lazyiness. Loop has method is-lazy(--> True) { } while While doesn't. | 13:48 | |||||||||||||||||||||||||||||||||||||
lizmat | is that not an error ? | ||||||||||||||||||||||||||||||||||||||
nine | lizmat: What exactly? | 13:50 | |||||||||||||||||||||||||||||||||||||
lizmat | that ...WhileLoop isn't lazy ? | ||||||||||||||||||||||||||||||||||||||
nine | That's exactly my point. We accidentally compile to a WhileLoop and that again is accidentally not lazy. The spectest however requires the loop to be eager. | 13:51 | |||||||||||||||||||||||||||||||||||||
Hence I claim that the spectest is still wrong. | |||||||||||||||||||||||||||||||||||||||
lizmat | understood, and agree | 13:53 | |||||||||||||||||||||||||||||||||||||
nine | m: (loop { }).iterator.^name.say | 14:00 | |||||||||||||||||||||||||||||||||||||
camelia | Rakudo::Iterator::WhileLoop | ||||||||||||||||||||||||||||||||||||||
nine | Then, there's of course this ^^^ oddity. While we do optimize a `while True` to an Iterator::Loop, we don't use that for a plain loop { }. Any guess why? | 14:01 | |||||||||||||||||||||||||||||||||||||
ab5tract | nine: nice catch earlier! Doesn’t that intersect with tracking blocks separately from scopes? | 14:04 | |||||||||||||||||||||||||||||||||||||
lizmat | actually, no idea nine | ||||||||||||||||||||||||||||||||||||||
nine | The answer is: because on Sat Nov 28th 2009 Stephen Weeks did the first implementation of loop { } which compiled it to a PAST op while(1) because that's what was available. This became OP.new(:op<while>, QAST::Var.new(:name<True>, :lexical)) which became OP.new(:op<while>, QAST::IVal.new(:value(1)) which became from-loop(&body, -> { 1 }) | ||||||||||||||||||||||||||||||||||||||
ab5tract | Ah, cool! I like that kind of historical review | 14:05 | |||||||||||||||||||||||||||||||||||||
lizmat | m: multi sub a(@a) { dd }; multi sub a(Seq:D $a) { dd }; a (1,2,3).map(*+1) # this feels, meh | 14:06 | |||||||||||||||||||||||||||||||||||||
camelia | Ambiguous call to 'a(Seq)'; these signatures all match: (@a) from <tmp> line 1 (Seq:D $a) from <tmp> line 1 in block <unit> at <tmp> line 1 |
||||||||||||||||||||||||||||||||||||||
lizmat | feels to me a specific Seq:D candidate should be more tight than a Positional sig | ||||||||||||||||||||||||||||||||||||||
nine | Well actually, I'd rather not have to do this kind of digging. That's why one should be extra careful when writing spec tests, so they don't become "do whatever Excel 95 does" | 14:07 | |||||||||||||||||||||||||||||||||||||
ab5tract | I’ve wondered about whether an LLM could be a useful tool as an oracle into the accretion of design decisions by building it on the broad corpus of Perl 6 / Raku communications channels, bug trackers, and repositories. | 14:10 | |||||||||||||||||||||||||||||||||||||
lizmat | afk for a few hours& | 14:11 | |||||||||||||||||||||||||||||||||||||
ab5tract | That’s maybe not something that I can just take on unilaterally, as timo has pointed out. But I think it would be really cool to have a window onto earlier historical moments, the back and forth between implementation constraints and high level design, etc | 14:12 | |||||||||||||||||||||||||||||||||||||
I think there are probably some interesting organizational lessons that are in there too. | 14:13 | ||||||||||||||||||||||||||||||||||||||
nine | I still think that we did ourselves a great disservice by abandoning the design documents and calling them speculations. | ||||||||||||||||||||||||||||||||||||||
ab5tract | I agree. It would be a massive but cool project to revisit those and rewrite / expand as necessary | 14:15 | |||||||||||||||||||||||||||||||||||||
nine | "lazy loops can be indicated by putting the loop in parens or brackets" is super clear, especially compared to the "do whatever this combination of 3 different implementation bugs results in" we have in the spec tests | ||||||||||||||||||||||||||||||||||||||
ab5tract | And release it as the Butterfly book | ||||||||||||||||||||||||||||||||||||||
Geth | rakudo/fix-lazy-loop-bugs: a56f1b5770 | (Stefan Seifert)++ | src/Raku/ast/statements.rakumod RakuAST: fix label getting lost on while/until True/False loops Accidentally attached the named arg to the QAST::Stmt instead of the op. |
14:44 | |||||||||||||||||||||||||||||||||||||
rakudo/fix-lazy-loop-bugs: c0c4e7addb | (Stefan Seifert)++ | 2 files Fix a bunch of non-sunk lazy loop bugs Whether a loop used as expression turns out to become lazy or not has so far been determined by the complex interplay between several bugs. We treated loop labels as conditions, did not recognize 1 as a compile time value and failed to make iterators lazy. This fixes all of those. |
|||||||||||||||||||||||||||||||||||||||
nine | This commit ^^^ (ignore the one before) restores sanity and breaks 29 individual spec tests. | ||||||||||||||||||||||||||||||||||||||
Geth | rakudo/main: a56f1b5770 | (Stefan Seifert)++ | src/Raku/ast/statements.rakumod RakuAST: fix label getting lost on while/until True/False loops Accidentally attached the named arg to the QAST::Stmt instead of the op. |
14:48 | |||||||||||||||||||||||||||||||||||||
releasable6 | Next release in ≈4 days and ≈3 hours. There are no known blockers. Please log your changes in the ChangeLog: github.com/rakudo/rakudo/wiki/ChangeLog-Draft | 15:00 | |||||||||||||||||||||||||||||||||||||
[Coke] | just pinged Snyk about adding Raku as one of the languages they scan for. | 15:11 | |||||||||||||||||||||||||||||||||||||
(one of the things they scan for is OSS licensing on projects inside git repos, so that seems an easy add) | 15:13 | ||||||||||||||||||||||||||||||||||||||
15:35
nine left,
nine joined
16:06
dawids joined
16:10
dawids left
16:33
donaldh joined
|
|||||||||||||||||||||||||||||||||||||||
lizmat | rakkable: eco-pr ' sort ' | 17:31 | |||||||||||||||||||||||||||||||||||||
rakkable | lizmat, Running: eco-provides ' sort ', please be patient! | ||||||||||||||||||||||||||||||||||||||
lizmat, No occurrences found for: eco-provides ' sort ' | |||||||||||||||||||||||||||||||||||||||
lizmat | rakkable: eco-pr --pattern=' sort ' | ||||||||||||||||||||||||||||||||||||||
rakkable | lizmat, '--pattern' argument not allowed / unknown: ignored | ||||||||||||||||||||||||||||||||||||||
lizmat, Running: eco-provides sort ', please be patient! | |||||||||||||||||||||||||||||||||||||||
lizmat, No occurrences found for: eco-provides sort ' | |||||||||||||||||||||||||||||||||||||||
lizmat | meh | ||||||||||||||||||||||||||||||||||||||
Geth | rakudo/main: ef60266a92 | (Elizabeth Mattijsen)++ | src/core.c/Cool.rakumod Mark '.samespace' method as an implementation-detail As suggested by #4318 |
18:09 | |||||||||||||||||||||||||||||||||||||
rakudo/main: 45b36fa0c7 | (Elizabeth Mattijsen)++ | src/core.c/Rakudo/Internals.rakumod Word wrap class implementation detail message As originally reported in #3723. |
|||||||||||||||||||||||||||||||||||||||
[Coke] | m: say Attribute.^methods[0] | 18:15 | |||||||||||||||||||||||||||||||||||||
camelia | ForeignCode | ||||||||||||||||||||||||||||||||||||||
[Coke] | m: dd Attribute.^methods[0] | ||||||||||||||||||||||||||||||||||||||
camelia | The 'ForeignCode' class is a Rakudo-specific implementation detail and has no serviceable parts inside | ||||||||||||||||||||||||||||||||||||||
lizmat hopes camelia isn't stuck at a56f1b577 | 18:18 | ||||||||||||||||||||||||||||||||||||||
[Coke] | m: Nil | 18:19 | |||||||||||||||||||||||||||||||||||||
camelia | ( no output ) | ||||||||||||||||||||||||||||||||||||||
Geth | rakudo/main: 90312db3d7 | (Elizabeth Mattijsen)++ | src/core.c/Range.rakumod Make Range.Numeric a bit smarter wrt infinity Issue #3637 reported that prefix + is wrong on some edge cases of possible Ranges. Since prefix + is just short for calling .Numeric it looked like that method needed some TLC. This commit does that: if numeric values are in the range, then: - return 0 if min value exceeds max value - return Inf if min == -Inf or max == Inf - otherwise calculate the diff as before |
19:06 | |||||||||||||||||||||||||||||||||||||
roast: 00906c4517 | (Elizabeth Mattijsen)++ | S02-types/range.t Add tests for #3637 |
19:14 | ||||||||||||||||||||||||||||||||||||||
lizmat | m: Nil | 19:23 | |||||||||||||||||||||||||||||||||||||
camelia | ( no output ) | ||||||||||||||||||||||||||||||||||||||
lizmat | m: dd ForeignCode | ||||||||||||||||||||||||||||||||||||||
camelia | The 'ForeignCode' class is a Rakudo-specific implementation detail and has no serviceable parts inside. |
||||||||||||||||||||||||||||||||||||||
Geth | rakudo/main: 8835a4384e | (Stefan Seifert)++ | src/Raku/Grammar.nqp RakuAST: parse $foo=<bar> in regexes This feature doesn't seem to have been implemented in the old frontend. Spec tests are todo'ed. But parsing this syntax lets us get over those todos and run the other tests. |
21:25 | |||||||||||||||||||||||||||||||||||||
nine | 1173 | ||||||||||||||||||||||||||||||||||||||
bartolin | nine: Oh my, thanks for digging into that "lazy loops" topic. Your explanations make total sense to me. In case I didn't make that clear before, I fully agree that github.com/raku/roast/commit/53d332addf was wrong. Just a question to avoid a misunderstanding: When you say "that loop label test enshrines wrong behavior", do you refer to the attempt to fix the tests with | 21:33 | |||||||||||||||||||||||||||||||||||||
github.com/Raku/roast/pull/870 or to the original test? | |||||||||||||||||||||||||||||||||||||||
bartolin will try how it looks with github.com/rakudo/rakudo/tree/fix-...-loop-bugs | 21:34 | ||||||||||||||||||||||||||||||||||||||
nine | At least the original test. Haven't looked too closely at the current version. | 21:43 | |||||||||||||||||||||||||||||||||||||
bartolin | I see, thanks. For the record, the test didn't change yet. That was just a PR for now. | 21:45 | |||||||||||||||||||||||||||||||||||||
Ha, on that branch the version from the PR passes with RAKUDO_RAKUAST=1. But without there are again crashes with "labeled last without loop construct". E.g. for this this one: | 22:24 | ||||||||||||||||||||||||||||||||||||||
m: my $ignore; my @res; sub while-loop-in-parens() { (L: while True { @res.push: 3; last L }) }; $ignore = while-loop-in-parens()[2]; dd @res | |||||||||||||||||||||||||||||||||||||||
camelia | [3] | ||||||||||||||||||||||||||||||||||||||
timo | hey nine, i was wondering if you might have input for what you would like from the moarvm remote debugger, if you have used it at all | 22:42 | |||||||||||||||||||||||||||||||||||||
23:11
sena_kun left
|
|||||||||||||||||||||||||||||||||||||||
bartolin | Oh, I think the crash happens because of a missing sigil in github.com/rakudo/rakudo/commit/c0c4e7addb. I've commented on that commit (from the branch "fix-lazy-loop-bugs"). | 23:17 | |||||||||||||||||||||||||||||||||||||
Geth | setup-raku/dependabot/npm_and_yarn/octokit/plugin-paginate-rest-9.2.2: 4e0927a1a4 | dependabot[bot]++ (committed using GitHub Web editor) | package-lock.json Bump @octokit/plugin-paginate-rest from 9.2.1 to 9.2.2 Bumps [@octokit/plugin-paginate-rest](github.com/octokit/plugin-paginate-rest.js) from 9.2.1 to 9.2.2. - [Release notes](github.com/octokit/plugin-paginate.../releases) - [Commits](github.com/octokit/plugin-paginate......v9.2.2) --- ... (6 more lines) |
23:26 |