This channel is intended for people just starting with the Raku Programming Language (raku.org). Logs are available at irclogs.raku.org/raku-beginner/live.html
Set by lizmat on 8 June 2022.
00:18 rf joined 00:48 Manifest0 left
rf Is there a good example anywhere of adding attributes to a class via meta programming? 01:03
lucs (Might as well ask this here, I feel like a beginner not knowing how to do this.) : sub foo ($a, $b) { $a + $b } my @c = [1, 2]; say foo(@c); # What should that 「@c」 be (expecting "3␤" as output)? 01:04
rf try |@c 01:07
foo(|@c);
could also do sub foo(($a, $b)) ... notice the double parens
But that will change signature of foo to take a positional
lucs The prefix "|". sigh I knew that, but I forgot. 01:10
My memory is not improving with age, wouldn't you know. 01:11
rf Lol, it's called the slip operator it's fairly useful :D 01:12
lucs Well, thanks 🙂 01:14
02:07 rf left 02:10 rf joined 03:06 rf_ joined 03:15 rf left, saint- left 03:27 saint- joined 05:29 Heptite left
el gatito (** advocate) m: sub fibonacci($n) { state @fib = 0, 1, ->($i, $j) { $i + $j } ... Inf; @fib[$n] } say fibonacci(10); 08:27
Raku eval Exit code: 1 Cannot unpack or Capture `1`. To create a Capture, add parentheses: \(...) If unpacking in a signature, perhaps you needlessly used parentheses? -> ($x) {} vs. -> $x {} or missed `:` in signature unpacking? -> &c:(Int) {} in sub fibonacci at main.raku line 2 in block <unit> at main.raku line 6
el gatito (** advocate) m: sub fibonacci($n) { state @fib = (0, 1, ->($i, $j) { $i + $j } ... Inf); @fib[$n] } say fibonacci(10); 08:28
Raku eval Exit code: 1 Cannot unpack or Capture `1`. To create a Capture, add parentheses: \(...) If unpacking in a signature, perhaps you needlessly used parentheses? -> ($x) {} vs. -> $x {} or missed `:` in signature unpacking? -> &c:(Int) {} in sub fibonacci at main.raku line 2 in block <unit> at main.raku line 6
el gatito (** advocate) m: sub fibonacci($n) { state @fib = (0, 1, -> $i, $j { $i + $j } ... Inf); @fib[$n] } say fibonacci(10);
Raku eval 55
el gatito (** advocate) why are parens not allowed hmm 08:29
Nemokosch Because they imply a subsignature I guess 08:31
el gatito (** advocate) in this case they shouldn't bcs there is no space 08:32
Nemokosch Well I'm surprised it even compiled 08:34
By the way, maybe you know now who jnthn is 😛
el gatito (** advocate) who? 08:35
Nemokosch Well you complained that nobody responds to your issue on github 08:36
el gatito (** advocate) oh i checked 08:37
oh he gave a response to that 08:39
basically my ($first, $second) := (1, 2); becomes my ($first, $second); :($first, $second) := (1, 2); 08:45
08:55 Manifest0 joined
still its surprising that lists cannot be used as destructuring patterns 09:01
09:07 dakkar joined
Nemokosch Lists aren't very well suited for describing a shape of something in Raku 09:08
One reason for that is that the parens don't tell anything about the shape, they just indicate evaluation order 09:09
So writing ((1, 2)) is like writing ((1 + 2)) 09:10
It looks funky but the extra pair of parens will never do anything
09:25 human-blip joined
el gatito (** advocate) ((1, 2),) 09:57
11:37 CIAvash left 11:41 CIAvash joined 12:14 CIAvash left 12:37 rf_ left, rf joined 12:48 CIAvash joined 13:29 Heptite joined 15:16 human-blip left, human-blip joined 16:22 zashi joined
zashi Hi. How can I include/use/require another raku file that is just sitting besides my current running raku script in the same folder? I've managed to build a module but this is not what I want.. 16:27
Skarsnik raku -I . myscrip.raku ? 16:43
17:30 NemokoschKiwi joined 17:43 dakkar left 18:10 saint- left 18:12 Guest244 joined 18:15 ab5tract left 18:16 NemokoschKiwi left 18:18 Guest244 left
rf Zashi, you can use raku -I. myscript.raku or look into using Mi6 18:32
Nemokosch a .raku file is meant to be run, a .rakumod file is meant to be imported 18:34
you can tweak it but it will be a tweak at best if you don't follow this principle
p6steve or you can put this in your script: 18:35
use lib '.'; use MyModuleName; and in the module unit module MyModuleName; 18:37
19:59 Guest5607 joined
zashi use lib "{$*PROGRAM.parent}"; 20:03
use MyModuleName;
this works ^^ I don't even need unit module MyModuleName.... and it imports everything exported in that file in the current namespace
previous answer on another channel was 20:05
require "./MyModule.rakumod" <&hello>;
but it has the serious disadvantage that I have to specifically name what I want to import, and it's a block import so I have to call by &hello()
thanks!!!
Guest5607 Is there a way to check if an inputted value is an Int? 20:08
Nahita you can attempt to coerce to Int and see if it fails maybe 20:17
$inp.Int ?? "looks like integer" !! "no"
there's a regex way too like / ^^ '-'? \d+ $$ / but .Int is better i guess 20:18
Nemokosch depends on the way to obtain the input as well - prompt attempts to create allomorphs, so if somebody enters a number, that would be received as an IntStr 20:20
(which I absolutely hate but that's beside the point)
in that case, you could really just check if the value descends from Int, with a smartmatch 20:21
zashi so maybe a stupid question, but ... so rakudo is the compiler of raku which compiles to backend, right? Is there any way to get info at runtime/compile time which backend rakudo is using? 20:36
I suspect it's moarvm since when I install rakudo I can see it also installs other packages including moarvm 20:40
20:43 Simerax joined
Simerax anyone around who could maybe help me with clearing up some confusion i have about `react`? 20:43
Nemokosch zashi: simplest case, rakudo -v will tell you 20:44
but there is also 20:46
m: $*RAKU.compiler.backend.say
Raku eval moar
Nemokosch Simerax: react is a complex thing - but in the nature of "don't ask to ask", you're never gonna get help unless you actually say what you need help with 😉 20:47
I definitely can't promise that I will know the answer - but someone will, and that someone might be around 20:48
zashi: one more thing. MoarVM is, one could say, the main implementation. The one that was designed with this language in mind, written in C. 20:50
the "JVM" backend is a bit misleading because for all intents and purposes the runtime isn't the JVM - it's a runtime running on JVM 20:51
Simerax well im a little confused on how it works exactly. im familiar with go and it's "select" statement so i thought about react being kind of similar but i don't quite understand under which conditions it blocks and when not. for example here in this code: pastebin.com/n8cXq9Bz react does receive 1 message on each channel but then continues
execution after the react statement even though the blocks inside say "whenever"
Nemokosch so saying "the backend is JVM" is a bit like saying "the backend is C" or "the backend is native", in the case of MoarVM
Simerax so i thought "react whenever" is kind of like go's for { select {} } 20:52
i expected it to block forever (and deadlock in this case)  and keep reading messages forever 20:54
Nemokosch I don't know go's for { select {} } (and fwiw my monthly dose of go language I can take is over, lol)
Simerax well i just thought it might clear up where my mind is coming from :P 20:55
Nemokosch well indeed it might, for somebody who knows Go 🙂 20:56
one thing I surely know is that react is started immediately, wherever it is, unlike supply 20:57
Simerax the basic question (in my example pastebin) is if i don't call send on $c1 and $c2 react blocks forever (which i think is correct) but then it stops blocking as soon as it received 1 message per "whenever" case. my expectation was "whenever" would block for (possibly) multiple messages 20:58
how could i achieve it to keep blocking/waiting for more messages on a channel?
i know in my example it would deadlock then
21:00 NemokoschKiwi joined 21:01 NemokoschKiwi left
Nemokosch I get your point, tbh I barely ever used these async structures 21:03
Simerax okay no worries :) 21:04
Nemokosch there is this monstrous description on the doc site: docs.raku.org/language/concurrency 21:05
Simerax im currently going through that :) 21:07
21:15 systems joined
Simerax okay i fixed it my logic flaw was that i wrote "whenever $c1.receive" instead of "whenever $c1" now it does what i expected :) 21:16
Nemokosch oops gotcha 21:21
lol
zashi Nemokosch: 21:39
thank you!
also "it's a runtime running on JVM".. well, it still runs on JVM with extra stuff in between which I guess is required unless you really really wanna make the compiler either too locked in on the JVM or very complicated...
Welcome to Rakudo™ v2022.07.
Implementing the Raku® Programming Language v6.d.
Built on MoarVM version 2022.07.
Nemokosch:
thank you!
also "it's a runtime running on JVM".. well, it still runs on JVM with extra stuff in between which I guess is required unless you really really wanna make the compiler either too locked in on the JVM or very complicated...
- / # raku -v
Welcome to Rakudo™ v2022.07.
Implementing the Raku® Programming Language v6.d.
Built on MoarVM version 2022.07.
21:40 Guest5607 left
Simerax where can i read the source code of the standard library? for example if i want to look at the implementation of IO::Socket::INET 22:57
elcaro github.com/rakudo/rakudo/tree/main/src 22:59
Most will be under `core.c`
Simerax thanks! 23:00
elcaro things added/modified under .d or .e will be under `core.d` or `core.e`
23:00 zashi left
elcaro be warned tho that a lot of the stdlib is written in NQP 23:01
Simerax what do you mean by "modified under .d or .e"? what is .d or .e? im very new to raku
elcaro Ahh, they are major versions 23:02
Simerax ah okay :D
elcaro so .c was the first major release. .d is the current one. .e will be the next
You are likely using .d, which users the stdlib defined under core.c, as well as any modification under core.d 23:03
Simerax ah okay interesting! well i just want to understand a little how the IO::Socket role works and you can't really find that out without seeing its source
Nemokosch Simerax: if you have a particular call in mind, I like CoreHackers::Sourcery; it doesn't always work well on roles directly, though (because method lookup is a bit different) 23:10
Simerax ill have a look at it! 23:12
23:28 Simerax left 23:55 systems left