🦋 Welcome to the former MAIN() IRC channel of the Raku Programming Language (raku.org). This channel has moved to Libera (irc.libera.chat #raku) Set by lizmat on 23 May 2021. |
|||
00:02
reportable6 left
00:05
reportable6 joined
00:13
bill790 joined
00:19
leah2 left
00:23
kjk left
00:37
Doc_Holliwood left
00:40
Doc_Holliwood joined
00:56
frost joined
01:22
squashable6 left
01:23
squashable6 joined
01:25
Doc_Holliwood left
01:31
tejr left
01:38
tejr joined
01:39
tejr joined
02:05
rassoc left
02:51
neshpion left
03:14
guifa joined
03:46
monkey_ joined
03:48
bill790 left
04:01
monkey_ left
04:05
RandalSchwartz left
|
|||
guifa | Because enums are really special hashes, that means that even if not all values are used, the full collection has to stay in memory at both compile and runtime yeah? | 04:14 | |
guifa is trying to figure out best practices for an 8000+ enum system, although not opposed to switching to some sort of specialized package system | 04:15 | ||
04:18
guifa left
04:19
guifa joined
|
|||
japhb | guifa: Is the problem the memory footprint of the number of enumerations (~ hashes), or the number of enumerants (~ individual keys)? Or is it about deserialization time? | 04:31 | |
guifa | japhb: enumerants. > 8000, but I imagne a typical use case is to only need a handful of them in any given project | 04:33 | |
I'm autogenerating an enum for language codes, but while English => 'en', Spanish => 'es', etc, are probably quite likely to be used, SantaCatarinaAlbarradasZapotec => 'ztn' is probably overkill for most people. | 04:35 | ||
And i'd hate for the extra weight to be sitting around there unless someone needs it. (OTOH, I don't think I can export only some enum keys and still be fully interoperable with a different module that assumes a full set of keys, or could I?) | 04:36 | ||
japhb | Hmmm. Why do you need all those language keys to be enumerants? (I've got a couple guesses what you're looking for, but my suggestion depends on why you're wanting to do this.) | 04:54 | |
guifa | I'd like to be able to type check for a language code enum (mainly to allow for, e.g., LanguageTag.new: Language::English, Region::Canada, Script::Latin, but not enforce a given order | 04:59 | |
(I've been putting each enum in its own package to allow for the Language::* syntax, to at least avoid massively dumping thousands of symbols in the main scope) | 05:00 | ||
05:19
guifa left
|
|||
japhb | `my %languages; subset ValidLanguage of Str where %languages; sub foo(ValidLanguage $lang)` ? | 05:23 | |
Or even `sub language-code(ValidLanguage $lang) { %languages{$lang} }` | 05:24 | ||
05:58
ufobat joined
06:02
reportable6 left
06:04
reportable6 joined
06:44
Doc_Holliwood joined,
patrickb joined
06:49
stoned75 joined
07:18
DarthGandalf left
07:20
DarthGandalf joined
07:24
xinming left
|
|||
moon-child | tim toady casting shade: 'To the best of my recollection, Perl has never borrowed a PHP feature. We didn't even skip version 6, as they did' | 07:33 | |
07:35
Doc_Holliwood left
07:40
Eddward left
07:43
Sgeo left
07:44
dakkar joined
07:49
rassoc joined
08:02
patrickb left
08:15
tejr left
08:29
leah2 joined
08:58
canw joined
09:16
canw left
09:17
sono left
09:22
Altai-man joined
09:25
canw joined
09:30
canw left
09:39
Altai-man left
10:39
linkable6 left,
evalable6 left
10:40
evalable6 joined
10:41
linkable6 joined
11:29
brown121407 is now known as smarton
11:30
tejr joined
11:37
lucerne left,
greyrat left
12:02
reportable6 left
12:03
Doc_Holliwood joined
12:04
reportable6 joined
|
|||
Altreus | I think that is a joke because the history people see will show that we did, indeed, skip 6 | 13:01 | |
But I cannot imagine what functionality of PHP can be considered a feature | 13:02 | ||
lizmat | allomorphs ? | 13:03 | |
13:04
evalable6 left,
linkable6 left
|
|||
Altreus | what does that mean in this context? | 13:06 | |
13:06
linkable6 joined
13:07
evalable6 joined
|
|||
lizmat | doesn't PHP just have allomorphs? | 13:11 | |
fwiw, I gave up on PHP at version 1.8b5 or so | 13:12 | ||
Altreus | I dunno what an allomorph is in software :D | 13:14 | |
I looked it up but only got linguistics answers | |||
lizmat | m: dd <42> | ||
camelia | IntStr.new(42, "42") | ||
Altreus | ah, dualvars in perl | 13:15 | |
I'm not sure that arrives at the code layer often enough to be considered a feature tbh | 13:16 | ||
normally it's transparently equivalent to coercion | |||
lizmat | true | ||
I was getting pretty desperate at figuring a PHP feature :-) | |||
rassoc | better perf compared to us ;) | 13:17 | |
13:18
Eddward joined
|
|||
lizmat | once I spent 3 days trying to figure out why a PHP script didn't do what it should | 13:20 | |
turns out I had forgotten a comma somewhere, but the parser didn't complain, just did the wrong thing | |||
I dropped PHP after that: faster or not, 3 days of my life I value more | 13:21 | ||
but that was about 25 years ago :-) | 13:24 | ||
13:28
RandalSchwartz joined
|
|||
Altreus | lizmat: ah, much like when you use a . instead of a , when making a hash in perl5 :D | 13:35 | |
at least that warns you about odd-sized list; unless you do it twice | |||
lizmat | well, the thing was, that it *was* a syntax error | 13:37 | |
more like TTIR in Raku | |||
if I remember correctly, it just silently dropped the line with the syntax error | 13:38 | ||
13:51
Doc_Holliwood left
13:53
Sgeo joined
14:01
ufobat left
14:09
frost left
14:14
squashable6 left
14:15
ufobat joined
14:16
squashable6 joined
|
|||
jdv | php perf has to be impressive. the amount of java-esque "modern" php that gets parsed/compiled/run on every invocation is crazy. kinda like if you did something very moose heavy and it worked well enough under cgi. | 14:18 | |
Altreus | ah but a lot of people use tricks these days, to cache stuff or simply run it like it was a proper language in the first place | 14:24 | |
jdv | a very crude sloc of $work's main codebase with deps included is ~6.5M lines of php. note that php lazy loads source files. but still avg response times are tens to hundreds of ms. | ||
14:36
Doc_Holliwood joined
15:09
m6locks left
|
|||
rassoc | can't the same be said about our object model? lotta stuff going on behind the scenes of a innocent Foo.new invocation and the like | 15:22 | |
jnthn's blog posts are really enlightening, but also quite scary | 15:23 | ||
gfldex | timo: The impact is not dramatic. source: gist.github.com/gfldex/962e83b4a0b...d30a294210 | 15:31 | |
15:48
Doc_Holliwood left
15:50
cbk joined
15:57
guifa joined
|
|||
guifa | o/ | 15:57 | |
16:04
sono joined
16:17
ufobat left
|
|||
tonyo | which one are you referring to rassoc ? | 16:19 | |
16:33
dakkar left
16:34
greyrat joined,
lucerne joined
16:39
lucerne left
16:43
lucerne joined
|
|||
rassoc | for the last 2 days i've been going through most of them chronologically, starting from 2010. for some i'm just too stupid | 16:47 | |
gfldex: slick, i like the phaser usage! | 16:54 | ||
gfldex | thank you | 17:04 | |
With RakuAST macros I believe it would be possible to print the code that is being benchmarked instead of having to resort to .WHY . | 17:06 | ||
I'm already collecting ideas. :) | |||
timo | shift the first measurement out of all the arrays in the END phaser :D | 17:07 | |
tonyo | you can just Bench .. | 17:13 | |
and get a very nice table | |||
timo | the reason to have custom code was to not pull in any outside modules for the blog post | 17:14 | |
if we're really doing benchmarking, have we all clocked down our CPUs to the lowest setting to make sure thermals and boosting don't make our measurements useless? :D | 17:19 | ||
rassoc | already running at the bare minimum because of all these intel vulnerability fixes :( | 17:22 | |
tonyo | ah, why not use telemetry? that's in core | 17:24 | |
left a comment on that gist gfldex timo showing the output on M1 | 17:25 | ||
timo | looks like you're using a rakudo version that doesn't have "next with argument" yet | 17:40 | |
that's only like two days old | |||
tonyo | i'll rebuild & repost | 17:42 | |
sena_kun | m: say (0, |(1, 2 ... *)).is-lazy | 17:43 | |
camelia | True | ||
sena_kun | m: my @a = [+] (0, |(1, 2 ... *)); say "fine" | ||
camelia | fine | ||
sena_kun | m: my @a = [\+] (0, |(1, 2 ... *)); say "hangs" | ||
17:43
evalable6 left
|
|||
camelia | (timeout) | 17:43 | |
17:44
evalable6 joined
17:46
Kaiepi left,
Kaiepi joined
|
|||
rassoc | m: my @a = [+] (0, |(1, 2 ... *)); # sena_kun | 17:49 | |
camelia | ( no output ) | ||
rassoc | arg: "Cannot .sum a lazy list" | ||
sena_kun | rassoc, thanks, I was testing the bug report. :) | 17:50 | |
tonyo | timo: is that on a branch? pulling master and rebuilding nets the same error | ||
sena_kun | github.com/rakudo/rakudo/issues/2122 <- here is it if anyone wants to bisect, it's curious... | ||
gfldex | tonyo: this is the commit in master: github.com/rakudo/rakudo/commit/25...25f1b2acf8 | 17:51 | |
17:55
Kaiepi left,
Kaiepi joined,
stoned75 left
17:57
stoned75 joined
18:03
reportable6 left
18:05
reportable6 joined
18:42
Doc_Holliwood joined
|
|||
tonyo | gfldex: timo: updated gist | 18:54 | |
18:56
RandalSchwartz left
19:08
Kaipi joined,
Kaiepi left
19:11
cbk left
19:20
abraxxa left
20:20
archenoth joined
|
|||
guifa | What's the best way to check for a warning? | 20:43 | |
lizmat | CONTROL block ? | ||
m: CONTROL { dd $_ }; warn "foo" | 20:44 | ||
camelia | CX::Warn.new(message => "foo") MoarVM panic: Trying to unwind over wrong handler |
||
lizmat | yeah that last one is a known one | ||
m: { CONTROL { dd $_ }; warn "foo" } | |||
camelia | CX::Warn.new(message => "foo") MoarVM panic: Trying to unwind over wrong handler |
||
lizmat | m: sub a() { CONTROL { dd $_ }; warn "foo" }; a | ||
camelia | CX::Warn.new(message => "foo") MoarVM panic: Trying to unwind over wrong handler |
||
lizmat | hmmm | ||
guifa | okay, I had ben getting the MoarVM panic for a bit and wasn't sure if I was doing something wrong | ||
lizmat | anyways... | ||
guifa | but it's not just me apparently lol | ||
lizmat | m: sub a() { CONTROL { dd $_; .resume }; warn "foo" }; a | ||
camelia | CX::Warn.new(message => "foo") | ||
lizmat | m: { CONTROL { dd $_; .resume }; warn "foo" } | 20:45 | |
camelia | CX::Warn.new(message => "foo") | ||
lizmat | yeah, you need the .resume | ||
guifa | actually I was able to do it okay with CONTROL { when CX::Warn { … } } and that seemed to handle things okay too | 20:46 | |
guifa . o O ( maybe that can help for tracking down the panic? ) | |||
ugly but | 20:49 | ||
m: use Test; my $warned = False; { CONTROL { when CX::Warn { $warned = True if .message eq 'foo' ; .resume } }; warn 'foo' }; ok $warned; done-testing() | |||
camelia | ok 1 - 1..1 |
||
guifa | none of dies-ok, fails-ok, and throws-like catch warnings, so it looks like that's really the only way. Maybe we should add a warns-like ? | 20:51 | |
20:56
Sgeo_ joined,
Sgeo left
|
|||
guifa | And at long last, Intl::LanguageTag finally has an update! | 21:26 | |
21:38
m6locks joined
|
|||
japhb | guifa: warns-like sounds useful to me. PR it? | 22:03 | |
guifa | japhb: I can probably toss something together tonight or tomorrow evening. | 22:04 | |
rassoc | any sexier way to write this list comprehension since we have no .repeated-combinations? [(x,y) | x <- [1..3], y <- [x..3]] | 22:33 | |
currently have: | |||
m: say gather for 1..3 -> $x { for $x..3 -> $y { take ($x, $y) }} | |||
camelia | ((1 1) (1 2) (1 3) (2 2) (2 3) (3 3)) | ||
22:38
linkable6 left,
evalable6 left
22:40
linkable6 joined,
evalable6 joined
22:43
linkable6 joined,
ilogger2_ left
22:44
ilogger2 joined
22:53
Kaipi left,
Kaipi joined,
Sgeo joined,
Sgeo_ left
|
|||
[Coke] | m: given <1 2 3> { |($_ Z $_), |$_.combinations(2) } | 23:15 | |
camelia | ( no output ) | ||
[Coke] | m: say given <1 2 3> { |($_ Z $_), |$_.combinations(2) } | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Unsupported use of bare "say". In Raku please use: .say if you meant to call it as a method on $_, or use an explicit invocant or argument, or use &say to refer to the function as a noun. at <tmp… |
||
[Coke] | m: dd given <1 2 3> { |($_ Z $_), |$_.combinations(2) } | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Unexpected block in infix position (missing statement control word before the expression?) at <tmp>:1 ------> 3dd given <1 2 3>7⏏5 { |($_ Z $_), |$_.combinations(2) } expecting any of:… |
||
[Coke] | . o O (as I try to remember why that works in the REPL...) | 23:16 | |
m: say do given <1 2 3> { |($_ Z $_), |$_.combinations(2) } | |||
camelia | ((1 1) (2 2) (3 3) (1 2) (1 3) (2 3)) | ||
[Coke] | arguably shorter but even less clear. | 23:17 | |
rassoc | feels a bit more cryptic, but thanks for taking a look | 23:24 | |
went through blog.lojic.com/2020/12/26/comprehe...julia.html and the above is the only thing that's truly uglier than "idiomatic" raku | 23:25 | ||
than the provided comprehensions compared to "idiomatic" raku* | 23:26 | ||
[Coke] | m: my \a = (1,2,3); dd (a X a).grep({$_[1]>=$_[0]}) | 23:31 | |
camelia | ((1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)).Seq | ||
[Coke] | (without the grep, you'd also get, e.g. (3 1) | 23:32 | |
rassoc | clever! | 23:33 | |
[Coke] | I think the gather/take is still very easy to read. :) | 23:34 | |
afk | |||
japhb | m: my \a = (1,2,3); dd (a X a).grep({[<=] @$_}) | 23:35 | |
camelia | ((1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)).Seq | ||
rassoc | @$_, whoa, first time seeing this | 23:36 | |
japhb | rassoc: just treating $_ as a Positional | 23:38 | |
23:41
kjp left
|
|||
rassoc | yeah, figured, just never stumbled upon that. good to know, thanks! | 23:42 | |
guess i'll go with (a X a).grep: { .head <= .tail } for now. feels clean | |||
guifa | you can also just use @_ too | 23:45 | |
m: my \a = (1,2,3); dd (a X a).grep({[<=] @_}) | |||
camelia | (((1, 1),), ((1, 2),), ((1, 3),), ((2, 2),), ((2, 3),), ((3, 3),)).Seq | ||
guifa | hmm | ||
lucs | 23:47 | ||
Er, camelia still not set up to respond to PM? | 23:48 | ||
23:52
Doc_Holliwould joined
23:54
Doc_Holliwood left
|
|||
moon-child still thinks the apl solutions are prettiest of all, barring the one involving double-ended ranges | 23:58 | ||
especially the ones where you can use 'where' |