This channel is intended for people just starting with the Raku Programming Language ( Logs are available at
Set by lizmat on 8 June 2022.
gfldex m:``` 00:15
enum proc-options <one two three four>;
my @opt = qw<one two three four>;
for @opt -> $opt {
when proc-options::{$opt}:!exists {
warn "'$opt' is not a valid option";
say $opt;
m:``` 00:21
enum proc-options <one two three four>;
my @opt = qw<one two three four five>;
for @opt -> $opt {
?? say $opt
!! warn("'$opt' is not a valid option");
I didn't know that I can test for existence of symbols like that. 00:22
m:``` 00:27
say ::.EXISTS-KEY('one');
say ::.WHAT;
say ::.^methods(:local);
01:33 jaguart left 04:29 razetime joined 06:14 razetime left 06:27 jaguart joined
jaguart an App::Mi6 question - says to tweak using dist.ini - where would I look for this file - is it really ``~/.zef/store/App-Mi6-2.0.6/DC88AB1B036FB0C7945474C27E84C7235C82C45D/dist.ini`` 08:06
Hmmm - I am guessing this is ``dist.ini`` in module's root - so mi6 probably won't initialise a new module with dist.ini options... because that would break causality 08:09
08:19 Guest15 joined, Guest15 left
lizmat it refers to the dist.ini in the module's root 09:42
jaguart lizmat++ thanks :) 11:38
looking for recommends on how to introspect the Match result from Grammar.parse 11:57
lizmat programmatically, or visually ? 12:12
13:29 frost left 14:13 jaguart left
Anton Antonov Is it possible to use `deepmap` (or similar function) up to certain level? Say, for a given nested list or hash, it seems `deepmap` applies its argument to the very bottom elements. 15:17
18:07 jaguart joined
jaguart both - visually to understand what's happening and programatically to use the things found... :) 18:08
interesting that multi-line comment using #`<> does not work as well as #`() 18:09
m: #`< for @l -> $l { $l.say; } > 18:12
camelia ===SORRY!=== Error while compiling <tmp>
Variable '$l' is not declared. Perhaps you forgot a 'sub' if this was
intended to be part of a signature?
at <tmp>:1
------> #`< for @l -> ⏏$l { $l.say; } >
jaguart m: #`( for @l -> $l { $l.say; } ) 18:13
camelia ( no output )
jaguart the for -> seems to be interpreted as end-of-comment
Quibono Maybe a silly question, but how friendly is the raku community? 18:24
lizmat Quibono: that's not a silly question at all 18:25
we value kindness 18:26
but then I'm prejudiced :-)
Quibono How are you prejudiced lizmat? 18:30
Nahita jaguart: isn't ">" in "->" ending the comment, matching "<"? 18:32
lizmat Quibono well, being a Raku Steering Council member sorta implies that :-) 18:34
Quibono Haha gotcha. I'm just kinda burned on unfriendly communities.
lizmat yeah, so am I, so that's why I'm sticking to the Raku community, and try very hard to keep it a friendly place 18:36
Camelia, our butterfly mascot, is an effective filter against people with the biggest egos 18:37
gfldex I believe it helps that one can't tell what The One True Way is. 18:39
Quibono Because raku is multiparadigm? 18:40
lizmat that's one reason, I guess :-)
but even within a single paradigm, there are several ways 18:41
m: .say for (^10).grep: * %% 2
camelia 0
lizmat m: .say for (^10).map: $_ if * %% 2
camelia ===SORRY!=== Error while compiling <tmp>
Missing semicolon
at <tmp>:1
------> .say for (^10).map: $_ ⏏if * %% 2
lizmat m: .say for (^10).map: { $_ if $_ %% 2 } 18:42
camelia 0
lizmat :-)
Quibono How does the raku community feel about fixed point decimals/ratio types?
lizmat I'd say the community likes the accuracy of Rats in general 18:43
and that fixed point decimals are another way of keeping accuracy, which is currently not supported by Raku
but could be provided in module space if necessary
Quibono So raku has support for rational numbers out the box? 18:44
lizmat yup
Quibono Yaay. Um does the optional static typing impact interpreter perf at all? 18:45
lizmat m: say (4.2).WHAT
camelia (Rat)
lizmat well, you know, under the hood, there's *always* type checking, so generally, any additional type constraints won't affect performance 18:46
of course, if you're going to use constraints like:
m: subset Prime of Int where *.is-prime; sub foo(Prime $a) { say $a }; a(43); a (42) 18:47
camelia ===SORRY!=== Error while compiling <tmp>
Undeclared routine:
a used at line 1
lizmat m: subset Prime of Int where *.is-prime; sub foo(Prime $a) { say $a }; foo(43); foo(42) 18:48
camelia 43
Constraint type check failed in binding to parameter '$a'; expected Prime but got Int (42)
in sub foo at <tmp> line 1
in block <unit> at <tmp> line 1
lizmat it is going to have to do a primality check for each check, so that *could* become costly
Quibono Right. Hrm okay so if I want to write a language in raku probably AOT compiling my language to a subset of raku would be the fastest from a run time perspective, or? 18:51
lizmat well, good question 18:53
I'd say, first make it work, then look at where the bottlenecks are, and the make a plan to make things faster 18:54
Quibono What sort of profiling/benchmarking facilities does raku have? 18:55
lizmat there's --profile which will create a HTML file with profiling info 18:57
there's also an IDE called Comma
which has a lot of profiling / async timeline options 18:58
Quibono Noice. And where would be a good channel to get feedback on ideas for stuff I want to write in/using raku? 18:59
lizmat well, #raku I guess :-) 19:00
or here :-) 19:01
Quibono Thanks
lizmat you're welcom! 19:02
*welcome :-)
Quibono Thanks. 🙂 19:03
—profile seems like a dream. 19:05
I love that it’s embedded in html
And I could use grammars to build a parser it seems 19:36
lizmat yup, that's how the Raku compiler is built :-) 19:41
20:36 jaguart left