🦋 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.
00:00 reportable6 left 00:02 reportable6 joined 00:51 [Tux] left 01:29 [Tux] joined 01:36 frost joined 02:30 Xliff joined 03:02 squashable6 left 03:04 squashable6 joined 04:21 vrurg_ joined, vrurg left 05:11 [Coke] left 05:19 [Coke] joined 06:00 reportable6 left, reportable6 joined 06:53 Xliff_ joined 06:55 Xliff left 09:45 sena_kun joined
lizmat jjatria++ 09:45
Geth rakudo/main: 0040f81316 | (Elizabeth Mattijsen)++ (committed using GitHub Web editor) | 3 files
Eradicate knowledge of COMPOSE phaser

There were some speculations, and an attempt at creating a stub that was supposedly create a NYI error, but didn't. Meanwhile, the mainline of a role is run every time it gets composed into a (new) class, so effectively we already *have* an implicit COMPOSE phaser. So there's no need for a COMPOSE phaser, it appears.
09:51
10:09 ab5tract joined 10:27 sena_kun left 11:03 frost left 11:12 sena_kun joined 11:16 frost joined, ab5tract left 11:29 ab5tract joined
lizmat ab5tract looks like "my subset Foo of Int where * %% 2" isn't working correctly 11:32
this arrives as an ApplyInfix in $!where, which is then wrapped in a Block 11:33
which feels to me it is actually wrapping a WhateverCode in a Block ?
now, I'm still not grokking how a WhateverCode comes to be exactly, so there's that ;-) 11:36
11:42 ab5tract left
leont I can imagine them being very tricky, but also very useful to convert to RakuAST 11:48
lizmat RakuAST::ApplyInfix.new( 11:51
left => RakuAST::Term::Whatever.new,
infix => RakuAST::Infix.new('%%'),
right => RakuAST::IntLiteral.new(2)
)
the Whatever.new is enough to turn this ApplyInfix into a WhateverCode 11:52
which is great
now, I wish I grokked the mechanism behind it :-)
11:53 ab5tract joined
ab5tract lizmat: That should have been covered in my test suit 11:54
*suite
it should not be wrapped in a block because it should get caught by the IMPL-CURRIES guard
My test case was for * == 5, but it should also work the same for * % 5 11:55
* % 5
* % 5; # geez
why is my IRC client gobbling a % sign? 11:56
* % % 5
* % 5
bizarre
lizmat no idea :-)
.IMPL-CURRIED or .IMPL-CURRIES ? 11:57
ab5tract IMPL-CURRIED means that the expression has already been curried 11:58
so that one 11:59
lizmat hmmm... not .IMPL-CURRY ?
12:00 reportable6 left
ab5tract the PERFORM-BEGIN of ApplyInfix already does all the currying stuff 12:00
that's why subset does its PERFORM-BEGIN-AFTER-CHILDREN
12:01 reportable6 joined
ab5tract nine might be able to explain it a bit better 12:01
IMPL-CURRIED returns the curried version of the expression
so you can use it as a truthy condition as well as a location to get the important details, like when we set_where 12:02
lizmat aha!
I think I understand what's going on... the problem is really that visit-children is being called 5 times for different used 12:08
I think I understand what's going on... the problem is really that visit-children is being called 5 times for different uses
Geth roast: 00b1595a2a | ab5tract++ | S12-subset/type-subset.t
Add simplified subset tests

These were created during the development of RakuAST::Type::Subset.
They respresent a smaller footprint of tests required for bootstrapping subsets than the current subset test suite.
12:09
ab5tract Now make spectest will provide the right feedback for your efforts lizmat :) 12:10
lizmat thanks!
ab5tract Getting ApplyInfix to work took me ages 12:11
it's a shame that we couldn't keep the original solution due to deparse, but I understand 12:12
12:13 frost left
lizmat 682 / 1356 :-( 12:21
but at least all of the additional RakuAST subset tests pass now
Nemokosch 😅 12:24
nine Why couldn't we eep the original solution?
Nemokosch so... what changed overall?
lizmat because the "where" would change depending on its contents 12:31
and thus not represent the originally given arguments 12:32
"where 42" becomes "where { 42.ACCEPTS($_) }" internally
ab5tract lizmat: Just a heads up that parameters have the same issue 12:34
lizmat and other places, yes 12:35
nine Yes, we do it like that everywhere 12:38
Geth rakudo/main: f89db51c7c | (Elizabeth Mattijsen)++ | src/Raku/ast/type.rakumod
RakuAST: Fix handling of non-blocky "where"s

Basically copy the original "where" at object creation to a private
  $!block attribute, and use that attribute further on, leaving the
original $!where untouched
rakudo/main: 7ad82e9c6a | (Elizabeth Mattijsen)++ | t/12-rakuast/subset.rakutest
RakuAST: add tests for where literal / regex
lizmat I guess we need more RakuAST:: tests then :-( 12:39
BTW, I was thinking maybe we could use a $?AST compile time variable that would contain the AST of the current $?BLOCK ? 12:40
nine And how will the optimizer now optimize those where blocks?
lizmat like any other block visited ?
visit-children does not list the $!where, but it does list the $!block 12:42
nine What if the where node gets modified after being added to the subset node?
lizmat what would modify that? 12:43
assuming we would allow a "set-where" on the Subset class 12:44
then that method would be able to do the right thing?
nine Whoever creates the AST
Or a macro 12:45
lizmat how would you modify it? with a bindattr ?
or creating a new AST with elements of the old? 12:46
nine Are AST nodes supposed to be immutable? 12:49
lizmat I'm not sure 12:51
not sure what jnthn's thinking is on that 12:52
nine On the flip side: does deparse _have_ to replicate the original source (if that even exists) even after BEGIN handlers are run? 12:54
lizmat I think it does
nine why? 12:55
lizmat because you want to be able to use the deparsing logic for tidying / linting
nine Linting is about the source. Why would that run BEGIN handlers? 12:56
lizmat Linting is about creating a representation of the source that can be easily inspected 12:57
I think ASTs are such a representation
or would you like to maintain another grammar to provide linting services ? 12:58
and keep them in sync with the core ?
nine Sure you turn the source into an AST. But why do you need to run BEGIN handlers after that? 13:01
lizmat well, I guess currently you don't have a choice ?
when you call the .AST method on a string ? 13:02
I mean, we could also envision the "where 42" to "where { 42.ACCEPTS($_) }" at the QAST level, I guess 13:03
but that would be much less convenient ? 13:04
nine The current .AST method is just a debugging aid though. I expect that to go away again when we're done. 13:07
13:13 linkable6 left, evalable6 left 13:14 linkable6 joined 13:15 evalable6 joined
lizmat perhaps: I can also see use of that for macro-builders fwiw 13:17
nine Somethng like that. But at that point we should have a discussion on what the interface really should look like and what we do promise and what we don't. 13:18
lizmat fwiw I see in class use of RakuAST classes as an easier way to build the final QAST, and as such a by-product 13:22
or half product, if you will :-)
as to the interface: using RakuAST:: classes is cumbersome, I know from writing many tests with it 13:23
and I have some ideas on making things easier
which may involve macros :-)
nine Sure. But Str.AST is ridiculously huffmanised. This is something that almost no one will ever use 13:24
lizmat so what would you call it then?
nine I don't know. We're not having that discussion yet :) First order of the day is finishing RakuAST 13:25
lizmat agree, but in such a form that we don't have to go over it again to make it really useful for macros, linting, tidying etc 13:29
ab5tract: t/spec/S12-subset/type-subset.t is not passing on base either?? 13:54
and the plan is off ? 13:57
ab5tract hmm, what's broken with base? 14:01
let me look into it. sorry for the error
it's only expressions that worked in base and not in branch, so I don't know how that could have happened 14:02
lizmat afk for a few hours& 14:05
Geth roast: 9779702e98 | ab5tract++ | S12-subset/type-subset.t
Fix poorly formed test and bad plan

  lizmat++ for point this out
15:06
roast: 887d301936 | ab5tract++ | S12-subset/type-subset.t
Use a more targeted and sensible test case
15:10
15:14 Xliff_ left
Geth roast: f53b0cda7c | ab5tract++ | S12-subset/type-subset.t
Fully convert test cast to sonsibility
15:47
ab5tract jeez, you give a person a commit bit and all they do is push too fast :/ 15:48
I'lm used to working in branches, will slow my roll in the future when pushing
Geth roast: b7c8177bc9 | thundergnat++ (committed using GitHub Web editor) | S12-subset/type-subset.t
fix minor typo
15:58
ab5tract nine: is there some way to get an expression "reduced" ? 16:08
ie, to have a Rat literal instead of an ApplyInfix [/]
the rules for enums are so fuzzy wuzzy
and I need to crawl the expression to get values, etc 16:10
it would also be much more comfortable dealing with Pairs directly instead of having to deal with colonpairs and applyinfix separately 16:12
(applyinfix =>)
Nemokosch the question is - is => a real operator from core? if it is, perhaps the principle of silently resolving it to a Pair in the parsing step is wrong 16:21
nine ab5tract: what do you need that for? 16:22
ab5tract IIUC it should always resolve lexically
nine: I'll push and create a draft so you can see what I mean
Geth rakudo: ab5tract++ created pull request #5207:
DRAFT: Add RakuAST::Type::Enum
16:30
ab5tract It starts to get cumbersome around here: github.com/rakudo/rakudo/pull/5207...17ca34R409 16:32
lizmat ab5tract: I found if things get cumbersome, maybe it is time to add a helper method in core ?
Geth roast: 262e710b23 | (Elizabeth Mattijsen)++ | spectest.data
Make sure we actually run S12-subset/type-subset.t
16:34
ab5tract you mean helper methods on other RakuAST classes? or elsewhere? 16:35
lizmat ab5tract ^^ :-) I was wondering why still stuck at 682
ab5tract lizmat++ :D
lizmat no, in base core. e.g. I added a Stash.VIVIFY-KEY method to handle OUR variable initializations
ab5tract I vow that my next roast contribution won't take 5 or 6 commits to get right
lizmat ++ab5tract 16:36
nine ab5tract: do I read that correctly that you are after the literal values? 16:40
Not AST nodes?
ab5tract Basically, yes. 16:41
nine Why don't you just interpret that AST then and use the result?
ab5tract I guess that's what I was asking how to do :) 16:42
nine IMPL-BEGIN-TIME-EVALUATE
ab5tract thanks!
okay, I'm not sure about this one.. another example of nqp::istype not working as expected for me: 17:32
in the same block: 'nqp::say($_.WHAT.raku)' outputs Pair but nqp::istype($_, Pair) fails to match 17:33
lizmat the first is a Raku HLL Pair object, the second an NQP Pair object ? 17:39
*type
ab5tract I didn't see that there was an NQP pair type. I searched through the ops.markdown for one
lizmat: so what's my best bet for hitting a guard then? '$_.WHAT.raku eq "Pair"' feels really horrible 17:40
lizmat % nqp -e 'nqp::say(~Pair)' 17:46
no error, so there is an NQP Pair object
ah, no
% nqp -e 'nqp::say(~Foo)'
meh
ab5tract I think you are right that there is one
It
It's just not possible/supported to create one directly 17:47
lizmat could well be... wish jnthn was back on #raku-dev
ab5tract Yeah... one day, maybe 17:48
other than the weirdness of checking whether it is a Pair or not, IMPL-BEGIN-TIME-EVALUATE has been a total dream to use 17:49
18:00 reportable6 left 18:01 reportable6 joined 18:02 sena_kun left
nine Is Pair even declared in the bootstrap? 18:03
lizmat nope 18:10
nine Then it isn't available directly in RakuAST. That's what IndirectLookup is for 18:12
18:16 ab5tract left 18:30 ab5tract joined
ab5tract how do I utilize indirect lookup here? I don't see other examples while searching RakuAST 18:31
just references to a way to produce QAST for indirect lookups
18:37 sena_kun joined 19:30 ab5tract left 19:53 ab5tract joined
ab5tract make 19:59
nine I meant ImplicitLookup 20:07
Nemokosch uh oh, that word is traumatic 😆 20:08
nine implicit lookups are resolved before BEGIN handlers are run, so you can use that just fine to get Pair from the setting 20:09
ab5tract Nemokosch: Did you ever get your thing figured out? 20:15
tellable6 ab5tract, I'll pass your message to Nemokosch
Nemokosch no, I've run out of copium 20:16
ab5tract fair enough 20:17
20:38 codesections joined
ab5tract damn, it looks like ImplicitLookups + InstallsPackage somehow causes ambiguous hierarchy 20:49
22:18 squashable6 left 22:20 squashable6 joined
Nemokosch what's InstallsPackage? 22:29
23:33 codesections left