🦋 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,
perlbot left,
reportable6 joined
00:01
simcop2387 left
00:03
simcop2387 joined,
jpn joined
00:04
perlbot joined
00:08
deoac joined
00:09
jpn left
00:12
deoac left
00:31
Xliff_ joined
00:33
Xliff left
01:02
jpn joined
01:07
jpn left
01:27
perlbot left
01:29
simcop2387 left
01:30
simcop2387 joined
01:31
eseyman left
01:32
perlbot joined
01:38
eseyman joined
02:35
_Xliff joined
02:38
Xliff_ left
02:46
jpn joined
02:51
jpn left
02:54
razetime joined
03:04
exp left
03:05
exp joined
03:23
rf left
03:44
simcop2387 left
03:45
simcop2387 joined
|
|||
vrurg_ | tonyo: if it's not too late. :) github.com/vrurg/raku-Config-BINDish for example. But, basically, pretty much any of my personal repos use .gitignore | 04:05 | |
04:34
jpn joined
04:38
perlbot left
04:40
jpn left,
simcop2387 left
04:42
perlbot joined
04:43
simcop2387 joined
05:20
_Xliff left
05:21
perlbot left
05:22
simcop2387 left
05:23
simcop2387 joined
05:26
perlbot joined
05:27
simcop2387 left
05:29
simcop2387 joined
06:00
reportable6 left
06:01
reportable6 joined
06:22
jacob37 joined
06:23
jpn joined
06:24
perlbot left
06:25
jacob37 left,
perlbot joined
06:28
jpn left
06:31
simcop2387 left
06:32
perlbot left
06:37
perlbot joined
06:38
simcop2387 joined
06:39
razetime left
06:44
perlbot left
06:47
simcop2387 left,
tea3po left
06:48
tea3po joined
06:49
tea3po left,
tea3po joined
06:50
tea3po left
06:51
tea3po joined,
simcop2387 joined
06:52
perlbot joined
06:58
knarkhov joined
07:12
Sgeo left
07:13
derpydoo left
07:15
derpydoo joined
07:39
jpn joined
07:40
jpn joined
07:53
squashable6 left
07:54
squashable6 joined
08:08
razetime joined
08:19
jpn left
08:22
jpn joined
08:34
jpn left
08:46
jpn joined
08:48
squashable6 left
08:51
squashable6 joined
09:10
abraxxa joined,
razetime left,
dakkar joined
09:16
perlbot left
|
|||
Geth | App-Rakubrew: 465c933509 | (Patrick Böker)++ | 6 files Fix `self-upgrade` on ARM MacOS |
09:18 | |
09:18
simcop2387 left
09:21
simcop2387 joined
09:24
perlbot joined
09:25
simcop2387 left
09:26
simcop2387 joined
09:31
squashable6 left,
squashable6 joined
09:55
knarkhov left
09:58
abraxxa left
10:11
derpydoo left
10:13
derpydoo joined
|
|||
Voldenet | > Cannot classify a lazy list onto a Hash[Any,Any] | 10:25 | |
I hate how I need to write `classify` for my use case | |||
is `lazy` supposed to always mean `infinite` | 10:27 | ||
Nemokosch | Hash[Any, Any] is really just a worse version of Hash | ||
Voldenet | I know, but here I simply wanted to group generated data into buckets without evaluating whole sequence | 10:28 | |
so .classify would've worked | |||
guifa | Voldenet, wouldn't it need to evaluate the whole sequence as soon as you call %hash<category> ? | 10:29 | |
Voldenet | Yes it would, but it wouldn't need to store that data a few times | 10:30 | |
guifa | lazy doesn't mean infinite per se. just means it doesn't eagerly evaluate items 5-100 if you've only requested 0-4 | ||
10:31
knarkhov joined
|
|||
Voldenet | I get the point that classify could hang for lazy infinites | 10:31 | |
but still, it should let me shoot my foot | 10:32 | ||
if I wish :P | |||
guifa | push %hash{.head}, .tail for @list; # <-- maybe this works? | ||
guifa is afk | |||
lizmat | Voldenet: then .eager it ? | 11:01 | |
Voldenet | I just rewrote things to use gather/take properly | 11:04 | |
.lazy is risky to use when things need tons of memory anyway | 11:05 | ||
tbrowder__ | .seen jforget | 11:07 | |
tellable6 | tbrowder__, I haven't seen jforget around, did you mean jorge? | ||
11:10
dakkar left
11:12
dakkar joined
|
|||
Nemokosch | there is some discrepancy in the lazy terminology | 11:19 | |
is-lazy doesn't actually check what it claims to, only a very tight subset of it | |||
it's rather "is it obvious by the definition of this iterator that it is lazy", so it can easily give false negatives | 11:20 | ||
lizmat | well, it's a contract: ask the underlying iterator if it thinks its lazy, and report that | 11:21 | |
Nemokosch | is-lazy is actually more like is-infinite - except it will also report True if you explicitly mark something lazy | ||
lizmat | if the underlying iterator lies, then garbage in, garbage out applies | ||
Nemokosch | the iterator doesn't lie, it just doesn't tell you the complete truth 😛 mostly because laziness is usually a more holistic concept so an iterator just genuinely doesn't have a clue about it | 11:36 | |
lizmat | disagree: the iterator *does* know because it says so (implicitely) with the "is-lazy" method | 11:44 | |
11:47
thundergnat joined
|
|||
thundergnat | It can be difficult (and time consuming) to determine if a particular is infinite or not. It uses some heuristics and best guess estimates, and gets it right more often than not, but anything it says is a best guess, and if you deliberately lie to it, it will assume you know what you are doing. | 11:50 | |
m: my \Δ = $ = 1; say (flat 0, [1..9], {last if .not; ++Δ; [(.flat X~ 0..9).grep: * %% Δ]} … *).tail; # NOT an infinite iterator | |||
camelia | Cannot tail a lazy list in block <unit> at <tmp> line 1 |
||
thundergnat | my \Δ = $ = 1; say (flat 0, [1..9], {last if .not; ++Δ; [(.flat X~ 0..9).grep: * %% Δ]} … *).eager.tail; # NOT an infinite iterator | 11:51 | |
11:51
abraxxa joined
|
|||
evalable6 | 3608528850368400786036725 | 11:51 | |
tbrowder__ | hi, i'm working on another holiday module and need a reality check with a person familiar with the hebrew calendar. anyone here? | 11:52 | |
Nemokosch | lizmat: this is a bit of a tautology, though | 11:53 | |
yes, it says what it knows but it cannot always give the right answer - this is the thing | |||
thundergnat | Yep. Exactly my point. | 11:54 | |
lizmat | well, suppose we also had a "don't know" setting in iterators, how would it be different from "is lazy" semantically ? | ||
11:55
derpydoo left
|
|||
Nemokosch | m: my $seq1 := 1, 4, 7 ... 10000; dd $seq1; my $seq2 := 1, 4, 7 ... *; dd $seq2; | 11:56 | |
11:57
jmcgnh left
|
|||
uh oh... that's definitely not what I wanted to show 😅 | 11:57 | ||
dd wasn't a good idea here | |||
tbrowder__ | from looking at @jforget's Date:📆:Hebrew (and using it), i can get the hebrew date for the first day of Hanukkah and convert it to a Date (Gregorian). the slight wrinkle is the hebrew day starts at sunset so the calculated G date for the H date looks like it needs to be reduced by 1 to get results correct for online data i've found. does that seem correct? | 11:58 | |
11:58
Nemokosch joined
|
|||
Nemokosch | m: my $seq1 := 1, 4, 7 ... 10000; say $seq1; | 11:59 | |
camelia | (1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100 103 106 109 112 115 118 121 124 127 130 133 136 139 142 145 148 151 154 157 160 163 166 169 172 175 178 181 184 187 190 193 196 199 202 205 208 211 21… | ||
Nemokosch | not because it's not (supposed to be) lazy but because it doesn't know it about itself and reifies the first 100 elements for gist | ||
11:59
derpydoo joined
|
|||
Nemokosch | m: my $seq2 := 1, 4, 7 ... *; say $seq2; | 11:59 | |
camelia | (...) | ||
12:00
reportable6 left
|
|||
Nemokosch | on the other hand, this clearly knows about itself that it's lazy and therefore won't reify values for something as mundane as providing a gist | 12:00 | |
lizmat | my $seq2 := 1, 4, 7 ... *; say $seq2.eager | ||
m: my $seq2 := 1, 4, 7 ... *; say $seq2.eager | 12:01 | ||
hmmm | |||
Nemokosch | that will probably hang | ||
camelia | (timeout) | ||
lizmat | it should just produce 100 elements ? | ||
Nemokosch | I think .eager itself hangs | ||
.eager is so eager it doesn't care when and how it will be consumed | 12:02 | ||
lizmat | yeah, looks like you're right.... I wonder if that isn't a bit LTA | ||
12:02
reportable6 joined
|
|||
Nemokosch | $seq1 would be the middle ground. It doesn't call itself lazy but it's not eager either, in the strict sense | 12:03 | |
it's like lenient | |||
12:06
Nemokosch left
|
|||
thundergnat | Technically _all_ iterators are lazy. Whether or not they reify some (or all) elements depends on what you do with them. | 12:07 | |
lizmat | well, iterators are reactive: they don't do anything unless you ask them to provide a value | ||
thundergnat | Exactly. That's what I meant even if I phrased it wrong. | 12:08 | |
12:08
jmcgnh joined
|
|||
lizmat | gotcha | 12:09 | |
Nemokosch | And that's what I meant by the holistic stuff 😛 | 12:10 | |
thundergnat | the is-lazy attribute is a hint to the compiler whether it is feasible, or even possible, to go ahead and try to reify the whole list if you perform some operation that may request it. | 12:11 | |
If it is-lazy, it won't even try. | 12:12 | ||
Unless you specifically tell it too. | |||
Nemokosch | yep, this makes sense | ||
it's just the name is kind of misleading. There are three levels of laziness, at least | 12:13 | ||
thundergnat | And again, it sometimes gets it wrong when it tries to guess if it is-lazy or not. | ||
12:14
jmcgnh left,
Xliff joined
|
|||
thundergnat | perhaps is-infinite may have been a better term | 12:14 | |
Xliff | \o | ||
Nemokosch | or one can say: is-lazy is accurate and misnamed for iterators, while it is well-named but inaccurate for iterables | ||
Xliff | Does Raku have tools to generate public and private cryptographic keys? | ||
Nemokosch | is-infinite won't cut it, by the way, because of the lazy keyword | 12:15 | |
thundergnat | yeah, that would have a whole other set of semantic difficulties. | ||
Nemokosch | Xliff: isn't there something like that around the Digest macroverse? | 12:17 | |
12:18
nima joined,
thundergnat left
|
|||
Xliff | Nemokosch: I know not. That's why I'm asking. :) | 12:19 | |
tellable6 | Xliff, I'll pass your message to Nemokosch | ||
12:19
nima left
|
|||
Xliff | Aha! Crypt::RSA! | 12:20 | |
However the key generation parameter is in number of digits, and I'm not sure how that relates to bitsize. | 12:24 | ||
12:37
perlbot left,
simcop2387 left
12:53
tbrowder__ left,
tbrowder__ joined
13:12
jpn left
|
|||
Voldenet | >It can be difficult (and time consuming) to determine if a particular is infinite or not. | 13:16 | |
It's possible to simply require infinite sequences be marked as such or just execute operations | 13:18 | ||
in case of classify, I realized that I needed a version of classify that given N categories would generate N iterators, which is a lot different from what classify originally does | 13:19 | ||
Xliff: to start with `Crypt::RSA` doesn't look like something to be used in production | 13:38 | ||
if that doesn't scare you, you can use your own random-prime-generator that would return a random prime | 13:39 | ||
lizmat | Voldenet: are you sure you mean iterators, and not supplies? | 13:42 | |
Voldenet | Yes, the iterator that wasn't infinite but long enough that it didn't fit in the memory | 13:44 | |
13:51
jpn joined
|
|||
Voldenet | Xliff: that's what I'd use: `use Crypt::OpenSSL::RSA:from<Perl5>; say Crypt::OpenSSL::RSA.generate_key(1024).get_private_key_string();` | 13:54 | |
13:56
jpn left
14:04
xinming left
14:06
xinming joined
|
|||
lizmat | and yet another Rakudo Weekly News hit the Net: rakudoweekly.blog/2023/03/13/2023-11-ainions/ (yesterday already :-) | 14:10 | |
14:12
jpn joined
|
|||
Voldenet | (primary issue of Crypt::RSA is that it can pick p and q very close to each other and there's no way to control that behavior) | 14:12 | |
[Coke] | lizmat++ | 14:13 | |
Thank you for this huge run of blog posts! | |||
14:25
Sgeo joined
14:59
jmcgnh joined
|
|||
tbrowder__ | lizmat: good weekly, as usual. i would love to see Slang::Forgiven in core! | 15:00 | |
that is: allow the topical $_ use with named keys/values | 15:04 | ||
15:04
grondilu joined
|
|||
tbrowder__ | worth filing a feature request? | 15:05 | |
grondilu | can I not put comments at all inside qw{}? | 15:17 | |
15:17
perlmaros left,
rf joined
|
|||
rf | Morning folks | 15:17 | |
Nemokosch | grondilu - probably not | 15:19 | |
15:23
knarkhov left
15:24
thundergnat joined,
knarkhov joined
|
|||
thundergnat | m: my $var = 'no comment'; say <<a b #`{{a comment!}} $var c d>>; | 15:25 | |
camelia | (a b no comment c d) | ||
15:25
thundergnat left
15:30
abraxxa left
15:41
summerisle left
15:42
summerisle joined
15:56
vrurg joined,
vrurg_ left
15:57
vrurg_ joined
15:58
simcop2387 joined
15:59
perlbot joined
16:00
vrurg left
|
|||
tbrowder__ | any seconds on filing rakudo feature request for adding capability of new module Slang::Forgiven to core? | 16:04 | |
tonyo | vrurg_: i have the changes in master for fez it should _just work_ now | 16:18 | |
16:22
Xliff left
16:24
kostas joined,
simcop2387 left,
perlbot left
16:27
knarkhov left
|
|||
tonyo | if you don't want to install from master lmk and i'll publish | 16:27 | |
16:41
simcop2387 joined
16:42
perlbot joined
16:48
perlmaros joined
16:53
kostas left
|
|||
tonyo | vrurg_: i trued up the globber with what git archive would make in bindish and it was very similar (missing just the raw directories in the resulting tar) but for the most part looked reasonable | 17:03 | |
17:32
simcop2387 left
17:34
perlbot left
17:37
dakkar left,
perlbot joined
17:38
simcop2387 joined
17:40
simcop2387 left,
perlbot left
17:42
perlbot joined
17:43
simcop2387 joined
|
|||
lizmat | tbrowder: it feels a lot like it is a feature "you think it is a good idea now" :-) | 17:47 | |
and what is wrong with adding "$_ := $num" at the top of the body of the loop ? | 17:48 | ||
you do *not* have to use given to set the topic | |||
18:00
reportable6 left
18:01
reportable6 joined
|
|||
Voldenet | tbrowder__: in the form `for given @it { when * > 0 { } }` -> `for @it { given $_ { when * > 0 { say "$_ is positive" } } }` it would make more sense probably | 18:03 | |
but | 18:04 | ||
m: for 1, 2, -3 { when * > 0 { say "$_ is positive" } } # why even need that "given" | 18:05 | ||
camelia | 1 is positive 2 is positive |
||
18:40
ToddAndMargo joined
18:50
teatwo joined
18:53
jpn left,
tea3po left
18:58
grondilu left
19:06
squashable6 left
19:08
squashable6 joined
19:15
vrurg_ left,
vrurg joined
19:16
perlbot left,
simcop2387 left
19:18
jgaz joined
19:23
simcop2387 joined
19:24
perlbot joined
19:33
yoreei joined
20:03
sivoais left
|
|||
snonux | m: say "$_ is positive" if $_ > 0 for 1, 2, -3; | 20:12 | |
camelia | 1 is positive 2 is positive |
||
tonyo | m: (1,2,3,-1,-2,-3).map({ when * > 0 { "$_ is positive" }; default { "$_ is negative" } })>>.&say | 20:14 | |
camelia | 1 is positive 2 is positive 3 is positive -1 is negative -2 is negative -3 is negative |
||
tonyo | i'd probably not put the slang in core given the for when syntax works fine already ^ | 20:15 | |
20:16
yoreei left
|
|||
tonyo | vrurg: i'm going to release the next fez and then the only thing left in my dist branch would be writing a pure raku gzipper | 20:18 | |
anyone having problems with fez's globber/sdist stuff, please update! | 20:20 | ||
rf | tonyo++ | 20:24 | |
20:30
yoreei joined
|
|||
tbrowder__ | ok, thanks for weighing in with good comments. i will try to improve my “foreach” practices. | 20:45 | |
20:52
ToddAndMargo left
21:01
jgaz left
21:03
sivoais joined
21:11
perlbot left
21:12
perlbot joined
|
|||
vrurg | tonyo: I have switched to using --file anyway already. :) | 21:18 | |
21:18
jpn joined
|
|||
vrurg | tonyo: but hope it would prove to be useful for others. | 21:18 | |
21:22
yoreei left,
jpn left
21:23
jmcgnh left
21:45
squashable6 left
21:47
squashable6 joined,
jmcgnh joined
22:04
perlbot left
22:06
simcop2387 left
22:07
perlbot joined
22:10
simcop2387 joined
22:31
elcaro left
|
|||
guifa | before forgiven I'd like to see for { … } else { … }. Damian already hacked that one together a while ago ha | 22:44 | |
Nemokosch | it doesn't take an AlexDaniel to say: please no | 22:45 | |
more barely useful structures that need a whole lot of reasoning to get right, or even decide whether it's semantically clean | 22:46 | ||
guifa | I think for else is really straight forward: if no iterations, then handle the else | 22:47 | |
Nemokosch | I don't think I've ever found myself wanting to do that. On the other hand, Python's else clause does something else that I did find useful quite often | 22:49 | |
guifa | what's that? | ||
Nemokosch | code that executes when the loop exits "normally", not hitting any break's (or return's, for that matter) | 22:50 | |
22:50
jmcgnh left
|
|||
mind you, I don't find the name else particularly good for that either. I think a for just shouldn't have something called else in the first place | 22:51 | ||
guifa | for { … } otherwise { … } lol | 22:52 | |
Nemokosch | but when it comes to usefulness, I find the Python choice way more useful than "execute this when the loop turned out to be empty" | ||
guifa | hmm, I wonder how I might be able to create a Python-ish style one. I'd definitely do a different name for it though. It's just I don't think there's a good short word to encompass "and if ended without a last statement being called") | 22:56 | |
22:58
jmcgnh joined
23:07
jpn joined
23:11
jpn left
23:42
japhb left,
japhb joined
23:52
derpydoo left
|
|||
vrurg | guifa: you don't need 'otherwise' or alike to handle any control event. | 23:58 | |
m: for ^10 { CONTROL { when CX::Last { say "HERE WE DO SOMETHING ON LAST"; .rethrow; }; }; .say; last if $_ == 3; } | |||
camelia | 0 1 2 3 HERE WE DO SOMETHING ON LAST |
||
guifa | vrurg you've got the goal backwards: the goal is to do something if and only if last is never called | ||
vrurg | So, when loop has finished successfully? | 23:59 |