🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). This channel is logged for the purpose of keeping a history about its development | evalbot usage: 'm: say 3;' or /msg camelia m: ... | Log inspection is getting closer to beta. If you're a beginner, you can also check out the #raku-beginner channel!
Set by lizmat on 25 August 2021.
00:02 reportable6 left 00:05 reportable6 joined
[Coke] raku-musings.com/sedol-middle.html - points out that "-123" isn't accepted if you have a MAIN arg declared as Int. 123 does, but not -123 00:59
01:05 linkable6 left, evalable6 left 01:06 linkable6 joined
japhb Confusion with argument parsing? Might work with "-- -123 01:53
"
02:06 linkable6 left 02:08 linkable6 joined 02:30 Xliff_ joined 02:33 Xliff left 02:39 silug left 03:07 Xliff_ left 03:08 Xliff joined 03:28 gordonfish joined 04:16 fpittel joined 04:17 fpittel left 04:37 tejr left, tejr joined 04:38 tejr left 04:42 tejr joined 05:00 bartolin_ left, sftp left, dac left, Ekho left, lucs left, samcv left, ecocode left, bartolin joined, ecocode joined, lucs joined 05:01 samcv joined, sftp joined, dcx joined 05:02 Ekho joined 05:06 evalable6 joined 06:00 abraxxa joined 06:02 reportable6 left 06:06 abraxxa left 06:07 abraxxa joined 06:11 abraxxa left 06:21 abraxxa joined 06:46 Manifest0 joined 07:05 reportable6 joined 07:21 Sgeo left 07:31 abraxxa-home joined 07:52 dakkar joined
sena_kun Xliff, cause I remember github.com/raku-community-modules/...h/pull/130 and was wondering why would you want to. ANd if you're working with postgres, I wonder if DB::Pg is another option to consider. 07:54
07:56 jess left 08:01 m6locks left 08:02 jess joined 08:20 dustinm` left 08:37 dustinm` joined 08:42 solitario left 09:00 solitario joined 09:01 solitario left 09:02 solitario joined, Manifest0 left 09:04 Manifest0 joined 09:23 pony left 09:47 pony joined 10:00 Od1n1 left 10:01 Od1n1 joined 10:21 solitario left 10:28 solitario joined 10:33 abraxxa left, linkable6 left 10:34 linkable6 joined 10:47 Altai-man joined 10:52 abraxxa joined 11:52 evalable6 left, linkable6 left, linkable6 joined 11:53 evalable6 joined 12:02 reportable6 left 12:03 reportable6 joined 12:25 solitario left 12:26 solitario joined 12:28 solitario left, solitario joined 12:32 solitario left, solitario joined 12:35 solitario left, solitario joined 12:45 frost left
tbrowder g'day, mates, a raku ? if you pls 12:51
*plz
CIAvash Shouldn't the new-dispatch release have been delayed until the bugs involving ecosystem modules get fixed? 12:53
lizmat CIAvash: any particular ecosystem module you're referring to ? 12:54
Altai-man CIAvash, what bugs were not fixed, github.com/rakudo/rakudo/issues/4562 ? Jonathan has stated the behaviour of previous releases are buggy as itself, so it is not feasible to for it to be a blocker. 12:55
s/are/is/
tbrowder i have a class i want to instantiate from a hash. for a given key 'foo', i want to set class attribute $!foo to hash key 'foo's value. i naively tried "$!{$key} = $value" but that doesn't work.
Altai-man tbrowder, self.bless(|%hash)? 12:56
tbrowder i know there is a way to do it, but not sure how
Altai-man m: class A { has $.a; has $.b; }; my %h = a => 42, b => 50; A.new(|%h).say;
camelia A.new(a => 42, b => 50)
Altai-man like this?
tbrowder Altai-man: looks good, thanks! i'll go try it out.., 12:57
CIAvash Altai-man: yes, (module involved is Curry), so should I wait for correct behavior to be decided or find a workaround? 12:58
Altai-man CIAvash, if I would be a release manager, I'd make the ticket a blocker and suggested delaying updates, monthly releases are not that far off. Finding a workaround is maybe a good idea, it might also help golfing down the issue. Ah, and golfing down the issue would help _a lot_ in getting a fix faster. 13:00
13:47 erniogi joined 13:48 erniogi left 13:55 aitron joined 13:56 aitron left, aitron joined
[Coke] japhb: -- -123 worked. Sadly doesn't look like Arne allows comments. 13:58
Altreus that seems like one of those problems that could be solved by backtracking in the option parser
14:01 melezhik joined
melezhik weekly: weekly updates of Raku projects on mybfio - mybf.io/?language=Raku 14:02
notable6 melezhik, Noted! (weekly)
14:03 Sgeo joined 14:16 abraxxa-home left 14:26 abraxxa left 14:30 silug joined 14:34 silug left 14:36 silug joined 14:45 abraxxa joined
melezhik does Raku have a dummy operator, that does nothing? 14:55
14:56 jdv left, jdv joined
Altai-man melezhik, for routines? 14:57
RaycatWhoDat ..., right?
melezhik no, for while loop
Altai-man ignore my question
no, ... is a bit different. 14:58
melezhik, can you provide a small example of what you want to do?
lizmat melezhik: while 1 { Nil } ??
melezhik m: 1 while "aaa" ~~ s/a/b/;
camelia WARNINGS for <tmp>:
Useless use of constant integer 1 in sink context (use Nil instead to suppress this warning) (line 1)
Cannot modify an immutable Str (aaa)
in block <unit> at <tmp> line 1
melezhik m: Nil while "aaa" ~~ s/a/b/;
camelia Cannot modify an immutable Str (aaa)
in block <unit> at <tmp> line 1
melezhik m: 1 while "aaa" ~~ s/a/b/;
camelia WARNINGS for <tmp>:
Useless use of constant integer 1 in sink context (use Nil instead to suppress this warning) (line 1)
Cannot modify an immutable Str (aaa)
in block <unit> at <tmp> line 1
melezhik this is an example 14:59
I don't want `Useless use of constant integer 1 in sink context` warnings
lizmat Nil while .... is what I use for those cases
melezhik m: my $a = "aaaa"; Nil while $a ~~ s/a/b/;
camelia ( no output )
lizmat m: my $foo = "aaa"; Nil while $a ~~ s/a/b/; say $foo
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$a' is not declared
at <tmp>:1
------> 3my $foo = "aaa"; Nil while 7⏏5$a ~~ s/a/b/; say $foo
melezhik thanks lizmat
it workas 15:00
works
lizmat m: my $foo = "aaa"; Nil while $foo ~~ s/a/b/; say $foo
camelia bbb
lizmat m: say "aaa".subst(/a/, "b", :global)
camelia bbb
melezhik :g does not work for me 15:01
lizmat m: my $foo = "aaa"; $foo ~~ s:g/a/b/; say $foo
camelia bbb
lizmat or that ^^
melezhik i have more complex regexp pattern, where :g does not do what I want, so I have to do `Nil while $a ~~ s///;` workround
lizmat that feels... weird 15:02
melezhik ok. let me show MY example
give me 5 minutes 15:07
m: my $res = ":home: ::ok:: :foo:bar: :fire: :man:"; Nil while $res ~~ s!( ^^ || \s+ ) ':' (<-[\:]>+) ':' ( $$ || \s+ )!{$0}<span class="icon"><i class="fas fa-{$1}"></i></span>{$2}!; say $res; 15:09
camelia <span class="icon"><i class="fas fa-home"></i></span> ::ok:: :foo:bar: <span class="icon"><i class="fas fa-fire"></i></span> <span class="icon"><i class="fas fa-man"></i></span>
melezhik so this is WORKING solution without `g`
I can't make it work using `~~ s:g` 15:10
the tricky part regexp replacement should only replace `:foo:` but not `::foo::` or `foo::foo` 15:11
Altai-man that's the only possible input you have or do you parse arbitrary messages where anything can be? 15:13
melezhik so basically it should only replace anything between `:` but WHEN there is no none space symbols before first `:` and no none space symbols after the second `:`
Altai-man if yes, then I don't think a regex is necessary at all, just split the string and check properties you want with starts-with / ends-with / substring.
lizmat I was thinking along similar lines :-) 15:14
melezhik yes, but my first thought was to use regexp replacement with global, because this what replacement is designed , I don't want to write extra code for split, etc ...
Altai-man if regex solution starts to become a real pain maybe it's not the right toot at all.
extra code... 15:15
Altreus m: my $res = ":home: ::ok:: :foo:bar: :fire: :man:"; $res ~~ s:g!( ^^ || \s+ ) ':' (<-[\:]>+) ':' ( $$ || \s+ )!{$0}<span class="icon"><i class="fas fa-{$1}"></i></span>{$2}!; say $res; # what DOES it do?
camelia <span class="icon"><i class="fas fa-home"></i></span> ::ok:: :foo:bar: <span class="icon"><i class="fas fa-fire"></i></span> :man:
melezhik I am not sure if this is bug or not by my `s:g` attempts failed, let me show youy
Altreus oh
it doesn't reënter as you'd expect
melezhik ? 15:16
Altreus well it seems like it got most of it right but didn't reapply the regex as you'd have expected when it finished :fire:
does it perhaps consume the space twice?
such that when you use a loop it forgets it consumed it
melezhik Altreus loop code works correctly for me 15:17
Altreus yes
but I think the problem with s:g is that you've asked for a space at the start and end, and there's only one space between :fire: and :man:, so you can't have both
melezhik m: my $res = ":home: ::ok:: :foo:bar: :fire: :man:"; $res ~~ s:g!( ^^ || \s+ ) ':' (<-[\:]>+) ':' ( $$ || \s+ )!{$0}<span class="icon"><i class="fas fa-{$1}"></i></span>{$2}!; say $res; 15:18
camelia <span class="icon"><i class="fas fa-home"></i></span> ::ok:: :foo:bar: <span class="icon"><i class="fas fa-fire"></i></span> :man:
Altreus m: my $res = ":home: ::ok:: :foo:bar: :fire: :man:"; $res ~~ s:g!( ^^ || \s+ ) ':' (<-[\:]>+) ':' <?before ( $$ || \s+ )>!{$0}<span class="icon"><i class="fas fa-{$1}"></i></span>{$2}!; say $res; # what DOES it do? 15:19
camelia 5===SORRY!5=== Error while compiling <tmp>
Unable to parse expression in metachar:sym<( )>; couldn't find final ')' (corresponding starter was at line 1)
at <tmp>:1
------> 3 (<-[\:]>+) ':' <?before ( $$ || \s+ )>7⏏5!{$0}<span class="i…
melezhik so this one does not work as you can see, as it ignore the last `:man:`
but it should not
Altreus m: my $res = ":home: ::ok:: :foo:bar: :fire: :man:"; $res ~~ s:g!( ^^ || \s+ ) ':' (<-[\:]>+) ':' <?( $$ || \s+ )>!{$0}<span class="icon"><i class="fas fa-{$1}"></i></span>{$2}!; say $res; # what DOES it do? 15:20
camelia 5===SORRY!5===
Unrecognized regex metacharacter < (must be quoted to match literally)
at <tmp>:1
------> 3 s:g!( ^^ || \s+ ) ':' (<-[\:]>+) ':' <?7⏏5( $$ || \s+ )>!{$0}<span class="icon"><
Couldn't find terminator !
at <tmp>:1
-…
melezhik m: my $res = ":home: :fire: :man:"; $res ~~ s:g!( ^^ || \s+ ) ':' (<-[\:]>+) ':' ( $$ || \s+ )!{$0}<span class="icon"><i class="fas fa-{$1}"></i></span>{$2}!; say $res;
camelia <span class="icon"><i class="fas fa-home"></i></span> :fire: <span class="icon"><i class="fas fa-man"></i></span>
melezhik here is another example of incorrect work, where `:fire` in the middle gets ignored
Altreus m: my $res = ":home: ::ok:: :foo:bar: :fire: :man:"; $res ~~ s:g!( ^^ || \s+ ) ':' (<-[\:]>+) ':' <? $$ || \s+ >!{$0}<span class="icon"><i class="fas fa-{$1}"></i></span>{$2}!; say $res; # what DOES it do?
camelia 5===SORRY!5===
Unrecognized regex metacharacter < (must be quoted to match literally)
at <tmp>:1
------> 3 s:g!( ^^ || \s+ ) ':' (<-[\:]>+) ':' <?7⏏5 $$ || \s+ >!{$0}<span class="icon"><i
Couldn't find terminator !
at <tmp>:1
-…
melezhik so I ended up with `Nil while $res ~~ s///` alternative, at least it works 15:21
m: my $res = ":home: :fire: :man:"; Nil while $res ~~ s!( ^^ || \s+ ) ':' (<-[\:]>+) ':' ( $$ || \s+ )!{$0}<span class="icon"><i class="fas fa-{$1}"></i></span>{$2}!; say $res;
camelia <span class="icon"><i class="fas fa-home"></i></span> <span class="icon"><i class="fas fa-fire"></i></span> <span class="icon"><i class="fas fa-man"></i></span>
Altreus I do not understand why it has a problem with my <
melezhik so like I said, _maybe_ rakudo regexp bug?
Altreus noooooo I'm pretty sure the problem is that it consumes the space and continues looking *after* the space 15:22
and you've asked for it to have a space or ^^, which now there is not
e.g.
m: my $res = ":home: :fire: :man:"; $res ~~ s:g!( ^^ || \s+ ) ':' (<-[\:]>+) ':' ( $$ || \s+ )!{$0} (({$1})) (({$2}))! 15:23
camelia ( no output )
Altreus oops
m: my $res = ":home: :fire: :man:"; $res ~~ s:g!( ^^ || \s+ ) ':' (<-[\:]>+) ':' ( $$ || \s+ )!{$0} (({$1})) (({$2}))!l; say $res;
camelia 5===SORRY!5=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> 3' ( $$ || \s+ )!{$0} (({$1})) (({$2}))!7⏏5l; say $res;
expecting any of:
infix
infix stopper
statement end
Altreus m: my $res = ":home: :fire: :man:"; $res ~~ s:g!( ^^ || \s+ ) ':' (<-[\:]>+) ':' ( $$ || \s+ )!{$0} (({$1})) (({$2}))!; say $res;
camelia ((home)) (( )):fire: ((man)) (())
Altreus hmm! 15:24
I guess not!
melezhik I also tried to use word boundaries `<<` `>>` but for some reasons this did not work either
yes, it's possible to golf to more concise example
afk & 15:26
Altreus m: my $res = ":home: ::ok:: :foo:bar: :fire: :man:"; s:g/ <?after \s || ^^> ':' (<-[^\:]>+) ':' <?before \s || $$> /[[$0]]/; say $res; 15:35
camelia Use of uninitialized value of type Any in string context.
Methods .^name, .raku, .gist, or .say can be used to stringify it to something meaningful.
:home: ::ok:: :foo:bar: :fire: :man:
in block <unit> at <tmp> line 1
Altreus m: my $res = ":home: ::ok:: :foo:bar: :fire: :man:"; $res ~~ s:g/ <?after \s || ^^> ':' (<-[^\:]>+) ':' <?before \s || $$> /[[$0]]/; say $res;
camelia [[home]] ::ok:: :foo:bar: [[fire]] [[man]]
Altreus melezhik: This seems to work :)
replace [[ ]] with span etc 15:36
Altai-man Xliff, ping? 15:40
.tell Xliff wrt your question about local modules in Comma. I didn't think about it yesterday, but jnthn has suggested to just add the other modules you have locally as "modules" of the project and now I don't see why wouldn't it work as you want. 15:42
tellable6 Altai-man, I'll pass your message to Xliff
Xliff Altai-man: How is this done? 15:44
15:44 aitron left
Altai-man Xliff, File -> Project Structure -> Modules -> Import Module. 15:45
Xliff Thank you.
Altai-man and if it doesn't work, at least you will have some steps to reproduce like "Download the distribution locally from X, then create a dummy project and try to add it as a module". 15:46
15:50 aitron joined 15:56 aitron left, aitron joined 16:00 aitron left 16:04 abraxxa left
melezhik Altreus I was also thinking about look ahead / look behind constructions for this , I just did not know the Raku syntax for them 16:30
I guess it's more or less most logical way to solve this, however the question why this does not work without loop and look behind/ahead ? 16:31
is not it a bug?
16:33 dakkar left
Altreus no I still think you're consuming too much but I'm struggling to prove it 16:36
by using look-around the match becomes zero-width and can therefore match both before pos() and after it, basically 16:37
oh!
m: my $res = ":home: :fire: :man:"; $res ~~ s:g!( ^^ || \s ) ':' (<-[\:]>+) ':' ( $$ || \s )!{$0} (({$1})) (({$2}))!; say $res;
camelia ((home)) (( )) ((fire)) (( )) ((man)) (())
Altreus m: my $res = ":home: :fire: :man:"; $res ~~ s:g!( ^^ || \s ) ':' (<-[\:]>+) ':' ( $$ || \s )!{$0} (({$1})) (({$2}))!; say $res;
camelia ((home)) (( )):fire: ((man)) (()) 16:38
Altreus melezhik: you were consuming *all* the whitespace
so the first match consumed ':home: '
And then :g needed ' :fire: ' for the next match, but in fact it was only ':fire: '
I tried to prove it with more spaces but it just consumed those too :D 16:39
16:43 lichtkind joined
melezhik Altreus++ 17:23
17:45 Altai-man left
lizmat and yet another Rakudo Weekly News hits the Net: rakudoweekly.blog/2021/10/25/2021-43-thank-you/ 17:49
codesections lizmat++ I think the 17:53
Vue + Raku link points to the previous video
lizmat meh 17:55
indeed
should be fixed now # codesections++ 17:56
18:02 reportable6 left
[Coke] thank you lizmat! 18:13
melezhik lizmat++ 18:15
19:02 linkable6 left, evalable6 left 19:04 linkable6 joined 19:05 reportable6 joined
Ulti just tried the latest release and my bioinformatics tests are 2x as fast compared with December 2020 19:54
El_Che nice
Ulti 20850 deopt before down to 142... I'd say that's a significant improvement! 19:55
50% jitted frames to 85% 19:56
MasterDuke nice 19:57
20:03 evalable6 joined
Ulti prime benchmark has gotten a little bit slower gist.github.com/MattOates/c5879a07b1ef2c013097 but only a tiny bit 20:06
[Coke] laments not having enough cycles to work on a .NET backend yet. 20:19
(though at least I do have some admin stuff written in Raku that is making my job much easier) 20:22
20:40 kylese joined 21:00 linkable6 left 21:01 linkable6 joined 21:02 linkable6 left, linkable6 joined 21:19 kylese left
japhb Ulti: Aside from arguably the last two tests (primes-naive-grep and primes-naive-parallel-grep), the runtimes for the various prime benchmarks are now all too short to be stable in the face of basic OS scheduling. 21:36
21:40 wayland_ joined
wayland_ Hi all! Is there a way to tell if there's more data waiting on an IO::Socket::INET without blocking? 21:40
japhb wayland_: Well, you could pull the native-descriptor and use it with select() or so. Or maybe use IO::Socket::Async instead (docs.raku.org/type/IO::Socket::Async) if what you really want is an async API? I guess the real question is -- why do you want to do this? 21:44
21:45 vasko left 22:00 euandreh left, wayland_ left 22:08 vasko joined 22:14 lichtkind left 22:21 pony left 22:24 pony joined 22:27 melezhik left 22:28 euandreh joined 22:31 jess left 22:48 Xliff left, Xliff joined 22:49 djerius left 22:50 djerius joined 22:53 Xliff_ joined 22:55 Xliff left 23:06 euandreh left 23:29 euandreh joined