🦋 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 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 8 June 2022.
00:07 reportable6 left 00:08 reportable6 joined 00:10 [Coke] left 00:20 [Coke] joined 00:50 simcop2387 joined 00:52 perlbot joined 01:07 kjp left 01:29 perlbot left 01:30 simcop2387_ joined, simcop2387 left 01:31 simcop2387_ is now known as simcop2387 01:33 perlbot joined 01:37 Sankalp left 01:38 Sankalp joined 01:57 frost joined 02:15 Sankalp left 02:17 Sankalp joined 03:17 linkable6 left, bloatable6 left, benchable6 left, evalable6 left, greppable6 left, notable6 left, statisfiable6 left, quotable6 left, unicodable6 left, releasable6 left, shareable6 left, coverable6 left, sourceable6 left, committable6 left, reportable6 left, tellable6 left, nativecallable6 left, bisectable6 left, linkable6 joined, evalable6 joined 03:18 quotable6 joined, benchable6 joined, notable6 joined, unicodable6 joined, coverable6 joined 03:19 bloatable6 joined, statisfiable6 joined, sourceable6 joined, greppable6 joined, bisectable6 joined 03:20 committable6 joined, shareable6 joined, tellable6 joined, releasable6 joined, reportable6 joined, nativecallable6 joined 03:59 simcop2387 left, perlbot left 04:09 simcop2387 joined 04:10 perlbot joined 04:18 vrurg_ joined, vrurg left 05:18 nativecallable6 left, unicodable6 left, statisfiable6 left, tellable6 left, notable6 left, reportable6 left, coverable6 left, quotable6 left, evalable6 left, committable6 left, benchable6 left, shareable6 left, linkable6 left, greppable6 left, sourceable6 left, bisectable6 left, bloatable6 left, releasable6 left 05:19 evalable6 joined, releasable6 joined, bisectable6 joined, sourceable6 joined 05:20 bloatable6 joined, statisfiable6 joined, tellable6 joined, greppable6 joined, quotable6 joined, reportable6 joined, nativecallable6 joined 05:21 committable6 joined, benchable6 joined, coverable6 joined, unicodable6 joined, notable6 joined, linkable6 joined 05:22 shareable6 joined 06:09 reportable6 left, reportable6 joined 06:51 ToddAndMargo joined 07:03 Sgeo left 07:43 ProperN[out] left 07:44 ProperNoun joined 07:59 Kaiepi left, Kaiepi joined 08:05 sena_kun joined 08:19 abraxxa joined 08:25 kaskal left 08:26 abraxxa left, abraxxa joined 08:53 lockywolf_ joined 08:54 lucs left, lucs joined, lockywolf left 08:55 lockywolf_ is now known as lockywolf 09:12 lichtkind joined 09:15 Kaiepi left 09:19 Sankalp left 09:21 Sankalp joined 09:36 mexen joined 09:44 jaguart joined
jjatria melezhik: I saw that you had sent it, but I haven't had a chance to take a proper look. I'll try to look at it over the weekend 🙇 10:04
tellable6 jjatria, I'll pass your message to melezhik
10:05 Altai-man joined 10:31 sena_kun_ joined, Altai-man left 11:14 sacomo left
SmokeMachine s/suiting/studying/ 11:34
m: use v6.e.PREVIEW; m: my @a=<a b c d>; my %h{||@a} = True; dd %h;
camelia ===SORRY!=== Error while compiling <tmp>
Invalid hash shape; type expected
at <tmp>:1
------> PREVIEW; m: my @a=<a b c d>; my %h{||@a}⏏ = True; dd %h;
expecting any of:
constraint
SmokeMachine gfldex: I think that's the way I mostly use .none... :) Good to know I was useful for something... 11:36
m: use v6.e.PREVIEW; my @a=<a b c d>; my %h{||@a} = True; dd %h; 11:38
camelia ===SORRY!=== Error while compiling <tmp>
Invalid hash shape; type expected
at <tmp>:1
------> .e.PREVIEW; my @a=<a b c d>; my %h{||@a}⏏ = True; dd %h;
expecting any of:
constraint
SmokeMachine m: use v6.e.PREVIEW; my @a=<a b c d>; (my %h){||@a} = True; dd %h 11:39
camelia Hash %h = {:a(${:b(${:c(${:d(Bool::True)})})})}
11:50 frost left 12:00 frost joined 12:05 frost left 12:08 reportable6 left 12:11 reportable6 joined 12:54 habu joined
habu Hello, does Raku have fast native shaped arrays a-la-numpy? 12:55
or, better, is it straightforward to use numpy with Inline::Python 12:56
13:08 habu left
SmokeMachine lizmat: maybe that's not rak's duty but would it make sense to allow something like this? `rak --allow-json --allow-yaml '*.<bla>.defined'` and that would parse any json or yaml files and show the ones that has a `bla` key defined at the structure of the document? Maybe 2 patterns, one when the file is json/yaml and other when its not? (Sorry, I'm just asking because I just needed something like that.) 13:10
lizmat well, we already have JSON::Fast as a dependency, so handling JSON files would be trivial 13:13
hmmm
Nemokosch by the way, I suspect JSON::Fast might be still way too slow 13:14
lizmat Nemokosch: perhaps, but "rak" is not about speed, but about features :-) 13:15
tellable6 lizmat, I'll pass your message to Nemokosch
lizmat much like Raku for that matter
Nemokosch well, for rak, it would be good to keep it useful
what's the use of finding the needle in the haystack if it turned winter in the meantime 13:16
lizmat well, I keep efficiency in mind, but not at all cost 13:17
Nemokosch by the way, no, perhaps it's not JSON::Fast that is too slow
took around 10 seconds to parse a 4,5 MB JSON string
that's okay by me
well then I have no idea what Cro is doing with that request...
SmokeMachine But it would only be slower if a flag was used... 13:18
lizmat Nemokosch: if the outer part of your JSON is an array, you could use raku.land/zef:lizmat/JSON::Fast::Hyper to make things about 3x as fast 13:19
tellable6 lizmat, I'll pass your message to Nemokosch
Nemokosch I'm afraid that isn't the case 13:20
but I wonder
it takes around 10 seconds for Cro to get a response
SmokeMachine lizmat: would that also be faster for something like `{ "count": 999999999, "items": [ ... ] }`? 13:21
Nemokosch if I take the response as string and parse it with JSON::Fast, that would take an additional 10 seconds
what on earth is Cro doing that it doesn't finish in a minute 13:22
is it stuck?
SmokeMachine (with `*.items` being an array with 999999999 items (the size is just an example))
lizmat perhaps ask on #cro ?
SmokeMachine is there a #rak? or should I keep asking/suggesting stuff about oak here? 13:23
s/oak/rak/ 13:24
lizmat there's no #rak, but maybe there should be a #raku-rak ?
but I'm happy with rak being mentioned here :-)
for now, anyway
SmokeMachine :)
13:25 Nemokosch joined
SmokeMachine now I thought about auto-parsing json I am think if something like auto-parsing Raku would be useful, but someday it would be cool to search by RakuAST... (probably that should be a different tool...) 13:27
lizmat fwiw, I intend rak to be a customizable swiss-army knife :-) 13:35
14:03 dogbert17 left 14:14 Nemokosch left 14:32 dogbert17 joined 14:35 dogbert11 joined 14:38 ToddAndMargo left 14:39 dogbert17 left 14:40 Nemokosch joined 14:58 dogbert17 joined 15:01 dogbert11 left 15:15 abraxxa left 15:18 abraxxa-home joined 15:26 kaskal joined, dogbert17 left
SmokeMachine lizmat: so, searching by Raku's (and maybe other languages) AST is an option? 15:30
15:32 kaskal left
SmokeMachine lizmat: could/should it have different treats/plugins for each file type? 15:38
lizmat: should the block needle be able to receive an IO::Path instead of the content of the file? (or maybe something like IO::Path but also with the content, maybe the content as a Supply, something like node's vinyl-file (github.com/gulpjs/vinyl)) 15:42
that way you could also use the file name to filter 15:43
maybe the object representing the file could have a `.parsed` method that would return a data structure that would be the file content parsed if that's a json (for example)...that way, my first suggestion from today could be written like: `rak --allow-json --allow-yaml '*.?parsed.<bla>.defined'` 15:46
`rak --allow-json --allow-yaml '*.parsed andthen .<bla>.defined' 15:47
lizmat: (sorry for keep talking, but I got exited...) 15:49
excited 16:01
16:02 morte_ joined 16:11 Nemokosch left 16:13 sena_kun_ left 16:14 sena_kun_ joined
[Coke] fast way to find if dupes in a list of no more than 25 items? I am doing .sort.unique.elems == $original_length 16:18
SmokeMachine m: say so <a b c a d e f>.Bag.values.any > 1 16:23
camelia True
SmokeMachine m: say so <a b c a d e f>.Bag.values.max > 1 16:24
camelia True
16:26 kaskal joined
SmokeMachine m: say so <a b c a d e f>.repeated 16:27
camelia True
Nemokosch repeated 💪 16:28
SmokeMachine [Coke]: hy are you sort()ing before unique()ing? You need that for squish() but not for unique(), right? 16:30
[Coke] m: my @a=<1 3 2 3>. dd @a.unique 16:32
camelia ===SORRY!=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> my @a=<1 3 2 3>. dd⏏ @a.unique
expecting any of:
infix
infix stopper
postfix
statement end
stat…
[Coke] m: my @a=<1 3 2 3>; dd @a.unique
camelia (IntStr.new(1, "1"), IntStr.new(3, "3"), IntStr.new(2, "2")).Seq
[Coke] ... habit, I guess. Thank you. :) 16:33
16:33 Sgeo joined
SmokeMachine m: .repeated.so.say for [<a e I o u>, <a e I o u a>, <a a e I o u>] 16:34
camelia False
True
True
Voldenet not sure if using .repeated is the fastest way 16:36
m: sub has-duplicates { my $h = SetHash.new(); for @^a { return True if $h.EXISTS-KEY($_); $h.set($_) }; False }; .&has-duplicates.say for [<a e I o u>, <a e I o u a>, <a a e I o u>]; 16:37
camelia False
True
True
Voldenet m: sub has-duplicates { my $h = SetHash.new(); for @^a { return True if $h{$_}; $h.set($_) }; False }; .&has-duplicates.say for [<a e I o u>, <a e I o u a>, <a a e I o u>]; 16:38
camelia False
True
True
Nemokosch it would be pretty bizarre if it isn't, that's for sure though
SmokeMachine .repeated returns a Seq, so I suppose when converting to Bool it would return on the first repeated found... but I haven't read the code yet... 16:39
Nemokosch Oh right, there was a conversion 16:40
Then it's quite possible that calculating the bool value eagerly is faster; not sure if these conversions are implemented effectively 16:42
Voldenet I'm sure the above can be rewritten with nqp::hash 16:43
16:45 dogbert17 joined
SmokeMachine usercontent.irccloud-cdn.com/file/...2%402x.png 16:47
Voldenet SetHash doesn't seem efficient enough compared to nqp::hash 16:48
though practically you're testing against the worst case 16:49
SmokeMachine I think this is it: github.com/rakudo/rakudo/blob/af31...1950-L1960
yes, I'm testing over the worst case...
s/over/against/
usercontent.irccloud-cdn.com/file/...6%402x.png 16:52
Voldenet .repeated.so will shortcircuit too, so to beat it by anything one would have to copy the code of pull-one and optimize it for returning bool 16:57
SmokeMachine I think so...
But I think `.repeated.so` is fast enough... 16:59
Nemokosch nice 17:03
17:06 sena_kun_ left
SmokeMachine just out of curiosity: usercontent.irccloud-cdn.com/file/...5%402x.png 17:07
17:50 swaggboi joined 18:06 reportable6 left, eseyman left 18:08 reportable6 joined 18:15 sftp_ joined, sftp left, sftp_ is now known as sftp 18:21 jaguart left 18:32 jmcgnh left 18:42 sftp_ joined 18:44 sftp left, sftp_ is now known as sftp 18:45 eseyman joined 18:47 jmcgnh joined 19:01 eseyman left 19:22 vrurg_ is now known as vrurg 19:36 abraxxa-home left 19:45 sena_kun left 19:47 sena_kun joined 20:20 jgaz joined 20:22 morte_ left 20:30 morte_ joined 20:56 simcop2387 left 20:57 perlbot left 20:58 morte_ left, morte_ joined 20:59 simcop2387 joined, perlbot joined 21:02 sena_kun left
lizmat SmokeMachine: to see whether a key exists in a JSON file, wouldn'r '"keyname":' suffice ? 21:17
% rak '"depends":' META6.json
META6.json
8:"depends": [
21:26 jgaz left 21:59 kaskal left 22:13 saint- joined
saint- Hey, I was wondering why as part of a Grammar, this works: token sentRefEnd { <char>+? <endPunc> <ref> } but not this: token sentFrag { <char>+? } 22:16
token sentRefEnd { <sentFrag> <endPunc> <ref> }
In other words, I replace the <char>+? with another token, sentFrag, and then it doesn't work for whatever reason 22:17
Nemokosch I wonder what happens if you use `regex` instead of `token` 22:20
22:25 kaskal joined
SmokeMachine lizmat: no, because it also can be a value… 22:34
And it can be oddly idented 22:35
22:38 Tirifto left
SmokeMachine And maybe you need something like: `rak —allow-json ‘*.parsed andthen.<bla> ~~ [**, “specific value”, **]’ 22:38
m: say <bla ble bli blo blu> ~~ [**, “bli”. **] 22:39
camelia ===SORRY!=== Error while compiling <tmp>
Unsupported use of . to concatenate strings. In Raku please use: ~.
at <tmp>:1
------> say <bla ble bli blo blu> ~~ [**, “bli”.⏏ **]
22:39 Tirifto joined
SmokeMachine m: say <bla ble bli blo blu> ~~ [**, “bli”, **] 22:39
camelia True
SmokeMachine m: say <bla ble bli blo blu> ~~ [**, “bla”, **] 22:40
camelia True
SmokeMachine m: say <bla ble bli blo blu> ~~ [**, “blu”, **]
camelia True
22:40 morte_ left
SmokeMachine lizmat: keyname could also be on a path different from the one you want it… matching that would get every time that was used as key… and that may not be what you want… 22:56
22:57 kaskal- joined 22:58 kaskal left
saint- Could anyone tell me why this code doesn't work (but the commented line works) www.toptal.com/developers/hastebin...properties 23:38
23:58 evalable6 left, linkable6 left 23:59 evalable6 joined