🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). Log available at irclogs.raku.org/raku/live.html . If you're a beginner, you can also check out the #raku-beginner channel!
Set by lizmat on 6 September 2022.
00:00 reportable6 left 00:01 reportable6 joined
SmokeMachine Voldenet, lizmat: Do you think it's better like this? github.com/FCO/RakuAST-Matcher/com...c97143910c 00:10
00:19 RakuIRCLogger joined 00:20 lizmat joined 00:23 RakuIRCLogger left, RakuIRCLogger joined 00:26 derpydoo joined 00:29 jpn joined 00:30 jpn left 00:37 raiph joined 00:44 Archenoth is now known as arch 01:16 deoac left 01:26 teatime joined 01:31 andydude joined 02:21 teatwo joined 02:22 teatwo left, teatwo joined 02:25 teatime left 02:28 rypervenche joined 03:28 squashable6 left, unicodable6 left, coverable6 left, bisectable6 left, evalable6 left, releasable6 left, committable6 left, linkable6 left, statisfiable6 left, greppable6 left, bloatable6 left, notable6 left, reportable6 left, sourceable6 left, shareable6 left, tellable6 left, benchable6 left, nativecallable6 left, quotable6 left 03:29 notable6 joined, evalable6 joined, reportable6 joined, benchable6 joined, linkable6 joined 03:30 bloatable6 joined, releasable6 joined, greppable6 joined, shareable6 joined, committable6 joined, sourceable6 joined, quotable6 joined 03:31 nativecallable6 joined, coverable6 joined, statisfiable6 joined, bisectable6 joined, squashable6 joined, tellable6 joined, unicodable6 joined 03:50 raiph left
Voldenet SmokeMachine: definitely a lot easier to maintain, btw you don't need {} in `gather { $needle.visit-children: *.take }` ┐(´~`;)┌ 04:32
04:32 human-blip left
Voldenet but `my @needle = gather { $needle.visit-children: *.take };` would probably allocate large array without iterating anyway 04:34
`my $needles = gather $needle.visit-children: *.take; my $asts = gather $ast.visit-children: *.take; [&&] ($needles.Seq Z $asts.Seq).map(…)` would iterate 04:38
05:32 linkable6 left, evalable6 left 05:35 evalable6 joined 05:36 linkable6 joined 06:00 reportable6 left, reportable6 joined 06:27 andydude left 06:33 lichtkind_ joined 06:50 squashable6 left 06:53 squashable6 joined 07:18 jpn joined
SmokeMachine Voldenet: I've forgotten to add `lazy` before the gather that was my intention 07:29
07:29 jpn left
SmokeMachine Voldenet: Thank you 07:30
Voldenet i'm not a fan of lazy, because it'll still allocate arrays 07:32
which is not needed if it's simply fed to [&&]
07:36 Geth joined 07:37 RakuIRCLogger left, RakuIRCLogger joined
SmokeMachine Voldenet: but I don't think those arrays would ever be very big, how many local children (not descendants) a node usually have? 07:38
m: say gather "1 + 2 + 3 + 4 + 5".AST.visit-children: *.take
camelia (RakuAST::Statement::Expression.new(
expression => RakuAST::ApplyInfix.new(
left => RakuAST::ApplyInfix.new(
left => RakuAST::ApplyInfix.new(
left => RakuAST::ApplyInfix.new(
left => RakuAST::IntLiteral.new(…
SmokeMachine m: say (gather "1 + 2 + 3 + 4 + 5".AST.visit-children: *.take).elems 07:39
camelia 1
SmokeMachine Voldenet: but yes, that makes sense 07:40
Voldenet btw, visit-children is not recursive
SmokeMachine yes, that was my thinking... 07:41
Voldenet in the worst case the matching tree can grow beyond the stack
m: say elems gather "1 + 2 + 3 + 4 + 5".AST.visit: *.take 07:42
camelia 15
SmokeMachine yes, with visit that could be a problem
Voldenet m: say elems gather '[&&] (@needle Z @ast).map({ match(|$_) })'.AST.visit: *.take
camelia ===SORRY!=== Error while compiling
Variable '@needle' is not declared. Perhaps you forgot a 'sub' if this
was intended to be part of a signature?
------> [&&] (⏏@needle Z @ast).map({ match(|$_) })
Voldenet m: say elems gather 'sub match(|c) { }; my @needle; my @ast; [&&] (@needle Z @ast).map({ match(|$_) })'.AST.visit: *.take 07:43
camelia ===SORRY!=== Error while compiling
------> &&] (@needle Z @ast).map({ match(|$_) })⏏<EOL>
Voldenet m: say elems gather 'sub match(|c) { }; my @needle; my @ast; [&&] (@needle Z @ast).map({ match($_) });'.AST.visit: *.take 07:44
camelia ===SORRY!=== Error while compiling
------> [&&] (@needle Z @ast).map({ match($_) })⏏;
SmokeMachine I can't do that, I would be comparing many things more times than needed...
07:44 jpn joined
Voldenet either way, visit does iterate and uses queue 07:44
instead of being recursive 07:45
I'm not sure how costly it is in terms of stack usage, but things could get ugly if you use it on large files 07:50
even if locally match used tiny arrays, the arrays may accumulate and get too fragmented to stay in caches in continuous form 07:56
either way, even that gigantic chunk would simply contain pointer, so it doesn't improve data locality anyhow 07:58
I'd still attempt to use visit instead, I'm betting it will handle worst cases better 08:05
08:10 dakkar joined 08:13 sena_kun joined 08:29 Sgeo left 08:36 derpydoo left 09:09 jpn left, jpn joined 10:51 jpn left 11:08 jpn joined 11:34 jpn left 11:37 jpn joined 11:44 jpn left 11:54 fikurimax joined 11:55 fikurimax left 12:00 reportable6 left 12:02 reportable6 joined 12:12 jpn joined 13:05 jpn left 13:55 ProperNoun joined 14:09 ProperNoun left 14:10 ProperNoun joined 14:21 tea3po joined 14:22 Sgeo joined, Sgeo left, tea3po left 14:23 tea3po joined 14:24 teatwo left 14:25 Sgeo joined 14:28 jpn joined 14:33 jpn left 14:38 RandalSchwartz joined, RandalSchwartz left 14:57 ilogger2 left 14:58 ilogger2 joined 15:25 jpn joined 15:30 [Coke] left 15:31 jpn left 15:52 jpn joined 16:05 [Coke] joined 16:22 ab5tract joined 16:36 dakkar left 16:53 ab5tract left
tbrowder__ howdy, all. i have a module "unit class SomeLongName" A" and i would like to refer to the class as, say, S. then do this: my $s = S.new; 16:55
i've tried variants of "our \S is export = SomeLongName" but no luck so far. aliasing subs and other things seems pretty straightforward. 16:57
[Coke] you're trying to create the alias i mthe class def and export it too? 17:02
*in the*
I would expect you'd have have a module with the class and the alias exported, not a top level class in the file 17:03
lucs tbrowder__: Could ⌊class S is SomeLongName {}⌉ be enough? 17:09
tbrowder__ [Coke]: that was just a simple sample 'cause i'm used to the general syntax. 17:25
lucs: great, didn't think of that. i'll give it a try right now. thnx 17:26
[Coke] I would recommend not exporting an alias by default in code you expect others to use. 17:28
lizmat sub EXPORT { Map.new: ( 'SomeLongName' => SomeLongName, 'S' => SomeLongName ) } 17:35
note, I would let the consumer do the aliasing in general
use SomeLongName; my constant S = SomeLongName; 17:36
18:00 reportable6 left 18:01 reportable6 joined
tbrowder__ luc's method works for me so far. 18:25
i put both defs in one module with nothing else. defined the Long class first. then: "class S is Long is export {}" and all is well 18:26
any downside? 18:27
lizmat m: class A { }; class B is A { }; dd B.^name 18:32
camelia "B"
lizmat m: class A { }; my constant B = A; dd B.^name
camelia "A"
lizmat not sure whether that is an upside or a downside
18:36 jpn left
tbrowder__ hm, i like your way better, seems like a real alias to me 18:39
testing again now....
works great, exports fine, thanks 18:43
18:49 jpn joined 18:54 deoac joined 18:55 jpn left
tbrowder__ opinion on a class name, please: "Array1'indexed" <= the apostrophe in a valid name, a very cool Raku feature 19:11
19:12 jpn joined
tbrowder__ m: class A'B { say "cool"}; my $b = A'B.new; say $b 19:12
camelia cool
leont I'm still not sure that was a good idea, but I'm extremely happy that - is legal (they follow the same rules, e.g. an identifier can't begin or end with either) 19:17
avuserow tbrowder__: I would generally not use it. Maybe in math-y code, or generated code to help with namespacing, or for a more inventive domain-specific languages?
though I do agree that kebab-cased variables are excellent 19:18
19:23 jpn left 19:24 deoac left
lucs tbrowder__: Yeah, I prefer lizmat's way too :) 19:44
19:54 jpn joined 20:00 euandreh left
tbrowder__ avuserow: yeah, agree. i think i've settled on "ArrayOneBased" for real name 20:00
lucs: i agree, but yr suggestion led to the solution! 20:01
lucs I kind of knew my answer was a bit off, but I know that Cunningham's law always has a good chance of manifesting itself :) 20:04
20:05 zmoment joined 20:34 jpn left 20:35 jpn joined, jpn left 21:04 squashable6 left, squashable6 joined 21:38 sena_kun left 23:10 andinus left
tbrowder__ i just released Algorithn 23:37
duh, AlgorithmsIT
Anton Antonov @tbrowder Reading it now. More importantly, that package name convinced me that the name I have chosen for my next-to-publish package is correct. 23:57