[01:16] *** hankache_ joined
[01:20] *** hankache left
[01:53] *** vrurg joined
[01:56] *** vrurg_ left
[02:49] *** hankache_ left
[08:39] <disbot> <natt.e> Is this the right place? I found some things that changed after 2026.09 that I would consider bugs: raku say (1 RR[xx] *); # before: WhateverCode, after: Seq say comb sum 1000,2000: 2; # before: (30 00), after: Error $_ = "abc"; tr/a/x/; # after: Warning - "Useless use of tr/a/x/ in sink context" $a² or $a ** 2 # after: Much slower than $a * $a 

[09:07] <lizmat> reported as https://github.com/rakudo/rakudo/issues/6766 and https://github.com/rakudo/rakudo/issues/6767

[09:08] <disbot> <natt.e> Thanks

[10:25] <lizmat> bisectable6: old=2025.10 say [] ~~ (my $a = "b"); say $a

[10:25] <bisectable6> lizmat, On both starting points (old=2025.10 new=a61b582) the exit code is 0 and the output is identical as well

[10:25] <bisectable6> lizmat, Output on both points: «False␤b␤»

[10:26] <lizmat> c: 2026.09 say [] ~~ (my $a = "b"); say $a

[10:26] <committable6> lizmat, ¦2026.09: «True␤(Any)␤»

[10:26] <lizmat> bisectable6: old=2026.09 say [] ~~ (my $a = "b"); say $a

[10:26] <bisectable6> lizmat, Bisecting by output (old=2026.09 new=a61b582) because on both starting points the exit code is 0

[10:26] <bisectable6> lizmat, bisect log: https://gist.github.com/95f01bce3705af12e905b93893cb04e8

[10:26] <bisectable6> lizmat, (2026-09-26) https://github.com/rakudo/rakudo/commit/13cce58d15698964033be46c9dcfcbf81d56be1d

[12:15] <lizmat> m: say Q|JSON::Fast:<foo:0.21>:auth<zef:timo>|.AST.statements.head.expression.name.colonpairs.head

[12:15] <camelia> rakudo-moar e17a1d43b: OUTPUT: «RakuAST::QuotedString.new(␤  processors => <words val>,␤  segments   => (␤    RakuAST::StrLiteral.new("foo:0.21"),␤  )␤)␤»

[12:15] <lizmat> ugexe: shouldn't that be a RakuAST::ColonPair::Value object  ??

[12:17] <lizmat> argh... pebkac

[12:19] *** djinni` left
[12:24] *** djinni` joined
[12:49] *** [Tux] left
[12:54] *** [Tux] joined
[13:05] <[Coke]> blin clean through a0433344aa

[13:05] <linkable6> (2026-09-30) https://github.com/rakudo/rakudo/commit/a0433344aa RakuAST: only leave the scope for a heredoc body after a closing brace

[13:20] <[Coke]> wonder if we should make whatever is building the rakudo-star dockerfile to also build coke/rakudo-docs-test:latest (and make sure they're all in a common, shared docker repo)

[13:21] <[Coke]> I should at least move the Dockerfile used for the docs testing into the docs repo. :|

[13:24] <[Coke]> Oh. "Welcome to Rakudo™ Star v2026.01."

[13:24] <[Coke]> that's rakudo-star:latest

[13:25] <[Coke]> ... on my box. "versioning is hard..."

[13:35] <[Coke]> ok, the latest one is only v2026.06

[13:36] <[Coke]> Who is generating those?

[13:36] <[Coke]> (are we only doing it quarterly?)

[14:38] *** camelia left
[14:39] *** camelia joined
[14:54] *** nine_ joined
[14:54] *** nine left
[17:27] <Geth> ¦ rakudo: ugexe++ created pull request #6769: RakuAST: prime a Whatever under a meta-operator as any operator does

[17:27] <Geth> ¦ rakudo: review: https://github.com/rakudo/rakudo/pull/6769

[17:29] <Geth> ¦ rakudo/main: 1782702146 | (Elizabeth Mattijsen)++ | src/Raku/ast/name.rakumod

[17:29] <Geth> ¦ rakudo/main: Make RakuAST::Name.is-identifier a bit faster

[17:29] <Geth> ¦ rakudo/main: 

[17:29] <Geth> ¦ rakudo/main: This method is getting called a *lot* during compilation.  Make at

[17:29] <Geth> ¦ rakudo/main: least the bytecode smaller by replacing attribute accesses to

[17:29] <Geth> ¦ rakudo/main: $!parts by a lowered lexical $parts.  No hard data, but it looks

[17:29] <Geth> ¦ rakudo/main: like this takes off about 1% off of spectest wallclock.

[17:29] <Geth> ¦ rakudo/main: review: https://github.com/rakudo/rakudo/commit/1782702146

[17:48] <Geth> ¦ rakudo/main: 629bd7e686 | (Elizabeth Mattijsen)++ | 2 files

[17:48] <Geth> ¦ rakudo/main: Turn RakuAST::Name::Part into a role

[17:48] <Geth> ¦ rakudo/main: 

[17:48] <Geth> ¦ rakudo/main: Because it really is.  This also allows simplification of the .raku

[17:48] <Geth> ¦ rakudo/main: fixups

[17:48] <Geth> ¦ rakudo/main: review: https://github.com/rakudo/rakudo/commit/629bd7e686

[17:49] <ugexe> we're just pushing everything straight to main?

[17:52] <lizmat> ah, good point, sorry, future posts will be PRs again, sorry, got a little over excited  :-)

[17:59] <ugexe> im not so sure about that role change

[17:59] <ugexe> first, there is apparently a regression

[17:59] <ugexe> RakuAST::Name::Part::Expression.new(RakuAST::StrLiteral.new("foo")).raku

[18:01] <lizmat> how did you find that?  make test / spectest were clean for me?

[18:01] <ugexe> the rule i followed on what to change to roles was to keep things as classes where the base of their kinds and no longer mixed in anywhere.

[18:02] <ugexe> it can be intuited from the code/diff which is easy for an llm

[18:03] <lizmat> iow, a CI test wouldn't have picked this up either ?

[18:03] <lizmat> just for my understanding...

[18:03] <ugexe> everything doesn't have a test

[18:03] <ugexe> er, i havent tried to run ci or make test so i dont know

[18:04] <ugexe> i just assume you did and that it just doesnt have a test

[18:04] <ugexe> im pretty sure it should still be a class though

[18:05] <Geth> ¦ rakudo/main: 8531d41b48 | (Elizabeth Mattijsen)++ | 2 files

[18:05] <Geth> ¦ rakudo/main: Revert "Turn RakuAST::Name::Part into a role"

[18:05] <Geth> ¦ rakudo/main: 

[18:05] <Geth> ¦ rakudo/main: This reverts commit 629bd7e686cc8dfc529bdb3d923ac21188979708.

[18:05] <Geth> ¦ rakudo/main: 

[18:05] <Geth> ¦ rakudo/main: It was intuited that this broke:

[18:05] <Geth> ¦ rakudo/main:   RakuAST::Name::Part::Expression.new(RakuAST::StrLiteral.new("foo")).raku

[18:05] <Geth> ¦ rakudo/main: 

[18:05] <Geth> ¦ rakudo/main: so reverting for now seems the appropriate thing to do

[18:06] <Geth> ¦ rakudo/main: review: https://github.com/rakudo/rakudo/commit/8531d41b48

[18:06] <ugexe> its also wrong that method is-empty() would now die, when if it were to stay a role it would need to be changed to a stub

[18:06] <lizmat> I started to document RakuAST::Name;:Part, and it looked like a role to me, as creating a RakuAST::Name::Part object makes no sense?

[18:07] <lizmat> so maybe it should be marked uninstantiable ?

[18:11] <ugexe> a role would not stop that either, although you already know that. Node, Expression, Term, Statement Postfixish, (maybe others?) are all just as meaningless to instantiate and all allow it. I would probably document Name::Part as an abstract base class like those. If we want instantiation to fail I think the AST compiler would need to support repr("Uninstantiable") or whatever, and we'd want to

[18:11] <ugexe> apply it to all the abstract bases at once

[18:12] <lizmat> We could just give it a .new method that dies

[18:14] <ugexe> i dunno if that is great for subclasses

[18:14] <lizmat> I think we do that already in some cases

[18:20] <ugexe> for name part specifically its probably fine, but as a general pattern i think you'd have to check the base type and call callsame() or something so subclassing works right

[18:20] <lizmat> check

[18:25] <lizmat> What's the difference between RakuAST::Name::Part::Empty and a RakuAST::Name::Part::Simple with an empty name ?

[18:28] <ugexe> Empty is the :: at an edge of a name

[18:29] <ugexe> Simple with "" is just a name part that happens to be blank

[18:29] <lizmat> would a Simple with "" at the edge of a name also work?

[18:30] <lizmat> or vice-versa, an Empty as a Simple with an empty name ?

[18:32] <lizmat> you know what, I'll just make a PR for that  :-)

[18:34] <ugexe> no. if one type stood for both the compiler would have to guess which one it has from position and blankness instead of checking the type. a lone Empty would also claim to be a package lookup when it iss meant as a missing name

[18:35] <lizmat> hmmm... so maybe ::Empty is a misleading name, and it should be EmptyEdge ?

[18:35] <lizmat> that is, if Empty can only occur as the first or last part of a RakuAST::Name

[18:39] <ugexe> yeah its have to be like EmptyEdge and not DoubleColon since the later might make people think it can be for non edges

[18:40] <Geth> ¦ rakudo/lizmat-40: 83baac0d6a | (Elizabeth Mattijsen)++ | src/Raku/ast/name.rakumod

[18:40] <Geth> ¦ rakudo/lizmat-40: Use a lookup table for ::Name::Part::Simple.is-pseudo-package

[18:40] <Geth> ¦ rakudo/lizmat-40: 

[18:40] <Geth> ¦ rakudo/lizmat-40: Instead of repeated comparisons

[18:40] <Geth> ¦ rakudo/lizmat-40: review: https://github.com/rakudo/rakudo/commit/83baac0d6a

[18:41] <Geth> ¦ rakudo: lizmat++ created pull request #6770: Use a lookup table for ::Name::Part::Simple.is-pseudo-package

[18:41] <Geth> ¦ rakudo: review: https://github.com/rakudo/rakudo/pull/6770

[18:58] <lizmat> m: say Q|MY::|.AST.statements.head.expression

[18:58] <camelia> rakudo-moar e17a1d43b: OUTPUT: «RakuAST::Term::Name.new(␤  RakuAST::Name.new(␤    RakuAST::Name::Part::Simple.new("MY"),␤    RakuAST::Name::Part::Empty␤  )␤)␤»

[18:59] <lizmat> looks like Name::Part::Empty is both used as an instance and as a type object.   Looks like we can always use it as a type object, afaics

[19:03] <ugexe> I'd go the other way and always make an instance

[19:05] <ugexe> just. because a type object generally reads as "nothing here"

[19:07] <lizmat> but all the checks for ::Empty are nqp::istype checks

[19:10] <Geth> ¦ rakudo/lizmat-41: e865825c29 | (Elizabeth Mattijsen)++ | 14 files

[19:10] <Geth> ¦ rakudo/lizmat-41: Change ::Name::Part::Empty to ::Name::Part::EmptyEdge

[19:10] <Geth> ¦ rakudo/lizmat-41: 

[19:10] <Geth> ¦ rakudo/lizmat-41: To more clearly indicate that these can only occur as the first or

[19:10] <Geth> ¦ rakudo/lizmat-41: last part of a RakuAST::Name object

[19:10] <Geth> ¦ rakudo/lizmat-41: review: https://github.com/rakudo/rakudo/commit/e865825c29

[19:10] <Geth> ¦ rakudo: lizmat++ created pull request #6771: Change ::Name::Part::Empty to ::Name::Part::EmptyEdge

[19:10] <Geth> ¦ rakudo: review: https://github.com/rakudo/rakudo/pull/6771

[19:10] <[Coke]> Are we considering the class hierarchy that exists unchangeable except for new stuff? or are we saying rakuast is not *final* until 6.e?

[19:11] <ugexe> you can't assume that just because that is how the core uses it that users wont want to e.g. .grep(*.defined)

[19:11] <[Coke]> also, do we have to care about feedback from the other two compiler authors?

[19:11] <lizmat> ugexe: ok, fair point, I'll make sure the .new gets added

[19:12] <lizmat> [Coke]: re the other compiler authors: RakuAST at this stage is Rakudo only really, as there are no spectests for it

[19:12] <lizmat> once there are, then we should consider them "final" fsvo "final"

[19:12] <lizmat> is my opinion

[19:13] <lizmat> anyway, these changes are fed by my working on the RakuAST documentation, and trying to explain what a class' function is

[19:13] <lizmat> and finding inconsistencies that would be hard to explain

[19:14] <lizmat> rather then explain them in documentation, I'd rather fix the inconsistencies

[19:14] <lizmat> and make the naming more self-explaining

[19:17] <[Coke]> ah, I thought there was talk about putting rakuAST into roast.

[19:18] <lizmat> yes, there is!

[19:18] <lizmat> but really just before we release 6.e

[19:18] <[Coke]> ok. yes, *before it goes into roast*, do we need to reach out to them.

[19:19] <lizmat> ash is aware of this already, not sure about tokuhirom

[19:19] <[Coke]> (e.g. give them a chance to review the PR, or something)

[19:22] <lizmat> pinged them in the PR

[19:24] <lizmat> m: dd RakuAST::Name::Part::Simple.new("").is-empty

[19:24] <camelia> rakudo-moar e17a1d43b: OUTPUT: «===SORRY!=== Error while compiling <tmp>␤Use of RakuAST is experimental; please 'use experimental :rakuast;'␤at <tmp>:1␤------> dd RakuAST::Name::Part::<HERE>Simple.new("").is-empty␤    expecting any of:␤        argument list␤        term␤»

[19:24] <lizmat> m: use v6.*; dd RakuAST::Name::Part::Simple.new("").is-empty

[19:24] <camelia> rakudo-moar e17a1d43b: OUTPUT: «1␤»

[19:24] <lizmat> m: use v6.*; dd RakuAST::Name::Part::Empty.new.is-empty

[19:24] <camelia> rakudo-moar e17a1d43b: OUTPUT: «Bool::True␤»

[19:41] <Geth> ¦ rakudo: ugexe++ created pull request #6772: RakuAST: don't warn about a sunk tr/// or user-defined term

[19:41] <Geth> ¦ rakudo: review: https://github.com/rakudo/rakudo/pull/6772

[19:42] <Geth> ¦ rakudo: ugexe++ created pull request #6773: RakuAST: give an invocant colon to the listop it belongs to

[19:42] <Geth> ¦ rakudo: review: https://github.com/rakudo/rakudo/pull/6773

[19:43] <Geth> ¦ rakudo/main: 31d48fde2d | (Nick Logan)++ (committed using GitHub Web editor) | 5 files

[19:43] <Geth> ¦ rakudo/main: RakuAST: prime a Whatever under a meta-operator as any operator does (#6769)

[19:43] <Geth> ¦ rakudo/main: 

[19:43] <Geth> ¦ rakudo/main: Previously a meta-operator primed a Whatever or WhateverCode operand only

[19:43] <Geth> ¦ rakudo/main: as far as the operator it wraps would, apart from the negated and

[19:43] <Geth> ¦ rakudo/main: elementwise forms of a short-circuit. `xx`, `..`, `...`, `~~`, `∘`, `=`,

[19:43] <Geth> ¦ rakudo/main: the short-circuit operators, and a function infix take `*` or a

[19:43] <Geth> ¦ rakudo/main: WhateverCode as a value, so `1 R[xx] *` gave `(*,)`, `(1, 2) Z.. *` gave

[19:43] <Geth> ¦ rakudo/main: <…commit message has 20 more lines…>

[19:43] <Geth> ¦ rakudo/main: review: https://github.com/rakudo/rakudo/commit/31d48fde2d

[19:47] <Geth> ¦ rakudo: ugexe++ created pull request #6774: RakuAST: fix heredoc body scoping and premature consumption

[19:47] <Geth> ¦ rakudo: review: https://github.com/rakudo/rakudo/pull/6774

[19:54] <Geth> ¦ rakudo/lizmat-42: a2b1a53304 | (Elizabeth Mattijsen)++ | src/Raku/ast/name.rakumod

[19:54] <Geth> ¦ rakudo/lizmat-42: Make sure ::Name::Part.is-empty always returns a Bool

[19:54] <Geth> ¦ rakudo/lizmat-42: 

[19:54] <Geth> ¦ rakudo/lizmat-42: The ::Simple and ::Expression cases were returning 1 or 0 instead,

[19:54] <Geth> ¦ rakudo/lizmat-42: whereas the ::Empty case *did* return True

[19:54] <Geth> ¦ rakudo/lizmat-42: review: https://github.com/rakudo/rakudo/commit/a2b1a53304

[19:54] <Geth> ¦ rakudo: lizmat++ created pull request #6775: Make sure ::Name::Part.is-empty always returns a Bool

[19:54] <Geth> ¦ rakudo: review: https://github.com/rakudo/rakudo/pull/6775

[20:03] <Geth> ¦ rakudo/lizmat-40: 4fa2be82f8 | (Elizabeth Mattijsen)++ | src/Raku/ast/name.rakumod

[20:03] <Geth> ¦ rakudo/lizmat-40: Make sure ::Name::Part::Simple returns a Bool

[20:03] <Geth> ¦ rakudo/lizmat-40: review: https://github.com/rakudo/rakudo/commit/4fa2be82f8

[20:57] *** Pixi joined
[21:27] *** Pixi` joined
[21:30] *** Pixi left
[21:32] *** Pixi` left
[22:16] *** Pixi joined
[22:30] <Geth> ¦ rakudo/main: b22a0daf20 | (Elizabeth Mattijsen)++ (committed using GitHub Web editor) | src/Raku/ast/name.rakumod

[22:30] <Geth> ¦ rakudo/main: Make sure ::Name::Part.is-empty always returns a Bool (#6775)

[22:30] <Geth> ¦ rakudo/main: 

[22:30] <Geth> ¦ rakudo/main: The ::Simple and ::Expression cases were returning 1 or 0 instead,

[22:30] <Geth> ¦ rakudo/main: whereas the ::Empty case *did* return True

[22:30] <Geth> ¦ rakudo/main: review: https://github.com/rakudo/rakudo/commit/b22a0daf20

[22:31] <[Coke]> what's the plan for merging PRs? Do we need an approval from someone? Or is just being post-release and passing all tests the bar.?

[22:31] <lizmat> I feel like the latter?

[22:32] <Geth> ¦ rakudo/main: 97788fa42b | (Nick Logan)++ (committed using GitHub Web editor) | 3 files

[22:32] <Geth> ¦ rakudo/main: RakuAST: don't warn about a sunk tr/// or user-defined term (#6772)

[22:32] <Geth> ¦ rakudo/main: 

[22:32] <Geth> ¦ rakudo/main: Previously a node without its own `PERFORM-CHECK` fell back to the one

[22:32] <Geth> ¦ rakudo/main: on `RakuAST::Expression`, which treats every sunk expression as a

[22:32] <Geth> ¦ rakudo/main: useless use. `RakuAST::Transliteration` and `RakuAST::Term::Named` are

[22:32] <Geth> ¦ rakudo/main: the only such nodes that can have an effect of their own. As such

[22:32] <Geth> ¦ rakudo/main: `$_ = "abc"; tr/a/x/;` and a call to a user-defined `term:<foo>` both

[22:32] <Geth> ¦ rakudo/main: <…commit message has 11 more lines…>

[22:32] <Geth> ¦ rakudo/main: review: https://github.com/rakudo/rakudo/commit/97788fa42b

[22:33] <[Coke]> ok. I can merge some stuff in the evening here and do a blin run (in general, not necessarily today)

[22:33] <Geth> ¦ rakudo/main: 5f8a56a69f | (Elizabeth Mattijsen)++ (committed using GitHub Web editor) | 14 files

[22:33] <Geth> ¦ rakudo/main: Change ::Name::Part::Empty to ::Name::Part::EmptyEdge (#6771)

[22:33] <Geth> ¦ rakudo/main: 

[22:33] <Geth> ¦ rakudo/main: To more clearly indicate that these can only occur as the first or

[22:33] <Geth> ¦ rakudo/main: last part of a RakuAST::Name object

[22:33] <Geth> ¦ rakudo/main: review: https://github.com/rakudo/rakudo/commit/5f8a56a69f

[22:35] <[Coke]> there's a bunch of PRs that passed all the tests back from August, also

[22:36] <lizmat> indeed... but those would require some more getting acquainted with then again, and it's too late for me now to do that  :-) 

[22:40] <[Coke]> yah, didn't mean tonight.

[22:42] <[Coke]> will merge #6774 #6773 #6770 if they pass.

[22:42] <lizmat> ++[Coke] 

[23:02] <Geth> ¦ raku.org: hankache++ created pull request #327: Fix run command in README

[23:02] <Geth> ¦ raku.org: review: https://github.com/Raku/raku.org/pull/327

[23:17] <Geth> ¦ raku.org: hankache++ created pull request #328: UI Polish

[23:17] <Geth> ¦ raku.org: review: https://github.com/Raku/raku.org/pull/328

