🦋 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:02 reportable6 joined 00:04 epony left 00:27 derpydoo joined 00:45 deoac joined 01:03 xinming left 01:05 xinming joined 01:15 bigdata left 01:19 rf joined
rf Evening folks 01:19
02:14 teatwo left 02:15 teatwo joined 02:18 tea3po joined 02:21 teatwo left 02:30 razetime joined 02:31 razetime left 03:31 tellable6 left, notable6 left, quotable6 left, statisfiable6 left, squashable6 left, reportable6 left, coverable6 left, sourceable6 left, bisectable6 left, benchable6 left, shareable6 left, greppable6 left, bloatable6 left, nativecallable6 left, releasable6 left, linkable6 left, committable6 left, unicodable6 left, notable6 joined, statisfiable6 joined, greppable6 joined 03:32 benchable6 joined, nativecallable6 joined, linkable6 joined, reportable6 joined 03:33 squashable6 joined, sourceable6 joined, quotable6 joined, shareable6 joined, coverable6 joined, bloatable6 joined 03:34 tellable6 joined, unicodable6 joined, releasable6 joined, committable6 joined, bisectable6 joined 03:44 tea3po left 04:00 rf left 04:17 cm left, cm joined 04:35 jmcgnh left 04:44 jmcgnh joined 05:16 epony joined 06:00 reportable6 left 06:01 reportable6 joined 06:53 Voldenet_ joined 06:54 Voldenet left, Voldenet_ is now known as Voldenet 07:00 epony left 07:02 jpn joined 07:07 jpn left 07:15 Sgeo left 07:38 human-blip left 07:42 human-blip joined 08:01 epony joined 08:11 dakkar joined 08:36 grondilu joined
grondilu Hi all 08:36
I was about to rewrite rosettacode.org/wiki/Pernicious_numbers#Raku to use a subset, then I realized there is no subset for primes anyway so it doesn't make much sense to create one for an even more niche subset 08:37
lizmat subset prime of Int where *.is-prime 08:38
?
grondilu so why don't we have a `Prime` subset for primes instead of &is-prime?
lizmat because you can create one like ^^ ?
grondilu but I'm too lazy for that. Why not put it in the core? 08:39
08:40 jpn joined
lizmat well, it's the perennial discussion, really 08:41
08:41 deoac left
lizmat why isn't raku.land/zef:lizmat/Slang::Subscripts in core ? 08:41
grondilu well what we put in the core or not is kind of arbitrary. Is TimToady still around to decide of these stuff? 08:42
lizmat no, jnthn is de facto pumpkin. and then we have the RSC that sometimes decides things :-) 08:43
a PR is a good place to start a discussion 08:44
see e.g. adding the "is-monotonically-increasing" addition to iterators I PRed yesterday
github.com/rakudo/rakudo/pull/5243 08:45
08:45 jpn left
grondilu noted 08:45
Nemokosch I don't like this idea, to be frank. It hides complexity for very little visual gain. 08:47
and it's a very slippery path to walk down upon overall. By the same chance, one might create an Odd subset, an Even subset, a SquareNumber subset, a PerfectNumber subset and the list goes on for eternity. 08:51
grondilu not for eternity. 08:54
08:56 sena_kun joined
grondilu besides, we've already decided to add a &is-prime function in the core. This is a spot in the core namespace. The question is : why should this spot be put in the function namespace and not in the subset namespace? 08:56
08:57 jpn joined
grondilu by comparison, we do not have a &is-odd or &is-even functions. 08:57
Nemokosch because you can always just write that with literally less characters: %%2 09:00
09:01 jpn left
I think it's "generous" that there is a prime test maintained as core but again, I don't find it fortunate to hide a prime test behind something that looks like an actual type of things 09:01
grondilu why? 09:02
I don't see anything wrong with that.
Nemokosch because it's not an actual type, it's code that runs on each occasion
if you don't, you are free to define it for yourself
grondilu 🤔
09:03 cm left
grondilu I see your point. A subset runs some code everytime, I forgot that. 09:03
09:04 jpn joined
Nemokosch subsets are best used as a domain specific thing overall. When somebody just looks at an apparent type name, they might not be aware (or conscious about it) that they are actually running code every time they add the constraint and assign a value to a constrained variable 09:04
grondilu is convinced 09:06
Nemokosch m: Subset Prime is Int
Raku eval Exit code: 1 ===SORRY!=== Error while compiling /home/glot/main.raku Undeclared names: Prime used at line 1 Subset used at line 1 Undeclared routine: is used at line 1
Nemokosch that's not quite what happened in the REPL 09:07
m: Subset Prime is Int where *.is-prime
Raku eval Exit code: 1 ===SORRY!=== Error while compiling /home/glot/main.raku Two terms in a row at /home/glot/main.raku:1 ------> Subset Prime is Int⏏ where *.is-prime expecting any of: infix infix stopper postfix statement end statement modifier statement modifier loop
Nemokosch yep, this one
should have known better than uppercase "subset" but the error is wrong for sure
lizmat I'd say LTA 09:08
09:09 jpn left
Nemokosch I think this is closer to downright false than just obscure 09:09
09:09 cm joined
is there a way to see how it was parsed? 09:09
lizmat m: Foo Bar Baz 09:10
camelia ===SORRY!=== Error while compiling <tmp>
Undeclared names:
Bar used at line 1. Did you mean 'Bag'?
Baz used at line 1. Did you mean 'Bag'?
Foo used at line 1
lizmat m: Foo Bar is Baz
camelia ===SORRY!=== Error while compiling <tmp>
Undeclared names:
Bar used at line 1. Did you mean 'Bag'?
Baz used at line 1. Did you mean 'Bag'?
Foo used at line 1
Undeclared routine:
is used at line 1
lizmat m: Foo Bar is Int
camelia ===SORRY!=== Error while compiling <tmp>
Undeclared names:
Bar used at line 1. Did you mean 'Bag'?
Foo used at line 1
Undeclared routine:
is used at line 1
lizmat m: Foo Prime is Int 09:11
camelia ===SORRY!=== Error while compiling <tmp>
Undeclared names:
Foo used at line 1
Prime used at line 1
Undeclared routine:
is used at line 1
lizmat aah... Subset is a class
m: dd Subset.HOW.name
camelia ===SORRY!=== Error while compiling <tmp>
Undeclared name:
Subset used at line 1
lizmat m: dd Subset
camelia ===SORRY!=== Error while compiling <tmp>
Undeclared name:
Subset used at line 1
lizmat no?
m: Foo Prime is Int where *.is-prime 09:12
camelia ===SORRY!=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> Foo Prime is Int⏏ where *.is-prime
expecting any of:
infix
infix stopper
postfix
statement end
Nemokosch somehow the where clause interfered
lizmat yeah, before that, it could be interpreted as
Nemokosch maybe it's some sort of variable declaration
but what sort 😆 09:13
lizmat m: Foo(Prime(is(Int)))
camelia ===SORRY!=== Error while compiling <tmp>
Undeclared names:
Foo used at line 1
Prime used at line 1
Undeclared routine:
is used at line 1
Nemokosch anyway, for now, I'll just take a note; that's not what I wanted to test clearly 09:16
m: subset Prime of Int where { say 'BOOM'; .is-prime }; my Prime $ensured = 97; my Prime $new = $ensured; 09:18
Raku eval BOOM BOOM
Nemokosch I don't know if the second "BOOM" has a theoretic reason or if it's desirable but one thing is sure
as things stand, subsets are very expensive 09:19
09:35 tadzik left, CIAvash left, uzl[m] left, Matthew|m left 09:43 CIAvash joined 09:57 Matthew|m joined, tadzik joined, uzl[m] joined
lizmat I guess the second BOOM could be optimized away with an nqp::eqaddr check 10:03
10:17 tadzik left, uzl[m] left, Matthew|m left, CIAvash left
Geth App-Rakubrew: 335f5eee4b | (Patrick Böker)++ | 3 files
Version 36
10:21
10:24 tadzik joined 10:27 Matthew|m joined 10:36 uzl[m] joined 10:38 derpydoo left
patrickb [Coke], ugexe, vrurg, whoever else uses Rakubrew on ARM MacOS: The latest update (version 36) will break your installation. You need to manually do the update by downloading rakubrew.org/macos_arm/rakubrew manually and replacing ~/.rakubrew/bin/rakubrew with it. (The update process will warn and instruct you as well.) 10:41
Nemokosch what changed in the new version? 10:46
Anton Antonov @patrickb Good to know! 10:49
... and who did it !?
Nemokosch by the way, there is something tricky... something "iterable" in Raku is not necessarily Iterable 10:50
m: 'asdgg'.encode('iso-8859-1') ~~ Iterable 10:51
Raku eval
Nemokosch oops
m: 'asdgg'.encode('iso-8859-1') ~~ Iterable andthen .say
Raku eval False
Nemokosch however, does it really make sense to say that it's not "iterable"?
m: .say for 'asdgg'.encode('iso-8859-1');
Raku eval 97 115 100 103 103
Nemokosch in Raku, everything might be "iterable" and Blobs clearly have meaningful semantics when iterated 10:52
11:01 CIAvash joined
patrickb Nemokosch: v36 only contains the fix for updating ARM MacOS. But since the code for the update process is run in the installed version and not in the new version one needs to do this one update manually. 11:04
tellable6 patrickb, I'll pass your message to Nemokosch
patrickb Anton Antonov: What do you mean by "who did it !?" 11:05
11:14 grondilu left 11:32 CIAvash left, uzl[m] left, tadzik left, Matthew|m left 11:36 CIAvash joined
Anton Antonov @patrickb It is just a joke. (Or an attempt for one...) 11:39
11:39 Matthew|m joined, tadzik joined, uzl[m] joined
That said, in the past I spent disproportionate amount of time figuring out installation problems with Raku on macOS with M1 processor. (Both packages and raku and rakubrew.) 11:41
11:52 ab5tract joined
Voldenet Nemokosch: in fact I wonder why Positional role isn't iterable, which is a lot wider than Blob (and is supported by Blob) 11:54
tellable6 Voldenet, I'll pass your message to Nemokosch
Voldenet it appears that simply adding `does Iterable` on Blob role would fix things 11:55
Nemokosch I don't know but Blob is "iterable" for practical purposes because it implements the list method 11:57
Anything that implements that method is "iterable" for practical purposes 11:58
Voldenet But it still is valid to mark that as iterable, making a copy is simply implementation detail in that case 11:59
not necessary, but not invalid either
12:00 reportable6 left
Nemokosch agreed 12:00
12:00 jpn joined
it shouldn't matter why/how it is iterable, the "iterability" is in the fact that it has meaningful semantics for obtaining an iterator 12:01
and this leads to funny things like, it works with for˙or map even, but lazy is a lookup error 12:02
because a lot of stuff comes straight from Any, using the list method 12:03
12:03 reportable6 joined
Voldenet there's something magical about "Any" implementing things that are supposed to be specific to iterable things 12:04
12:05 jpn left
Voldenet m: say "???".map(* x *) 12:05
camelia Too few positionals passed; expected 2 arguments but got 1
in block <unit> at <tmp> line 1
Voldenet m: say "???".map({ $_ x $_ }) 12:06
camelia Cannot convert string to number: base-10 number must begin with valid digits or '.' in '⏏???' (indicated by ⏏)
in block <unit> at <tmp> line 1
Voldenet m: say "???".map({ $_ ~ $_ })
camelia (??????)
Voldenet m: .say for Nil 12:09
camelia Nil
Voldenet I'd argue that in this case (and .map) it'd be more useful to treat Nil as empty, so $whatever.map(*.thing) becomes () 12:10
lizmat Nil indicates the absence of a value where there is supposed to be one 12:11
Voldenet So, optional with no value 12:12
lizmat nope, there was supposed to be a value, but there wasn;t
think of it as a box that is supposed to have something in it, but a box must be there
you want to take away the box :-) 12:13
Voldenet I see a nail and I'd like to apply monad hammer to it
lizmat well, that's Empty 12:14
generating Empty is really easy in the context of a Map
*map
m: say (1..10).map({ $_ unless $_ == 5})
camelia (1 2 3 4 6 7 8 9 10)
Voldenet Oh, that's clever, so instead of some item a Empty slip can be used in `for/map` context 12:17
s/a /an /
lizmat yup 12:18
m: dd do if 0 { }
camelia Empty
lizmat a failed conditional returns Empty 12:19
Voldenet in fact the only pain I have with Any.map is `my $x = (1, 2, 3); .say for $x;` 12:21
lizmat but that's because it's itemized in the variable 12:22
m: my $x := (1, 2, 3); .say for $x # unitemized
camelia 1
2
3
Voldenet Yes, and that's sort of what I'd expect from perl 12:23
m: y $x = (1, 2, 3); .say for @$x;
camelia ===SORRY!=== Error while compiling <tmp>
Unsupported use of y///. In Raku please use: tr///.
at <tmp>:1
------> y⏏ $x = (1, 2, 3); .say for @$x;
Voldenet m: my $x = (1, 2, 3); .say for @$x;
camelia 1
2
3
Voldenet well, maybe I shouldn't kick .map too hard because in either case it'd work
m: my $x = (1, 2, 3); .say for $x.map({ $_ });
camelia 1
2
3
lizmat yeah, one could argue that that shouldn't iterate either 12:28
but changing that now would have rather big consequences
Voldenet changing it the other way around (don't allow iterating on single value) would probably be safer 12:32
but probably useful enough to justify it
s/useful/not useful/
Nemokosch meh, please don't try to justify Nil wrapping into a one-element list 12:35
It probably bit me more times than anybody ever found it useful
Voldenet I'm not going to lie, Nil scares me
Nemokosch I'm not sure where I said this but I mean it seriously 12:36
Voldenet it's like 'dynamic' in C#, it's a useful part of the language, but it's scary
Nemokosch if anybody wanted to make fun of Raku, there is a painfully obvious way
"how do you mark a missing value"
and all of a sudden, you have Empty, Nil, all the type objects, and any combination of them 12:37
even Failure to some extent
Voldenet Empty is obviously a monad, Type objects are nulls, I don't know how to explain Nil 12:38
Nemokosch Empty which is .DEFINITE but not .defined
// checks for .defined, 😄 checks for .DEFINITE 12:39
thank you discord...
lizmat m: my $a is default(42); say $a; $a = 666; say $a; $a = Nil; say $a
camelia 42
666
42
lizmat m: my $a is default(42); say $a; $a = 666; say $a; $a = Empty; say $a
camelia 42
666
()
Voldenet m: my @o is default(0) = ^5; @o[3] = Nil; say @o
camelia [0 1 2 0 4]
Nemokosch m: my @p = Nil; dd @p 12:40
Raku eval Array @p = [Any]
Voldenet It's all obvious, default value is Any by default
Nemokosch there should be a level of WAT that shouldn't be allowed, no?
Voldenet to be honest
Nemokosch a level of WAT where an explanation isn't sufficient anymore
no matter how many turns I take, I always arrive to a rather general statement 12:41
Voldenet m: my \default-o := 0; my @o = ^5; @o[3] = default-o; say @o
camelia [0 1 2 0 4]
Voldenet it's pretty similar to the above but obvious to people not knowing the language well 12:42
Nemokosch either @vars get a proper identity, or they are second-hand citizens not worth being called a variable, and hence to be disadvised to newcomers
Voldenet oh and 12:43
m: my @o is default(0) = ^5; @o[3] := Nil; say @o
camelia [0 1 2 Nil 4]
Nemokosch they are Java reference objects that kinda sorta pretend to be C-style actual data objects 12:44
I have been thinking about this whole containerisation story a lot, still not sure about the solution 12:48
Voldenet as a related thing - it that feels a bit weird that anything can become @x-sigiled variable
m: my @x is Compiler; @x[2] = 42
camelia Index out of range. Is: 2, should be in 0..0
in block <unit> at <tmp> line 1
Voldenet I'd expect it to require Positional role at least 12:49
Nemokosch m: my @x is Compiler; @x.WHAT.say;
Raku eval (Compiler)
Nemokosch pfff
I thought this was forbidden 12:50
Voldenet You can bind anything to it
m: my @x is Hash; @x{"hello"} = "world"; say @x
camelia {hello => world}
Nemokosch is this not simply a bug? 12:51
one problem with containers is that the term itself is not clearly defined. If we think of a container as something that can STORE values, clearly there are different kinds of containers, just as there are different kinds of assignments. However, the number of indirections is not the same for these containers 12:54
Voldenet Not a bug, more like using tools wrong
Nemokosch the only "containerizer" is Scalar. Now the next problem is that containerisation and itemisation is tied together 12:55
Voldenet m: my @x is Hash; @x{"a"} = "b"; @x{"b"} = "c"; say @x[0]
camelia {a => b, b => c}
lizmat there's also Proxy
afk&
Nemokosch wanting to have an identity for assignment is perfectly legit but that use case rarely ever has anything to do with how you want the data to be traversed in a for loop 12:56
Voldenet You could say that @x and %x are pointless when using perl5 12:57
Nemokosch a for loop on a nested Array will always trip a newcomer up, it has happened on numerous occasions, I'd say most people will be struck by that at first 12:58
regardless, you might want to swap/reassign an Array sometimes, and in those cases, you are forced to carry around a container just to do that 12:59
m: my @choices = <a b c>; given @choices { $_ = <d e f>; } 13:00
Raku eval Exit code: 1 Cannot assign to an immutable value in block <unit> at main.raku line 1
13:00 jpn joined
Nemokosch right, "immutable value" 13:00
Voldenet In fact, if someone wanted some advice on writing perl/raku, $-sigiled variables almost everywhere are the way to go 13:01
Nemokosch exactly...
that's "what you want"
Voldenet But % and @ are extremely useful in tons of cases
Nemokosch could you show one such a case? 13:02
Voldenet especially if your @ is Positional and % is Associative
Nemokosch Btw I'd also proceed to say that Array over List and Hash over Map is similarly "what you want"
not because of the mutability (the latter types can also carry containers, mind you) but because of the metadata that you get with all items when they have containers 13:03
Voldenet > ls | raku -ne 'state @x; @x.push($_); END say @x' 13:04
…aaand using $x would also work :/ 13:05
13:05 jpn left
Nemokosch I think if someone wanted to estimate the pros and cons, benefits and risks of choosing $var vs @var, they would really not be equal choices 13:06
yet they are presented as if they were
and no, this isn't about particular types of data
this is about "variable-y" behavior 13:07
Voldenet I'm used to this only because in perl5 `push($x, $_)` is invalid
so you sort of get into using % and @ in most scopes where you don't want to transfer any references… 13:08
Nemokosch containers are useful - the lack of containers, by contrast, is not nearly as useful
Voldenet and if you do, you put it into a scalar assp
Nemokosch and what @vars and %vars offer is not another thing, just a lack
the metaphysical aspect of this is interesting nevertheless 13:10
Voldenet Any became too flexible for its own good
m: my $x; $x{"a"} = 42; say $x
camelia {a => 42}
Voldenet m: my $x; $x[1] = 42; say $x 13:11
camelia [(Any) 42]
Voldenet so far so good
m: my $x; $x[1] = 42; $x{"a"} = 42; say $x
camelia Type Array does not support associative indexing.
in block <unit> at <tmp> line 1
Voldenet m: my $x; $x{"a"} = 42; $x[1] = 42; say $x
camelia Index out of range. Is: 1, should be in 0..0
in block <unit> at <tmp> line 1
Nemokosch like, what state of mind did one need to say that the thing that we all knew as "variable" in virtually all languages, is just one particular category of variables, called Scalar?
now if they had the same enlightening vision about non-Scalar things, that would be out of this world 13:12
but sadly, non-Scalar things simply became this lack. They are not Scalars, nor something else.
Voldenet m: my @x; @x = 1, 2, 3; say @x 13:13
camelia [1 2 3]
13:13 jgaz joined
Voldenet m: my $x; $x = 1, 2, 3; say $x 13:13
camelia WARNINGS for <tmp>:
1
Useless use of constant integer 3 in sink context (lines 1, 1)
Useless use of constant integer 2 in sink context (lines 1, 1)
Voldenet it's something ¯\_(ツ)_/¯ 13:14
and the first one is obviously in wantarray context
:>
Nemokosch that's just syntax 13:15
now, is extra syntax justified if you cannot put the semantics behind?
Voldenet imo it is if you justify that it represents a type of data for legibility 13:17
m: my \x = 1, 2, 3; say x # extra syntax can be used in other ways though
camelia (1 2 3)
Nemokosch legibility shouldn't have the sort of paycheck that it has for @ and % 13:21
it's bizarre that you lose the whole bind-and-assign mechanism
you lose most mutability related traits, too 13:22
Voldenet C# is even weirder
Nemokosch you lose the possibility to have a default for the whole variable
Voldenet struct and class are stored in entirely different way, but there's no different sigils or anything
it's simply _a variable_
Nemokosch so is an integer and a floating point number different 13:23
Voldenet in terms of bytes storage and operations invoked, but not in terms of variable access 13:24
Nemokosch what does "variable access" mean here?
Voldenet double x = 3.14; int y = 4; Write(x + 5); Write(y + 6);
same code, you literally see no complexity happening underneath 13:25
Nemokosch yep
happens all the time
Voldenet It's even the case with class/struct x { public int y; public int z; }
Nemokosch somewhere along the lines, this is a goal of abstractions
Voldenet Is it a problem? Yes it is
Nemokosch not necessarily 13:26
Voldenet > void DoThing(X something) { something.A = 42; }
to know whether something was mutated you need to look at definition of X
it can get trickier when you nest and mix both
Nemokosch what would happen instead of mutation? 13:27
Voldenet Absolutely nothing! :D
Nemokosch why though
I mean... who in the right mind thought that was sane behavior for any purpose
Voldenet in case of struct, DoThing gets fields from struct x pushed onto the stack as args
Nemokosch oh okay, so that's what you meant 13:28
Voldenet and if you return a struct, return fields get pushed onto the stack
Nemokosch whether it's copied or not
yeah tbh this is C++ misinterpreted
back to the sigils... 13:30
I think it's very telling that nobody ever "advertised" sigils with the container stuff that it influences so crucially
Voldenet if you tied @-variables to the stack, the difference would be enormously obvious
Nemokosch even though one cannot just say that "it's buggy, let's stay silent about it"
that's how it is designed and it would be really hard to change it, it's an integral part of how all this works 13:31
why does nobody feel that it's important - actually the most important thing - to tell people that sigils influence how assignment and mutation-related traits work? 13:32
this IS the important thing, not Positional and Associative
and this is when I strongly suspect that other people either also don't feel confident in their knowledge about this, or they just think this is too much for a beginner to take 13:33
but then it's really hard to tell them what's so good about sigils...
Voldenet Perhaps some scraps of explanatory code where you can't trivially replace @ with $ would be nice 13:35
Nemokosch It's quite possible that you know this already but still, I wanted to "process" the "Any became too flexible ..." snippets 13:37
m: my $x; $x{"a"} = 42; say $x
Raku eval {a => 42}
Nemokosch auto-vivification; if it has the default value, it can create a container out of thin air 13:38
m: my $x; $x[1] = 42; say $x
Raku eval [(Any) 42]
Nemokosch same thing, with the slight difference that "Any"thing can be indexed with [] by default anyway 13:39
(in order to make them act like one-element lists, I guess)
m: my $x; $x[1] = 42; $x{"a"} = 42; say $x
Raku eval Exit code: 1 Type Array does not support associative indexing. in block <unit> at main.raku line 1
Nemokosch can't be auto-vivified when it already has content
m: my $x; $x{"a"} = 42; $x[1] = 42; say $x 13:40
Raku eval Exit code: 1 Index out of range. Is: 1, should be in 0..0 in block <unit> at main.raku line 1
Nemokosch and this is where you can see that [] indexing "always" works so the error is different here
Voldenet btw 13:41
m: my %x is Array; %x[1] = 42; say %x
camelia [(Any) 42]
Voldenet m: my %x is Array; %x = 1, 2, 3; say %x 13:42
camelia [1 2 3]
Nemokosch what if we omit the Array part?
m: my %x; %x[1] = 42; say %x
Raku eval Exit code: 1 Index out of range. Is: 1, should be in 0..0 in block <unit> at main.raku line 1
Voldenet Of course, it's a Hash
Nemokosch cannot auto-vivify
and if we do the same with [0], it will say that the rhs has odd number of elements? 13:43
m: my %x; %x[0] = 42; say %x
Raku eval Exit code: 1 Odd number of elements found where hash initializer expected: Only saw: 42 in block <unit> at main.raku line 1
Nemokosch excellent 😄
Voldenet it's a bit more useful when you try to do multivalued hash with it, but the sigil's usage is only useful in case of default hash 13:45
`my $x = SomeHashType.new;` would be equally as good and probably more obvious 13:47
Nemokosch only the containerisation/itemisation makes some difference 13:48
but .map, for example, doesn't care from what I know
Voldenet > docs.raku.org/language/variables.h...@_variable 13:49
Nemokosch even the assignment is such a little overhead
Voldenet if you replace the @ with $, the example would still work
docs could use some example that wouldn't work otherwise, hm 13:50
Nemokosch probably that's because of the auto-vivification again
but there I can take it that @ might be more readable
Voldenet % and @ aren't even that different 13:51
Nemokosch anonymous state variables are kind of a niche either way
Voldenet they are big win for most one liners 13:54
14:13 linkable6 left, evalable6 left 14:14 linkable6 joined 14:16 evalable6 joined
tbrowder__ m: sub f($d) { $d * pi}; my $a = f 30; say $a; 14:27
camelia 94.24777960769379
tbrowder__ howdy, just checking syntax; i'm getting strange results in a prog i'm working on 14:29
14:29 Sgeo joined 15:29 evalable6 left, linkable6 left 15:31 linkable6 joined 15:32 evalable6 joined 16:02 cm left 16:09 cm joined 16:33 dakkar left 16:44 jpn joined 17:21 jpn left 18:00 reportable6 left 18:03 reportable6 joined 18:39 sena_kun left 18:41 sena_kun joined 18:58 jpn joined 19:03 jpn left 19:13 deoac joined 19:16 teatime joined
tbrowder__ .ask ugexe is there a way to download the tgz file of a specifig distro version? 19:36
tellable6 tbrowder__, I'll pass your message to ugexe
19:54 jpn joined 20:11 jpn left 20:44 jpn joined 20:56 jgaz left 21:21 sena_kun left 21:29 Xliff joined
ugexe tbrowder__: I'll probably add something one day. Right now `zef fetch` should probably do that, but right now it also runs the extraction step to make `zef fetch github.com/some/git/repo.git` Do The Right Thing. Unofficially though you can run `zef fetch Some::Module --/tar` and -- assuming Some::Module is a tar file and not a git repo -- it will download the file to a temp location, tell you 21:41
tellable6 2023-04-13T19:36:10Z #raku <tbrowder__> ugexe is there a way to download the tgz file of a specifig distro version?
ugexe that location, and then exit with an error (because it will fail to extract the file)
see gist.github.com/ugexe/18b87f96de8d...0e059701f8 21:43
21:47 jpn left, teatwo joined 21:59 codesections left 22:08 kaskal left 22:11 jpn joined 22:16 jpn left 22:22 kaskal joined 22:26 TieUpYourCamel left 22:35 kaskal left
tbrowder__ ugexe: thnx 22:42
23:00 kaskal joined 23:24 kaskal left 23:26 kaskal joined 23:59 jpn joined