🦋 Welcome to the IRC channel of the core developers of the Raku Programming Language (raku.org #rakulang). This channel is logged for the purpose of history keeping about its development | evalbot usage: 'm: say 3;' or /msg camelia m: ... | Logs available at irclogs.raku.org/raku-dev/live.html | For MoarVM see #moarvm
Set by lizmat on 8 June 2022.
[Coke] Well, there are a LOT of alwaysfails. 00:28
weird. JSON::Class has a test-depends on Test::Async but blin is not seeing that dep - but so does WWW::GCloud:auth<zef:vrurg>:ver<0.0.7>, and blin *does* see that one. 00:32
JSON:Class is defaulting to 0.0.6, but Red's dep hierarchy has two hits at v 0.0.14+ and 0.0.20+ 00:39
(so my testing of JSON::Class wasn't helpful, since I was testing the wrong (old) version) 00:41
SmokeMachine That might be the “wrong” JSON::Class… 00:47
raku.land/?q=JSON::Class 00:48
[Coke]: ^^ 00:52
We have: JSON::Class:ver<0.0.6>:auth<zef:vrurg>:api<1.0.5> and JSON::Class:ver<0.0.21>:auth<zef:jonathanstowe>:api<1.0>
[Coke] so if you want a particular author's version, I'd put that in the declarations. 00:54
(oh, except it's not one of red's direct dependencies) 00:55
SmokeMachine Yeah… that’s not a direct dependency… 00:56
[Coke] so I think my pointer to Test::Async was wrong, I was testing the wrong JSON::Class. (So let me test the right one...) 00:58
the last Red diagnostic I had was that JSON::Class wasn't installed, so hopefully the real error will be revealed shortly, sorry about the noise. 00:59
SmokeMachine No problem at all… I plan to open a MR to this: github.com/jonathanstowe/META6/blo...6.json#L34 01:01
github.com/jonathanstowe/META6/pull/32 01:16
[Coke] tries to figure out why WWW::GCloud::API::Storage is showing up in a Blin run for Red. 01:18
[Coke] gives up for the night.
01:49 MasterDuke joined
MasterDuke m: q|my $a = 0; my $b; for ^3 { $a++; 1 but last; $a++; }; say $a|.EVAL 01:50
camelia 1
MasterDuke m: q|my $a = 0; my $b; for ^3 { $a++; 1 but last; $a++; }; say $a|.AST.EVAL
camelia Potential difficulties:
Useless use of constant integer 1 in sink context
at EVAL_0:1
1
MasterDuke m: q|my $a = 0; my $b; for ^3 { $a++; $_ but last; $a++; }; say $a|.EVAL 01:51
camelia 1
MasterDuke m: q|my $a = 0; my $b; for ^3 { $a++; $_ but last; $a++; }; say $a|.AST.EVAL
camelia 1
MasterDuke so RakuAST warns about the `1 but last`. regular frontend doesn't warn, and both do the right thing 01:52
i found this when running github.com/Raku/roast/blob/master/...6c.t#L155. it's not what's being tested, but i noticed the difference and don't know what's correct 01:59
however, i also found what i do think is a bug in RakuAST accidentally triggered by that test file 02:01
ha, maybe two bugs, now that i'm trying to get it in a form easily showable on irc 02:03
m: use Test; role A { method a() { say "a" } }; throws-like { EVAL q[role A { method b() { say "b" } }] }, X::Syntax::Variable::Twigil 02:04
camelia # Subtest: did we throws-like X::Syntax::Variable::Twigil?
1..2
not ok 1 - code dies
# Failed test 'code dies'
# at <tmp> line 1
ok 2 - # SKIP Code did not die, can not check exception
# You failed 1 test of 2
not…
MasterDuke m: use Test; { role A { method a() { say "a" } } }; throws-like { EVAL q[role A { method b() { say "b" } }] }, X::Syntax::Variable::Twigil
camelia # Subtest: did we throws-like X::Syntax::Variable::Twigil?
1..2
not ok 1 - code dies
# Failed test 'code dies'
# at <tmp> line 1
ok 2 - # SKIP Code did not die, can not check exception
# You failed 1 test of 2
not…
MasterDuke notice both examples did not throw any exception and the second one differed in wrapping the initial `role A ...` declaration in braces 02:06
m: q|use Test; role A { method a() { say "a" } }; throws-like { EVAL q[role A { method b() { say "b" } }] }, X::Syntax::Variable::Twigil|.AST.EVAL
camelia lang-call cannot invoke object of type 'VMNull' belonging to no language
in block <unit> at <tmp> line 1
MasterDuke that's the second bug, but why i can't show the RakuAST behavior 02:07
with `RAKUDO_RAKUAST=1`, the first version behaves the same, it doesn't die 02:08
however, the second version (with the extra scope around the initial `role A ...`), instead fails because the exception type is `X::Redeclaration` and the message is `Redeclaration of symbol 'A'` 02:10
that's a simplified version of github.com/Raku/roast/blob/master/...#L111-L116 02:11
Geth roast: MasterDuke17++ created pull request #871:
Simplify 6.c/s14 roles/mixin 6c.t
02:25
MasterDuke so i think the first RakuAST bug is that the two role declarations are leaking into the same scope 02:27
easy to work around it by changing one of the names, but thought i'd mention it in case i'm just understanding what's going on incorrectly 02:29
02:29 nine left 02:30 nine joined 02:52 MasterDuke left 06:58 finanalyst joined
nine MasterDuke: That's not a bug in RakuAST but in the spec tests and the old frontend. See github.com/Raku/roast/commit/17263...75e3476180 and github.com/Raku/roast/commit/6d586...b6a2736026 07:46
tellable6 nine, I'll pass your message to MasterDuke
09:07 finanalyst left 12:03 JimmyZhuo joined
JimmyZhuo $ RAKUDO_RAKUAST=1 ./rakudo-m -e '1' 12:04
Cannot find method 'parse' on object of type NQPMu
at NQP::src\HLL\Compiler.nqp:532 (E:\OpenSource\MoarVM\install\share\nqp\lib/NQPHLL.moarvm:parse)
from NQP::src\HLL\Compiler.nqp:447 (E:\OpenSource\MoarVM\install\share\nqp\lib/NQPHLL.moarvm:execute_stage)
from NQP::src\HLL\Compiler.nqp:483 (E:\OpenSource\MoarVM\install\share\nqp\lib/NQPHLL.moarvm:run)
$ ./rakudo-m -e '1'
WARNINGS for -e:
Useless use of constant integer 1 in sink context (line 1)
seems rakuast is broken on window 12:05
nine I guess something in the build system 12:06
JimmyZhuo I think I get the problem 12:07
turns out my windows file system sometimes is broken 12:10
lizmat nine: github.com/rakudo/rakudo/issues/5815 made me reailize that we probably need logic that converts the BUILDPLAN to a RakuAST version of the POPULATE method 12:25
so that any introspection would also allow changes to the POPULATE method 12:26
do you agree?
for context maybe: the POPULATE method is the new BUILDALL :-)
JimmyZhuo likes the name BUILDALL 12:31
lizmat you can still use BUILDALL if you want: it's just a thin shim around POPULATE nowadays 12:33
Geth rakudo/main: 170711bde8 | (Stefan Seifert)++ | 4 files
RakuAST: add lexical fixups for role bodies

When code runs at BEGIN time, such as role bodies and BEGIN blocks, we need to ensure we get lexical outers fixed up properly when deserializing after pre-comp. To do this we make a list of closures, which each point to the outer context. These survive serialization and thus point at what has to be fixed up.
12:50
nine That was a day and a half of hard work to get right. But it gets us to 851 passing spectest files on the bootstrapped compiler
lizmat wow! 12:52
nine: re github.com/rakudo/rakudo/issues/5815
I was thinking of taking a stab at the compiler services logic: the part in World responsible for creating accessors and creating the POPULATE method 12:53
and turn them into proper RakuAST trees that can be incorporated into the RakuAST tree of a class 12:54
nine The accessor part already exists
lizmat in true RakuAST ?
that's not using World's logic under the hood ?
must've missed that 12:55
nine There is no World in RakuAST
Look for RakuAST::CompilerServices
lizmat ah, but that generates directly to QAST ? 12:56
I mean, you wouldn't be able to do something to the accessor at CHECK / optimize time ? 12:57
as it wouldn't exist as a tree ?
nine Again, look for RakuAST::CompilerServices and it will answer your questions 12:58
lizmat ok, the answer is: it doesn't exists as a tree, it's directly QASTed 13:02
nine There isn't much QAST involved at all. How much less could it be? 13:03
lizmat I'm not worried about direct correctness, I'm worried about modules that would like to insert stuff into accessors, and not being able to because they don't exist in the tree 13:04
anyways, I've found the text: "# TODO: create method BUILDALL here" 13:05
and the absence of the string BUILDPLAN in the ast dir
so I guess BUILDPLAN -> RakuAST tree part would still have to be written
and we're going to need that if we want Perl6/World.nqp to die 13:06
nine: agree ?
nine Eventually, yes. I just wonder whether it would make more sense to have a complete regression test suite first? 13:07
After all the BUILDPLAN thing should behave exactly the same, just faster
lizmat the thing for *me* is, is that working on RakuAST with its build cycle, is getting to be really annoying on my current MBP 13:08
or should say: M1 MacMini 13:09
After April 1st I'll be able to get me a much faster machine
nine You can have an account on my desktop as well. JimmyZhuo already has one
Spectests in 2 minutes
lizmat but not if we're all doing that at the same time, I guess ? 13:10
nine Well, we're not :)
JimmyZhuo: there's a regression caused by your commit 9713c41f859e4179fea3ff5958bc09619cc94400: Default value '6.c' will never bind to a parameter of type str 14:09
Default value '72' will never bind to a parameter of type int
So the check is failing on native types
JimmyZhuo lizmat: github.com/Rakudo/Rakudo/commit/4f...3c02f125d, could you give me a test for this commit, thanks 14:12
nine: which test? 14:13
nine Happens when building rakudo on the bootstrap-rakuast branch (rebased on current main) 14:14
JimmyZhuo if nqp::objprimspec($value-type) { 14:15
$value-type := $value-type.HOW.mro($value-type)[1];
}
need some code like this?
nine yes 14:16
JimmyZhuo nine: feel free to add it, and it's sleep time here , good night 14:20
22:20 clock here
14:20 JimmyZhuo left
Geth rakudo/main: 1a1aa92fc2 | (Stefan Seifert)++ | src/Raku/ast/expressions.rakumod
RakuAST: don't sink target of bind

Binding is a way to specifically avoid sinking, so don't. Fixes some infinite loops caused by accidental sinking of lazy infinite iterators.
14:27
nine That's 881 14:32
Geth rakudo/main: 8d62f88d37 | (Stefan Seifert)++ | src/Raku/ast/signature.rakumod
RakuAST: fix ** and + rw/raw slurpies to not containerize args

Fixes: sub foo(**@a) { }
15:35
nine And now it's 943
Geth rakudo/bootstrap-rakuast: 48 commits pushed by (Stefan Seifert)++
review: github.com/rakudo/rakudo/compare/d...92add74215
16:08 librasteve_ joined
Geth rakudo/main: 291a614032 | (Stefan Seifert)++ | src/Raku/ast/nqp.rakumod
RakuAST: never sink the results of nqp ops

NQP ops are low level tools. They are used when magic is explicitly unwanted.
16:09
rakudo/main: b34d0f080b | (Stefan Seifert)++ | src/Raku/ast/expressions.rakumod
RakuAST: don't sink assigments

Assignments are also used to explicitly avoid sinking values.
nine 970 passing. Most notably those pesky infinite loops are now gone
16:09 finanalyst joined
Geth rakudo/main: 20 commits pushed by (Stefan Seifert)++
review: github.com/rakudo/rakudo/compare/b...e52bcf6148
16:29
rakudo/bootstrap-rakuast: 28 commits pushed by (Stefan Seifert)++
review: github.com/rakudo/rakudo/compare/6...f753578f99
16:31
[Tux] Rakudo v2025.02-233-g21e52bcf6 (v6.d) on MoarVM 2025.02-10-g282254418
csv-ip5xs0.271 - 0.277
csv-ip5xs-201.114 - 1.118
csv-parser1.126 - 1.148
csv-test-xs-200.136 - 0.137
test1.827 - 1.874
test-t0.412 - 0.416
test-t --race0.269 - 0.282
test-t-204.997 - 5.216
test-t-20 --race1.269 - 1.284
16:46
tux.nl/Talks/CSV6/speed4-20.html / tux.nl/Talks/CSV6/speed4.html tux.nl/Talks/CSV6/speed.log
Geth rakudo/main: 4cb9daf8e2 | (Stefan Seifert)++ | 2 files
RakuAST: tell QASTContext our actual language version
16:48
rakudo/main: c1378a280b | (Stefan Seifert)++ | src/Raku/ast/scoping.rakumod
RakuAST: fix missing IMPL-TO-QAST on LexicalPackage
rakudo/main: c8fb690291 | (Stefan Seifert)++ | src/Raku/ast/signature.rakumod
RakuAST: fix overly zealous parameter bind type compile time check

We can be more lenient on native types as the binder can lower arguments.
nine Setting still doesn't build though: Default value '0' will never bind to a parameter of type NuT:D 16:51
Thing is, I think the compiler is correct here.
my role Rational[::NuT = Int, ::DeT = Mu] does Real 16:52
method new(NuT:D \nu = 0, DeT:D \de = 1)
On the one hand, yes the default for NuT is Int to which 0 would most definitely bind. On the other hand though, it doesn't have to be.
16:57 finanalyst left
Geth rakudo/main: 584ea0ff59 | (Stefan Seifert)++ | src/Raku/ast/signature.rakumod
RakuAST: fix overzealous parameter default type check failing on generics
17:03
nine Ok, this brings us back on track
lizmat nice, 1278 for me now 17:20
bisectable6: old=2024.04 enum E (A => %(class => Array)); dd A.pairs 17:21
bisectable6 lizmat, Bisecting by output (old=2024.04 new=8d62f88) because on both starting points the exit code is 0
lizmat, bisect log: gist.github.com/7bff1f5a7d8c3f45fe...61bd626f41 17:23
lizmat, There are 18 candidates for the first “new” revision. See the log for more details
lizmat me
h
17:42 finanalyst joined
Geth rakudo/main: a36de41a4a | (Elizabeth Mattijsen)++ | src/Perl6/Metamodel/EnumHOW.nqp
Wrap enum value stringification in a quietly

In response to #5794. Enums keep both a forward hash as well as an inverted hash. The issue describes warning creating the reverse hash if type values were encountered in data-structures such as hashes and arrays used as value in an enum.
Since this needed a fix in the metamodel, and NQP doesn't know quietly, basically copied the QAST from the quietly handling in the grammar.
17:53
18:18 finanalyst left 18:23 sena_kun joined 19:01 finanalyst joined
Geth rakudo/main: 63a4ba3f2b | (Stefan Seifert)++ | 2 files
RakuAST: fix accessing natively typed parameters in nqp ops

Fixes; sub foo(int $digits) { nqp::pow_I(10, $digits, Num, Int) };
19:07
nine And we're at 1024 in full bootstrap mode :) 19:08
lizmat NICE!
nine At least it payed off. That was a hard one with all the entanglement between variable declarations, parameters, signatures and signature binds 19:09
Geth rakudo/main: f8a30b2955 | (Elizabeth Mattijsen)++ | 4 files
RakuAST: Fix my @a = :a:b;

As indicated by #5680. This commit:
  - change ::ColonPairs.new to use a slurpy, but still maintains
   the semantics of the old interface as well (which is used in
   the Raku grammar)
  - add .raku and deparsing logic
  - add missing IMPL-TO-QAST method
19:24
roast: fb962f394c | (Elizabeth Mattijsen)++ | S02-literals/pairs.t
Add TODOd test for #5680
19:30
lizmat and that concludes my hacking for today& 19:41
19:43 finanalyst left 20:08 Altai-man joined 20:10 sena_kun left 21:39 finanalyst joined
Geth rakudo/main: 3805890479 | (Stefan Seifert)++ | 2 files
RakuAST: fix enums getting shadowed by pre-existing packages

Fixes: package Foo::Bar {}; enum Foo <a b>;
21:42
nine 1027
22:56 finanalyst left 23:13 Altai-man left
Geth rakudo: MasterDuke17++ created pull request #5816:
RakuAST: throw for '!' vars in 'my' | 'our' | 'state' scope
23:31