🦋 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:04 reportable6 joined 01:04 evalable6 left, linkable6 left 01:07 evalable6 joined 01:29 frost joined 02:29 greppable6 left, releasable6 left, committable6 left, statisfiable6 left, nativecallable6 left, benchable6 left, bisectable6 left, squashable6 left, tellable6 left, quotable6 left, unicodable6 left, sourceable6 left, bloatable6 left, evalable6 left, shareable6 left, reportable6 left, coverable6 left, notable6 left 02:30 committable6 joined, sourceable6 joined 02:31 coverable6 joined, shareable6 joined, bisectable6 joined 02:32 quotable6 joined, Eddward joined 03:29 unicodable6 joined 03:30 squashable6 joined, notable6 joined 03:31 tellable6 joined, releasable6 joined, greppable6 joined 03:56 Eddward left 04:00 squashable6 left, squashable6 joined 04:15 squashable6 left 04:18 squashable6 joined 04:29 evalable6 joined 04:30 nativecallable6 joined 05:07 linkable6 joined 05:29 statisfiable6 joined 05:30 bloatable6 joined 05:48 broquaint left, renormalist left, tonyo left, esh left, moritz_ left, moritz joined, renormalist joined, esh joined, broquaint joined 05:49 tonyo joined 05:54 mtj left, patterner_ left, nebuchadnezzar left, juanfra__ left, phogg left, polettix left, wanko left, ingy left, Juerd left, gugod left, wanko joined, nebuchadnezzar joined, patterner_ joined, polettix joined 05:55 mtj joined, Juerd joined 05:56 gugod joined, phogg joined 05:57 ingy joined 06:00 djerius left 06:02 djerius joined, reportable6 joined, Sgeo left 06:14 abraxxa joined 06:22 abraxxa left 06:23 abraxxa joined 06:24 jjido joined 06:29 benchable6 joined 07:22 jjido left 08:11 dakkar joined 08:48 patrickb joined 08:50 Xliff left 09:26 squashable6 left 09:30 squashable6 joined 09:59 lizmat_ joined 10:03 lizmat left 10:08 Xliff joined, lizmat_ left 10:09 lizmat joined
Xliff Good mornign, #perl6 10:17
One of these days...
Nemokosch do these s// notations actually do something on the IRC? 10:19
or is it just a kind of inside joke
Xliff Inside joke 10:20
Although if you preceed anything with "m:", what follows is taken as evalable code by camelia and she'll try and run it.
Nemokosch It started being suspicious that there is some kind of bot there as well 😄
oh okay, that I can see 10:21
Xliff m: say "Hi there!" ~~ m:g/[er]/
camelia (「er」)
10:28 immediate joined
immediate hi, out of curiosity :d Is there any way to detect if a passed array is actually an attribute of an instance object? 10:31
*passed to a function 10:32
moritz no, the array knows nothing about where it's referenced 10:34
lizmat well, actually, you can with introspection:
m: class A { has @.a }; sub b(\a) { dd a.VAR.name }; b A.new(a => (1,2,3)).a
camelia "\@!a"
moritz my experience with introspecting container names is that's not as reliable as you'd want it to be 10:35
lizmat true
in any case, that property is being used by "dd"
m: class A { has @.a }; dd A.new(a => (1,2,3)).a 10:36
camelia Array @!a = [1, 2, 3]
Xliff lizmat: Have you played with RakuAST long enough to know which nodes are used in the creation of something like this: "sub a ( &b (Int, Str --> Num) ) { }"
lizmat Xliff: it's been many months since I've done anything with rakuAST, so I wouldn't know offhand
I suggest checking the tests, they all have the intended Raku equivalent source code in comments and/or tests 10:37
immediate: you're probably better of mixing in a role into whatever values you want to be able to detect 10:39
m: class A { has @.a = 1,2,3; method TWEAK() { @!a does role { method foo() { } } } }; sub b(\a) { say "{a} is a foo" if a.can("foo") }; b (1,2,3); b A.new.a 10:43
camelia 1 2 3 is a foo
lizmat m: class A { has @.a = 1,2,3; method TWEAK() { @!a does role { method foo() { } } } }; sub b(\a) { say "{a} is a foo" if a.can("foo") }; b (4,5,6); b A.new.a # clearer
camelia 1 2 3 is a foo
immediate lizmat: thank you very much! 10:45
Xliff lizmat: Looked. Doesn't seem to be there 10:47
I'll try and catch jnthn.
10:53 Altai-man joined 10:59 frost left 11:02 patrickb left 11:14 immediate left 11:18 frost joined
Anton Antonov What would be the most elegant way to rename the keys in a hash? For example, I have a hash `h0` and a hash `kk` with key-to-new-key mapping. I found the Perl5 module `Hash::Rename` something like that and it was not that hard to re-program it in Raku, (metacpan.org/pod/Hash::Rename). But I would rather use Raku "direct" code. 11:32
lizmat %newhash = %hash.map: { %mapper{.key} => .value } 11:33
you could even .race that if the hash is very big 11:34
11:35 squashable6 left
Anton Antonov @lizmat Great, thanks! 11:35
lizmat this of course assumes no clashes and no keys added while mapping 11:38
Anton Antonov @lizmat During the weekend I read the code of your packages `Hash::int` and `Hash::Agnostic`. Is it a good idea to have a package `Hash::str`? And if yes, should `Hash::str` it based on `Hash::int` or `Hash::Agnostic`?
lizmat probably neither 11:41
Anton Antonov @lizmat Haha, ok! 11:47
lizmat just give me a mo, it's basically just a cat license of Hash::int
Anton Antonov Sounds great! 11:48
lizmat well... the speedup for the native str Hash would only be a few % 11:50
Anton Antonov @liszmat Any speed-up is welcome! 11:51
lizmat nah, just benchmarking it a bit now, it is within noise 11:52
11:52 squashable6 joined
Anton Antonov Do you think that is across all platforms / OS? 11:53
I think it might instructive to see the code anyway...
@lizmat FYI, my motivation for asking for `Hash::str` is to speed-up building of tries-with-frequencies. (Which is a favorite Machine Learning method/approach of mine.) My initial Raku implementation was 100 slower than my Java implementation and 5 times slower than my Mathematica implementation. I was able to reduces those factors by half (40 and 2.2 respectively) but that is still slow. 11:55
12:02 reportable6 left
lizmat Anton Antonov: Hash::str should be available now after a "zef update" 12:04
12:05 reportable6 joined
Anton Antonov Great! Thank you! 12:05
@lizmat And, yes, I found the code here: github.com/lizmat/Hash-str . 12:08
@lizmat And, yes, I found the code here: github.com/lizmat/Hash-str . 12:14
Geth raku-mode: 4ee9045eeb | Altai-man++ (committed using GitHub Web editor) | raku-mode.el
Bump version to have an update without pkg-info

  @phikal++ for the suggestion.
Altreus Having discarded the traditional regex grammar, I don't suppose Raku went a step further and discarded the traditional datetime formatting codes as well? 12:30
I marvel at the use of many of these, and the logic behind many others 12:31
%t - a tab character ... as if we can't put a tab character in a string already 12:33
lizmat printf compatibility was rated high
Altreus strftime not printf 12:34
lizmat meanwhile, I think the rakuAST approach of printf shows how we can easily make something better and be performant (because it will generate code, rather than interpret stuff each time)
Altreus printf generally has useful codes
lizmat I don't think we have strftime support in Raku ?
Altreus oh, then I approve
ah it has a formatter object 12:35
I do wish someone would formally name Y-m-dTH:M:S±z so we can create meaningful method names 12:36
lizmat m: sub Y-m-dTH:M:S±z { } 12:38
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing block
at <tmp>:1
------> 3sub Y-m-dTH:M:S7⏏5±z { }
expecting any of:
new name to be defined
lizmat m: sub Y-m-dTH:M:S { }
camelia ( no output )
lizmat too bad about the ± :-) 12:39
Altreus hey wait, you can put a colon in identifiers?
Wouldn't it be seen as an adjective?
lizmat m: sub Y-m-dTH:M:S { dd }; Y-m-dTH:M:S 12:40
camelia sub Y-m-dTH:M:S()
Altreus m: class Y-m-dTH:M:S {}
camelia 5===SORRY!5=== Error while compiling <tmp>
Cannot use adverb S on a type name (only 'ver', 'auth' and 'api' are understood)
at <tmp>:1
------> 3class Y-m-dTH:M:S7⏏5 {}
expecting any of:
generic role
lizmat I don't recall the exact semantics of that, but yes, you can
Altreus ah
that's where it's an adverb
class identifiers have different rules :) 12:41
lizmat yup
Altai-man m: class YouCan't {}; say YouCan't.new;
camelia YouCan't.new
lizmat I think they're considered adverby on other identifiers as well
raku.land/zef:lizmat/Acme::Don't :-) 12:43
Altreus oh good, Raku was feeling boring without acme 12:44
lizmat raku.land/?q=Acme
Altreus +1 for don't x unless y 12:45
that's English! 12:46
12:47 Eddward joined
Altreus I have been informed the datetime format I want is in rfc3339 12:59
Anton Antonov @lizmat Your example here github.com/lizmat/Hash-int uses `Hash::str` (not `Hash::int`.)
lizmat Antonov: yeah a snafu, I guess I should make an update 13:00
Altreus a thinko 13:02
Anton Antonov @lizmat Your example here github.com/lizmat/Hash-int uses `Hash::str` (not `Hash::int`.)
Altreus discord bot may be duplicating messags 13:03
lizmat Antonov: should be fixed now
13:07 jmcgnh left
Anton Antonov @lizmat Ok, thanks! 13:13
13:15 frost left 13:20 Altai-man left 13:21 Altai-man joined, jmcgnh joined 13:26 immediate joined 13:28 Altai-man left 13:30 Altai-man joined
@lizmat I programmed a benchmark for `Hash::str` and `Hash::int` -- both are 40-50% faster on my MacBookPro. 13:53
@lizmat It looks like though I cannot use `push` on those structures. Is it something that has to be implemented? I.e. should I open issues on the corresponding GitHub repositories? 13:54
codesections I found this surprising. Any thoughts on whether it's a bug: 14:01
m: class C {...}; say C.foo; say C.bar; my class C { my $n = 42; method foo { $n }; method bar { 42 }}
camelia (Any)
codesections Specifically, the "this" I'm referring to is that local variables in a class are declared but not assigned in the time between a forward declaration of the class and the actual declaration 14:02
14:17 Sgeo joined 14:25 justsomeguy joined 14:32 justsomeguy left 14:41 justsomeguy joined
lizmat Antonov: please open issues :-) 15:14
15:15 justsomeguy left
raydiak codesections: I don't have time to check docs for an explanation, but I for one do find that surprising 15:36
autopunned roles don't seem to suffer from it, interestingly: 15:37
m: role C { ... }; C.m; role C { my $foo = 42; method m { say $foo } }
camelia 42
codesections raydiak, thanks. If no one chimes up with a reason it's _not_ a bug, I'll open an issue later today 15:47
raydiak if you wanted to check the docs yourself, I'd be searching for something about class composition time and compile vs run time, I strongly suspect it's something to do with those things 15:54
codesections++ good at shaking out the bugs 15:55
afk &
16:12 Altai-man left 16:26 tejr left, tejr joined 16:35 dakkar left
[Coke] www.reddit.com/r/rakulang/comments...ntime_for/ looks nifty. Wonder if there's enough other stuff to make the online attendance package worth it. 16:52
17:35 evalable6 left, linkable6 left 17:37 linkable6 joined
codesections That does look really interesting. It looks like at least many of the talk recordings from the 2020 conference were posted online (2020.splashcon.org/). I hope the same is true this year 17:53
[Coke] (y) 17:57
18:03 reportable6 left 18:05 reportable6 joined 18:18 peder left
lizmat and yet another Rakudo Weekly News hits the Net: rakudoweekly.blog/2021/09/27/2021-...ming-haku/ 18:44
18:44 peder joined 19:44 linkable6 left 19:57 vasko left 20:04 vasko joined
raydiak thank you lizmat++. if I may offer a correction, in "Jonathan Worthington saw a relative easy way to optimize subroutine calls" "relative" should be "relatively" 20:31
20:35 evalable6 joined
[Coke] wonder how much faster 'zef install HTML::Canvas --deps-only' would be on an M1 mac instead of this ancient beast. 20:37
ugexe dont forget it could be slower depending on how much JIT affects it 20:43
although when skipping tests everything was a bit faster in zef (presumably due to the extra cores of the m1 vs the previous gen intel i7 macbook) 20:44
tonyo [Coke]: 23s on my m1
it also failed
ld doesn't have an arm for libfreetype
arm arch 20:45
20:50 jjido joined, immediate left
[Coke] 'zef look' doesn't respect my path. if I change my PATH, then do a 'zef look', I get my default raku, not the one first in my PATH. 20:56
tonyo zef isn't a shell 20:57
[Coke] zef launches a shell. I'm saying the env vars aren't being passed in to the invoked shell 21:05
sorry, "zef look" launches a shell. 21:06
jdv why does zef look launch a shell? weird. i didn't know about that. 21:24
ugexe cause thats what `panda look ...` did heh 21:27
and i imagine panda did that because cpanm does that 21:33
jdv oh
[Coke] ugexe: does it make sense to try to preserve existing shell env vars or should I not expect that? I no longer need it, but will open a ticket if you like 21:37
lizmat raydiak++ # fixed 21:43
ugexe [Coke]: i'm not sure how that wouldnt already be happening if raku sees it fine since shell passes along %*ENV and the zef look logic is essentially just a 1 liner -- github.com/ugexe/zef/blob/1809160b...kumod#L881 21:46
[Coke]: i'm not sure how that wouldnt already be happening if raku sees it fine since shell passes along %*ENV and the zef look logic is essentially just a 1 liner -- github.com/ugexe/zef/blob/1809160b...kumod#L881 21:47
for me it seems to work as you expect 21:55
i.e. if i set `BAR=42` then do `zef look` i can still see BAR as 42 21:56
[Coke] could have been user error, for sure. 22:00
my issue was that when I did "which raku" I got the rakubrew raku instead of the one I had first in my PATH before issuing zef look. 22:01
ugexe ah well you probably have something like .bash_profile or some such auto setting that
[Coke] ... D'oh 22:03
22:05 jrjsmrtn left, gugod left, jrjsmrtn joined 22:12 gugod joined
[Coke] so yes, user error. :) 22:16
22:33 jjido left 22:37 djerius left 22:39 djerius joined 22:46 linkable6 joined 22:51 vasko4 joined 22:53 vasko left, vasko4 is now known as vasko 23:31 juanfra left, AlexDaniel left 23:32 demostanis[m] left, cnx left, happy-dude left 23:47 AlexDaniel joined 23:54 happy-dude joined