| [Coke] | is github.com/croservices/cro-webapp the canon repo? | 00:05 | |
| Geth | rakudo/main: 83baac0d6a | (Elizabeth Mattijsen)++ | src/Raku/ast/name.rakumod Use a lookup table for ::Name::Part::Simple.is-pseudo-package Instead of repeated comparisons |
00:23 | |
| rakudo/main: 4fa2be82f8 | (Elizabeth Mattijsen)++ | src/Raku/ast/name.rakumod Make sure ::Name::Part::Simple returns a Bool |
|||
| rakudo/main: 66c194ccb1 | (Will Coleda)++ (committed using GitHub Web editor) | src/Raku/ast/name.rakumod Merge pull request #6770 from rakudo/lizmat-40 Use a lookup table for ::Name::Part::Simple.is-pseudo-package |
|||
rakudo/main: 5 commits pushed by (Nick Logan)++, (Will Coleda)++
|
00:29 | ||
| rakudo/main: 2202fa2992 | (Nick Logan)++ | 2 files RakuAST: only take a listop invocant colon before any comma Previously `comb sum 1000,2000: 2` failed to compile with "Only identical operators may be list associative" because the colon was parsed as part of the arguments to `sum`, even though `sum` had already seen a comma. The legacy grammar clears `$*INVOCANT_OK` when it parses a comma (4969e671ef), so the colon instead becomes the invocant colon of `comb`, ... (16 more lines) |
00:35 | ||
| rakudo/main: 30b42b2460 | (Nick Logan)++ | 3 files RakuAST: keep the invocant of a semicolon separated argument list Previously `f(A: 1, 2; 3)` called the sub `f` with `\(((1, 2),), (3,))` instead of calling the method `f` on `A` with `\((1, 2), (3,))`. The semiarglist action rebuilds the argument list from the args of each section, which lost the invocant of the first one. Those args were also a single comma list, because `ArgList.from-invocant-list` left unpacking ... (5 more lines) |
|||
| rakudo/main: 8de7894122 | (Will Coleda)++ (committed using GitHub Web editor) | 4 files Merge pull request #6773 from ugexe/ugexe/rakuast-invocant-colon-after-comma RakuAST: give an invocant colon to the listop it belongs to |
|||
| rakudo: ugexe++ created pull request #6776: Optimize $x ** 2 and $x² |
00:36 | ||
| ugexe | github.com/rakudo/rakudo/pull/6775/changes regresses ::("") to return False for .not-empty. also i suspect the code might be faster without the changes (adding nqp::hllbool) and just adding --> Bool to the return constraint instead | 01:40 | |
| nqp::hllboolfor doesnt get inlined | 01:41 | ||
| s/not-empty/is-empty/ | 02:02 | ||
| Geth | rakudo/revert-6775-lizmat-42: 1e88c7a0f7 | (Nick Logan)++ (committed using GitHub Web editor) | src/Raku/ast/name.rakumod Revert "Make sure ::Name::Part.is-empty always returns a Bool (#6775)" This reverts commit b22a0daf20825694b2e4c20e036b3fedee743c91. |
02:15 | |
| rakudo: ugexe++ created pull request #6778: Revert "Make sure ::Name::Part.is-empty always returns a Bool" |
02:20 | ||
| rakudo: ugexe++ created pull request #6779: RakuAST: restore is-empty for an empty string name part and inline Bool return checks |
02:50 | ||
| ugexe | so --> Bool wasn't faster, but with that ^ PR it is. i fixed the is-empty regression and switched the hllboolfor stuff out for the --> Bool stuff and it does benchmark faster | 02:52 | |
| Geth | rakudo/main: 4 commits pushed by (Nick Logan)++ | 03:40 | |
|
04:50
japhb left
05:05
japhb joined
|
|||
| lizmat | ok, so if I understand this correctly, specifying --> Bool (in the RakuAST bootstrap) is enough to turn an int into a proper Bool on return ? | 08:46 | |
| do we consider resolvers as implementation-detail or not? | 09:01 | ||
| I would tend to think they are implementation detail? | |||
| Geth | rakudo/lizmat-43: 613f7bf2b1 | (Elizabeth Mattijsen)++ | 5 files RakuAST: use more lookup tables and --> Bool - affects some "is-xxx" public methods - add lookup table in IMPL-THUNK-ARGUMENTS because it makes sense |
10:22 | |
| rakudo: lizmat++ created pull request #6780: RakuAST: use more lookup tables and --> Bool |
|||
| rakudo/main: 4 commits pushed by (Nick Logan)++, (Elizabeth Mattijsen)++ | 10:23 | ||
|
10:26
hankache joined
|
|||
| Geth | rakudo/lizmat-44: c88ce28f66 | (Elizabeth Mattijsen)++ | 10 files RakuAST: some more --> Bool for "is-" accessors So that they properly return a Bool rather than a 0 or 1 |
11:10 | |
| rakudo: lizmat++ created pull request #6781: RakuAST: some more --> Bool for "is-" accessors |
11:11 | ||
|
11:17
hankache left
11:18
ShimmerFairy left
11:34
ShimmerFairy joined
|
|||
| Geth | rakudo/lizmat-45: 47e0efad8b | (Elizabeth Mattijsen)++ | src/Raku/ast/name.rakumod RakuAST: some fixes / streamlining in ::Name - fix ::Name.simple-identifier, it would return 0 rather than "" if not simple - use ::Name.set-colonpairs where possible, to avoid calling ::Name.add-colonpair in a loop - use condition as index in ::Name.indirect-lookup-part - changed name of variables to be more consistent ($type -> $name) - some code esthetics for readability |
12:19 | |
| rakudo: lizmat++ created pull request #6782: RakuAST: some fixes / streamlining in ::Name |
|||
| rakudo/lizmat-45: 747dc0006c | (Elizabeth Mattijsen)++ | src/Raku/ast/name.rakumod RakuAST: some more ::Name tweaks - use ternaries instead of separate unless - use condition as index for fetching part |
12:49 | ||
| rakudo/lizmat-46: fd3aa4cc1a | (Elizabeth Mattijsen)++ | 7 files RakuAST: remove :colonpairs from ::Name.from-identifier(-parts) During compilation, a lot of identifiers are seen, and thus a lot of RakuAST::Name objects are being made. The convenience methods .from-identifier and .from-identifier-parts in core are always used *without* the :colonpairs named argument. ... (9 more lines) |
13:45 | ||
| rakudo: lizmat++ created pull request #6783: RakuAST: remove :colonpairs from ::Name.from-identifier(-parts) |
|||
| ugexe | to be clear --> Bool is not always faster | 13:51 | |
| you need to test | |||
| --> Bool allowed the other functions to inline. i tested that | |||
| (the other functions from yesterday) | |||
| lizmat | but it would be faster than putting a hllboolfor(...,"Raku") in there | 13:52 | |
| ? | |||
| as that would increase the size of the method? | |||
| ugexe | again, hllboolfor does not inline where you used it | 13:54 | |
| lizmat | right, but --> Bool will *not* prevent inlining | ||
| so if we want to make sure a method returns a Bool, --> Bool is the best way to do that, no? | |||
| ugexe | it can put some of them over the inline limit. or the way its used can make it slower because it changes between bool and int a bunch | ||
| yes, but we still need to be aware of the performance characteristics of what we change and not just assume a general rule | 13:55 | ||
| lizmat | well, if the method is exposed in Raku, we expect a Bool to be returned for a flag? or will be settle on a 0 or 1 ? | ||
| *we | 13:56 | ||
| ugexe | we would od the same thing we've always done | ||
| all the ones you changes are almost certainly fine | 13:57 | ||
| well i think anyway | |||
| lizmat | yeah, the ones that are in implementation classes | ||
| I didn't touch, nor the ones that were already expected to return a Bool | |||
| ugexe | i mean i see one in class RakuAST::VarDeclaration::Simple | ||
| basically all im saying is if something you do makes it not get inlined anymore then you should be aware of it before merging, mostly so i am aware of changes to the performance characteristics overall | 14:00 | ||
| Geth | rakudo: ugexe++ created pull request #6784: RakuAST: declare Bool returns on predicates |
14:06 | |
| ugexe | meant to push that up last night | ||
| fwiw (and you may already know this) the fastest way is generally no signature using ?? True !! False | 14:09 | ||
| lizmat | that's not what I saw on my benchmarks yesterday | ||
| ugexe | its what i see in mine | 14:10 | |
| lizmat | you're also on Apple Silicon, right? | ||
| if so, what was your benchmark? | |||
| ugexe | yes | ||
| gist.github.com/ugexe/972a50197c7c...a1b904209e here is just one example | 14:13 | ||
| plain ?? True !! False 28ns, --> Bool with an int body 34ns, --> Bool with ?? True !! False 33ns | |||
| lizmat | so shouldn't we QAST to a ternary ?? True !! False if we see --> Bool in the sig ? | 14:15 | |
| ugexe | no | 14:19 | |
| that turns anything into a bool | |||
| lizmat | you mean, it would be equivalent to --> Bool() ? | 14:20 | |
| ugexe | sort of. --> Bool now isn't like the Raku user level --> Bool constraint | ||
| lizmat | that is understood :-) | 14:21 | |
| but you can't have a --> Bool anyway if there's a return statement in a body | |||
| so --> Bool really means: make sure the "fall off" value is a Bool | |||
| so if ?? True !! False is the fastest way to do that, why don't we ? | 14:22 | ||
| ugexe | because then it isnt checking anything | ||
| the 'return' thing just means we need to improve things to work with return or to rewrite the functions that currently return to drop off | 14:23 | ||
| lizmat | but we were already clear on that? that --> Bool doesn't check anything, just converts to Bool ? | ||
| ugexe | a body that accidentally falls off with a node, a Str or a Failure would just become True/False | ||
| lizmat | we don't have Failures in the RakuAST bootstrap? | 14:24 | |
| ugexe | --> Bool on a node method converts only a native int. Anything else that isn't a Bool still throws | ||
| lizmat | but it is slower because it checks for int, is what you're saying | 14:25 | |
| ? | |||
| ugexe | github.com/rakudo/rakudo/pull/6784 | ||
| with that is 1ns slower, so the same | 14:26 | ||
| with the benefit of the type check actually working | |||
| anyways im off to work | |||
| lizmat | I guess I'll merge 6784 and then either close my PRs or resolve the collisions | 14:28 | |
| Geth | rakudo/main: 5 commits pushed by (Nick Logan)++, (Elizabeth Mattijsen)++
|
14:59 | |
| [Coke] | did a run through 8de7894122 - after a redo, have a single failure with Injector on f20534c, complaining about multi-dim arrays | 15:00 | |
| linkable6 | (2026-10-01) github.com/rakudo/rakudo/commit/8de7894122 Merge pull request #6773 from ugexe/ugexe/rakuast-invocant-colon-after-comma | ||
| [Coke] | f20534c was RakuAST: refuse a hash shape that is not a single type | 15:01 | |
| Geth | rakudo/lizmat-45: 6 commits pushed by (Nick Logan)++, (Elizabeth Mattijsen)++
|
15:03 | |
| [Coke] | github.com/coke/raku-blin-release-results | ||
| Geth | rakudo/lizmat-46: 6 commits pushed by (Nick Logan)++, (Elizabeth Mattijsen)++
|
15:04 | |
| [Coke] | lizmat: is one of these PRs getting rolled back? | ||
| github.com/rakudo/rakudo/wiki/ChangeLog-Draft | |||
| releasable6: next | |||
| releasable6 | [Coke], Next release in ≈22 days and ≈3 hours. There are no known blockers. 46 out of 68 commits logged | ||
| [Coke], Details: gist.github.com/9ee2bd4a5c3d2d1ee7...08c82f6a4a | |||
| [Coke] | er, maybe it was all in the gist link here, not sure I added everything to the changelog draft last night. | 15:05 | |
| ugexe | [Coke]: im inclined to say it isn't a regression. legacy (and rakuast prior to the commit Blin points at) just ignored the shape so it wasn't doing anything. now it fails at compile time to tell them that instead of silently doing nothing | 15:09 | |
| so Injector needs a PR | |||
| Geth | rakudo/lizmat-43: 10 commits pushed by (Nick Logan)++, (Elizabeth Mattijsen)++ review: github.com/rakudo/rakudo/compare/6...284e6577b3 |
15:48 | |
|
17:59
japhb left
|
|||
| Geth | rakudo/main: 6611063c03 | (Elizabeth Mattijsen)++ (committed using GitHub Web editor) | 5 files RakuAST: use more lookup tables and --> Bool - affects some "is-xxx" public methods - add lookup table in IMPL-THUNK-ARGUMENTS because it makes sense |
18:13 | |
| rakudo/main: 9c7786470b | (Elizabeth Mattijsen)++ (committed using GitHub Web editor) | 6 files RakuAST: some more --> Bool for "is-" accessors So that they properly return a Bool rather than a 0 or 1 |
|||
| rakudo/main: aff385f36f | (Elizabeth Mattijsen)++ (committed using GitHub Web editor) | src/Raku/ast/name.rakumod RakuAST: some fixes / streamlining in ::Name - fix ::Name.simple-identifier, it would return 0 rather than "" if not simple - use ::Name.set-colonpairs where possible, to avoid calling ::Name.add-colonpair in a loop - use condition as index in ::Name.indirect-lookup-part - changed name of variables to be more consistent ($type -> $name) - some code esthetics for readability - use ternaries instead of separate unless - use condition as index for fetching part |
18:14 | ||
| rakudo/lizmat-46: 1d4d418926 | (Elizabeth Mattijsen)++ | t/12-rakuast/name.rakutest RakuAST: fix conflict resolve snafo |
18:38 | ||
| lizmat | m: dd RakuAST::Name::Part::Simple.new("MY").is-pseudo-package | 18:49 | |
| camelia | ===SORRY!=== Error while compiling <tmp> Use of RakuAST is experimental; please 'use experimental :rakuast;' at <tmp>:1 ------> dd RakuAST::Name::Part::<HERE>Simple.new("MY").is-pseudo-package expecting any of: argument list … |
||
| lizmat | c: HEAD dd RakuAST::Name::Part::Simple.new("MY").is-pseudo-package | ||
| committable6 | lizmat, ¦HEAD(aff385f): «Bool::True» | ||
| lizmat | c: HEAD dd RakuAST::Name::Part::Expression.new(RakuAST::StrLiteral.new("MY")).is-pseudo-package # feels to me this should also be True, ugexe ? | 18:50 | |
| committable6 | lizmat, ¦HEAD(aff385f): «Bool::False» | ||
|
19:16
japhb joined
|
|||
| Geth | rakudo/lizmat-47: fa6b0755da | (Elizabeth Mattijsen)++ | src/Raku/ast/name.rakumod RakuAST: give ::Name::Part::Expression its own .is-pseudo-package It would seem only right that if an expression evaluates to a pseudo-package name, it should be marked as a pseudo package. This moves the lookup hash for pseudo package names into the RakuAST::Name::Part base class as an IMPL-xxx method |
19:19 | |
| rakudo: lizmat++ created pull request #6785: RakuAST: give ::Name::Part::Expression its own .is-pseudo-package |
19:21 | ||
| rakudo/lizmat-47: 4 commits pushed by (Elizabeth Mattijsen)++ | |||
| rakudo/lizmat-48: 380fb3fef9 | (Elizabeth Mattijsen)++ | src/Raku/ast/type.rakumod RakuAST: turn ::Type.is-known-to-be(.exactly) into single ternary With a --> Bool signature to convert the result into a Bool |
19:48 | ||
| rakudo: lizmat++ created pull request #6786: RakuAST: turn ::Type.is-known-to-be(.exactly) into single ternary |
19:50 | ||
| [Coke] | c: HEAD try { ::("Error") } | 20:01 | |
| committable6 | [Coke], ¦HEAD(aff385f): «» | ||
| [Coke] | c: HEAD my $x = "Error"; my $title; try { ::($x); $title ~~ s:g/ << $word >> //; } | 20:02 | |
| committable6 | [Coke], ¦HEAD(aff385f): «===SORRY!=== Error while compiling /tmp/5s16AvgjlQVariable '$word' is not declared. Did you mean any of these: '&words','&ord'?at /tmp/5s16AvgjlQ:1------> $title; try { ::($x); $title ~~ s:g/ << <HERE>$word >> //; } «exit code = 1»» | ||
| [Coke] | c: HEAD my $x = "Error"; my $title; try { ::($x); $title ~~ s:g/ << $x >> //; } | ||
| committable6 | [Coke], ¦HEAD(aff385f): «» | ||
| [Coke] | c: try { ::('borf') } | 20:17 | |
| committable6 | [Coke], ¦try: «Cannot find this revision (did you mean “all”?)» | ||
| [Coke] | c: HEAD try { ::('borf') } | ||
| committable6 | [Coke], ¦HEAD(aff385f): «» | ||
| [Coke] | c: HEAD try { ::('borf') }; try { ::('borf') }; | ||
| committable6 | [Coke], ¦HEAD(aff385f): «» | ||
| [Coke] | ... if I launch a REPL, and run that try command ones, I get a Nil back. If I up arrow and run it again, I get WARNING: unhandled Failure detected in DESTROY. | ||
| I have a raku/doc test script that does this repeatedly to look up if a bit of text is an object, and at some point (guessing 2026.09), the script started emitting a ton of the unhandled Failures. | 20:18 | ||
| lizmat | hmmm... cannot repro on HEAD | 20:20 | |
| [Coke] | I'll see if I can golf it | 20:21 | |
| ... but not right now | |||
| Geth | rakudo/lizmat-49: b6c6383765 | (Elizabeth Mattijsen)++ | src/Raku/ast/type.rakumod RakuAST: streamline ::Type.IMPL-EXPR-QAST - instead of if !foo / else, reverse and do if foo / else - create local copy of $!name for faster access - collapse a level of if into an elsif |
20:26 | |
| rakudo: lizmat++ created pull request #6787: RakuAST: streamline ::Type.IMPL-EXPR-QAST |
|||
| rakudo/main: 2191a57a8d | (Elizabeth Mattijsen)++ (committed using GitHub Web editor) | 7 files RakuAST: remove :colonpairs from ::Name.from-identifier(-parts) (#6783) During compilation, a lot of identifiers are seen, and thus a lot of RakuAST::Name objects are being made. The convenience methods .from-identifier and .from-identifier-parts in core are always used *without* the :colonpairs named argument. ... (9 more lines) |
20:27 | ||
| rakudo/main: 3b50b57e42 | (Elizabeth Mattijsen)++ (committed using GitHub Web editor) | src/Raku/ast/name.rakumod RakuAST: give ::Name::Part::Expression its own .is-pseudo-package It would seem only right that if an expression evaluates to a pseudo-package name, it should be marked as a pseudo package. This moves the lookup hash for pseudo package names into the RakuAST::Name::Part base class as an IMPL-xxx method |
20:28 | ||
| lizmat | and that concludes my hacking for today | 20:29 | |
| Geth | rakudo/main: c62dc64d54 | (Elizabeth Mattijsen)++ (committed using GitHub Web editor) | src/Raku/ast/type.rakumod RakuAST: streamline ::Type.IMPL-EXPR-QAST (#6787) - instead of if !foo / else, reverse and do if foo / else - create local copy of $!name for faster access - collapse a level of if into an elsif |
22:47 | |