🦋 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 00:01 reportable6 joined 01:01 tellable6 left, quotable6 left, nativecallable6 left, shareable6 left, statisfiable6 left, linkable6 left, committable6 left, squashable6 left, sourceable6 left, coverable6 left, releasable6 left, benchable6 left, evalable6 left, unicodable6 left, bisectable6 left, greppable6 left, reportable6 left, notable6 left, bloatable6 left 01:02 unicodable6 joined, bloatable6 joined, bigtestaccount[m joined, squashable6 joined, quotable6 joined, coverable6 joined 01:03 releasable6 joined, shareable6 joined, committable6 joined, benchable6 joined, tellable6 joined, notable6 joined, sourceable6 joined, linkable6 joined 01:04 bisectable6 joined, xinming_ left, greppable6 joined, nativecallable6 joined, reportable6 joined, statisfiable6 joined, evalable6 joined 01:06 xinming_ joined
[Coke] anyone able to use Raku's OpenSSL on an m1/m2 mac? 01:19
01:46 jpn joined 02:05 TieUpYourCamel left 02:09 Nemokosch joined
guifa_ Nemokosch: not yet but I'm working on a project that will allow it 02:09
02:09 Nemokosch left 02:15 codesections left, codesections joined 02:17 TieUpYourCamel joined 02:21 rf left
tbrowder .ask El_Che what is the proper way for root to install zef in the /opt/rakudo-pkg directory structure? 02:29
tellable6 tbrowder, I'll pass your message to El_Che
02:31 Homer_Simpson left 03:02 jpn left 03:28 jpn joined 03:35 razetime joined, razetime left 03:40 rf joined 03:42 jpn left 04:00 jpn joined
rf I'm reading some JSON as a blob, when I go to decode to UTF-8 I'm losing the last character ie: '}', I know why this is happening, but not sure how to get around this? 04:02
04:05 jpn left
rf I got it, somehow I was skipping a byte earlier so it broke it. 04:15
04:15 rf left 04:16 razetime joined 04:27 razetime left, razetime1 joined 04:29 razetime1 is now known as razetime 05:00 jpn joined 05:05 jpn left, dogbert11 joined 05:08 dogbert17 left 05:29 squashable6 left 05:31 squashable6 joined 05:45 dogbert11 left 05:46 razetime left, dogbert11 joined 05:47 dogbert17 joined 05:51 dogbert11 left 05:54 dogbert17 left 05:58 jpn joined 06:00 reportable6 left, reportable6 joined 06:03 dogbert17 joined, jpn left 06:25 Xliff joined 06:30 dogbert11 joined 06:34 dogbert17 left, tejr joined 06:45 dogbert11 left 06:46 dogbert11 joined 06:59 jpn joined, dogbert11 left, dogbert11 joined 07:03 oodani_ left 07:04 oodani joined, jpn left 07:06 dogbert11 left 07:09 dogbert11 joined 07:14 epony joined 07:15 dogbert17 joined 07:19 dogbert11 left 07:21 dogbert17 left 07:22 dogbert17 joined 07:29 abraxxa joined 07:30 jpn joined 07:39 abraxxa left 07:40 abraxxa joined, jpn left 07:46 sena_kun joined 07:51 jpn joined
Xliff WEEKLY, gist.github.com/Xliff/b4741a42ab83...f3e9b79528 07:54
weekly, gist.github.com/Xliff/b4741a42ab83...f3e9b79528
07:54 Sgeo left
Xliff lizmat: For inclusion in the weekly -- gist.github.com/Xliff/b4741a42ab83...f3e9b79528 07:54
07:55 Xliff left 07:56 jpn left
jaguart are there any coverage / usage tools - e.g. where-is-this-method/sub used? 08:09
08:20 jpn joined 08:25 jpn left 08:40 abraxxa left 08:49 xinming_ left, xinming_ joined, lichtkind joined 08:52 dakkar joined 08:53 abraxxa joined
jaguart looking for advice. I have a class with a core attribute, and lots of multi-subs used by methods to handle the differences for multiple types. 08:56
eg: class C { has $.x; method ama { x($!x) }; multi sub x (Str:D $y) { say 'Str' }; multi sub x (Int:D $i) { say 'Int' }}; 08:57
..: my $c = C.new(:x('a')); $c.ama --> Str
..: my $d = C.new(:x(4)); $c.ama --> Int
rather than have the multi subs evaluated a lot, I want to break the class into smaller things, and return a specialist subclass for each .new (ala Factory) 08:59
but I cannot access the core private value from these subclasses or roles without a self.x
trust is for private methods
so what pattern should I use? 09:00
09:00 MitarashiDango[m left, jpn joined
nine What's the problem with self.x? 09:00
09:00 MitarashiDango[m joined, MitarashiDango[m left, razetime joined
jaguart its a method call - I assume much slower than accessing $!x 09:00
nine Ah, so that's your problem. You assume without knowing :) 09:01
jaguart ok - I'll test that - I'm pretty sure I read about the performance hit on this in the docs 09:02
09:05 jpn left
nine Accessors are typically inlined into hot code and then optimize to just the nqp::getattr op that accessing the attribute directly would generate (or actually to one of the sp_p6oget_* ops) 09:05
jaguart ok - I guess that's a pretty low hanging optimisation - so you recommend Factory + Subclass + self.x 09:06
nine yes 09:07
jaguart thank you :)
09:14 abraxxa left 09:15 abraxxa joined 09:39 jpn joined 09:40 sena_kun left 09:42 sena_kun joined 09:52 sena_kun left 10:49 jpn left 10:52 jpn joined 11:11 ab5tract joined
tbrowder .ask ugexe what is the recipe for installing zef in the rakudo installation directories for use by all raku users on the same host? 11:49
tellable6 tbrowder, I'll pass your message to ugexe
11:54 Shaeto joined 11:55 Shaeto left 12:00 reportable6 left 12:01 reportable6 joined 12:05 Shaeto joined 12:07 Shaeto left 12:08 Shaeto joined, Shaeto left 12:09 Shaeto joined, Shaeto left
tbrowder and i hope we get to see zef bundled and maintained with rakudo while i'm still able to dress myself :) 12:09
12:11 Shaeto joined 12:14 Shaeto left, Shaeto joined 12:15 Shaeto left, Shaeto joined 12:17 Shaeto left 12:22 Shaeto joined
El_Che tbrowder: # export PATH=$PATH:/opt/rakudo-pkg/bin/; /opt/rakudo-pkg/var/zef/bin/zef install ... 12:27
tellable6 2023-01-23T02:29:23Z #raku <tbrowder> El_Che what is the proper way for root to install zef in the /opt/rakudo-pkg directory structure?
El_Che that's the globally installed zef if you dont want ~/.raku 12:28
(including /root/.raku)
12:34 jpn left, Shaeto left 12:35 Shaeto joined 12:36 Shaeto left, Shaeto joined 12:39 Shaeto left, Shaeto joined 12:52 Abhoerschutz left 12:53 Abhoerschutz joined 12:57 jpn joined 12:58 Kernspin left
ab5tract is it possible to get a list of classes that belong to a given hierarchy? example: I'd like to generate subs that map to .new on classes in Example namespace such that `foo()` maps to `Example::Foo.new()` 13:02
preferably without EVAL
Nemokosch what does "maps to" mean here? 13:03
tbrowder El_Che: thanks! yes, at the moment i don’t see a need for root to have its own modules, but that might change. in that case i guess a separate installation script (in raku, of course) can help “do the right thing” 13:10
ab5tract I mean binding declaring a sub that calls the constructor with the same args passsed to the sub 13:14
actually, s/binding// 13:15
in other words, I'm looking for a way to enumerate the list of packages currently loaded under a given namespace 13:19
I'm guessing this just isn't possible
Nemokosch I understand that there are subs that call the constructor with the same arguments - but what does this have to do with "packages currently loaded under a given namespace"? 13:25
Voldenet m: package Example { package Bar { class Tar {} }; class Foo { }; }; for Example::<>:kv -> $name, $value { say ($name, $value, $value.HOW) } 13:32
camelia (Foo (Foo) Perl6::Metamodel::ClassHOW.new)
(Bar (Bar) Perl6::Metamodel::PackageHOW.new)
Nemokosch is the <> only needed to allow for :kv? 13:34
ab5tract Voldenet: thanks, I just found that! 13:35
Voldenet the <> is needed to get a stash out of it
Nemokosch then what would Example:: be? 13:37
Voldenet …huh, apparently it's the same 13:38
m: package Example { package Bar { class Tar {} }; class Foo { }; }; for Example::.kv -> $name, $value { say $name, $value.HOW } 13:40
camelia BarPerl6::Metamodel::PackageHOW.new
Nemokosch yes, this is what I learned at least 13:41
:: is a shorthand for .WHO
13:58 linkable6 left, evalable6 left, evalable6 joined 14:00 linkable6 joined, Xliff joined
Geth Raku-Steering-Council/main: d1c681acf0 | (Daniel Sockwell)++ (committed using GitHub Web editor) | 3 files
Announcement of JJ's resignation (#55)

This commit adds an announcement stating that JJ is steeping down from the RSC/CAT due to a lack of time. It also removes JJ from the membership list for both groups.
14:27 razetime left 14:28 rf joined
lizmat And yet another Rakudo Weekly News hits the Net: rakudoweekly.blog/2023/01/23/2023-...nk-you-jj/ 15:06
15:12 epony left 15:13 epony joined, linkable6 left, linkable6 joined 15:15 Sgeo joined 15:16 linkable6 left, jmcgnh left 15:18 Geth left, Geth joined, linkable6 joined 15:22 Geth left, Geth joined 15:24 linkable6 left, linkable6 joined 15:28 jgaz joined 15:46 archenoth joined 16:20 NemokoschKiwi joined
NemokoschKiwi Link test, straight from the weeklies www.reddit.com/r/rakulang/comments..._possible/ 16:20
and another clickbait test hits the butterfly rakudoweekly.blog/2023/01/23/2023-...nk-you-jj/ 16:24
Nemokosch No joy so far 16:25
ab5tract lizmat++
NemokoschKiwi and another good news post hits the test connectified.com/@masukomi/109711363459069873 16:30
Nemokosch and this brought victory
16:34 NemokoschKiwi left
ab5tract BTW, replit.com has Raku support. You can also install packages via `zef`. Just thought I'd share in case others were unaware :) 16:44
16:55 abraxxa left 16:56 bob52 joined 16:57 jgaz left 16:58 bob52 left
tonyo . 17:09
17:11 jgaz joined
rf I've been working on a new HTTP server for Humming-Bird, github.com/rawleyfowler/Humming-Bird/pull/29, it's quite a bit of code and I'd like to get some more eyes on it. Sorry if this is the wrong place to ask for code-review 17:13
lizmat rf: you can always try :-) 17:23
our constant $VERSION = '1.1.4'; feels like a Perlism, why do you need that ? 17:24
no other obvious things on a quick glance 17:26
Voldenet rf: nice avatar, I like it - in timeout method you might consider not using `sleep 1` but `await Promise.in(1)` 17:32
`sleep 1` will use os-level mechanisms for threading, promises will use scheduler's capabilities skipping OS 17:33
m: await (^100).map({ start { sleep 1; } }); say now - BEGIN now
camelia MoarVM panic: Memory allocation failed; could not allocate 393216 bytes
Voldenet m: await (^50).map({ start { sleep 1; } }); say now - BEGIN now 17:34
camelia MoarVM panic: Memory allocation failed; could not allocate 393216 bytes
Voldenet m: await (^20).map({ start { sleep 1; } }); say now - BEGIN now
lizmat wow
camelia 1.244091812
Voldenet m: await (^20).map({ start { await Promise.in(1); } }); say now - BEGIN now
camelia 1.041887402
Voldenet that's quite a difference
17:36 dakkar left
rf Hmm 17:44
Nemokosch Just noticed that there aren't even many good (maintained, at least) options for web servers 17:45
Voldenet rf: also, i'm not entirely sure, but what happens if you provide `content-length-whatever` as a header? The starts-with looks like a risky choice for headers 17:46
Nemokosch ?@header-lines.elems is equivalent to ?@header-lines, isn't it 17:47
Voldenet yes 17:48
Nemokosch as a non-functional remark: $header.chomp.lc could probably use some DRY 17:50
Voldenet …could use some magical regex, which in theory could be more easily optimized
rf Yeah I want to replace most of the naive checks with regex, that's on my list. 17:53
Nemokosch yeah but don't forget that we happen to know the practice which is quite far from this theory... 17:54
17:57 ab5tract left
Voldenet "in theory" was thrown in deliberately ;) 17:57
I'm not sure if parsing headers with regex is a good idea, because processing headers isn't always cpu-bound 17:58
it is in most benchmarks… :)
tonyo m: use Bench;
camelia ===SORRY!=== Error while compiling <tmp>
Could not find Bench in:
17:59 Homer_Simpson joined
Homer_Simpson help 17:59
Voldenet throws an anchor
Nemokosch yes, just wanted to emphasize it
18:00 reportable6 left
that "in theory" doesn't mean "we don't know if that happens"; it means "we pretty much know it doesn't happen, although it could" 18:00
Homer_Simpson in comma how do I make it so ctrl+shift+2 adds " " around a selection and ctrl+' adds ' ' around a selection 18:01
tonyo the regex would take a lot of optimizing to be faster than chomp.lc 18:03
18:03 reportable6 joined
Voldenet in the end, .chomp and .lc would usually allocate something 18:03
Homer_Simpson raku needs to compile to asm and oop should be optional 18:04
Voldenet and regex could operate on the bytes
Homer_Simpson if raku compiled to asm you can have compiler optimisations, you can have cross platform code, and you can make everything faster by not just relying on piles of methods/routines for modules especially, and you can compile to windows binaries 18:06
like what if a raku module has some bug in it 18:08
I cant see it because you can only view the routine/methods signature on the web, not the exact source code of it 18:09
Voldenet jit compiling allows runtime to optimize as it gathers more info about types 18:10
Homer_Simpson even if you could there would probably be more methods/routines that end up being opaque, that's why we need operators, and inline ASM
18:10 jpn left 18:12 jpn joined
Homer_Simpson yes, the compiler can still generate byte code using a flag 18:12
Voldenet you can cheat by just running C/C++ from your raku code
using nativecall
Homer_Simpson anyhow where can I ask about the comma IDE 18:13
visual studio is probably better but its HEAVY 18:14
18:14 pleasantpheasant left
Voldenet comma is an intellij plugin iirc (not sure what relation to it standalone comma has), maybe intellij people would help 18:16
tonyo Homer_Simpson: you can see the internals of rakudo in the source and in the virtual machine in the moar repo (both downloadable) 18:18
regex is much slower, especially for parsing http headers
Timing 500000 iterations of chomplc, regex...
chomplc: 4.712 wallclock secs (4.061 usr 0.740 sys 4.802 cpu) @ 106111.086/s (n=500000) 18:19
regex: 8.086 wallclock secs (7.338 usr 0.785 sys 8.123 cpu) @ 61833.673/s (n=500000)
Nemokosch so it's about half the speed? trynna read this 18:20
Xliff Is there a way to run a piece of code through the raku Parser? 18:21
rf Hmm tony that is interesting
tonyo yea, i'll put full output of another run and add `str.lc ~~ `, one sec
pastebin.com/V8FAxxUC 18:22
Voldenet I agree that currently regexes leave a lot to be desired, but in the future I'm sure they'll keep becoming faster
tonyo Xliff: the raku grammar is available to you at run time
Voldenet while chomp and lc may not get substantially faster
tonyo let me check it in perl, i still think chomp.lc would be faster (and nqp even more so) 18:23
18:23 Shaeto left 18:24 Shaeto joined
Nemokosch what does 1781% and the likes signify there? 18:28
18:29 jpn left 18:31 jpn joined
Homer_Simpson k I sort of got it working 18:35
shift+2 stringizes the current selection, just ' literal stringizes the current selectiion 18:36
' ' are not consts right 18:37
" " are definetley not consts
" " and ' ' are both literals
yeah comma is still a good IDE 18:40
18:41 notna joined
Homer_Simpson oh fuck now I cant type @ 18:42
only '
fixed :) 18:46
tonyo 1781% is a ratio of times, Bench is a direct port of Benchmark from p5 18:50
Homer_Simpson why is raku printing one space in my text file as 3 spaces in the console 18:52
rf I refactored the header stuff, thanks folks for the feedback :D 18:54
Voldenet tonyo: 18:56
you sure 1781% is right?
shouldn't it be 69.37%?
Nemokosch ^^ 18:57
Homer_Simpson i.imgur.com/ZE8lYqx_d.webp?maxwidt...lity=grand 18:58
rf Commas add a space between 19:05
Try: say "value of myarray[i][] is: { @myarray[$i][] }";
Homer_Simpson the file has no commas 19:08
rf m: print("Commas", "spaced")
camelia Commasspaced
rf Hmm, not sure then. Does my example work? 19:09
Homer_Simpson no it still prints 3 spaces
rf m: my @a = ["a", "b", "c"]; say "value of a[i][] is { @a[0][] }";
camelia value of a[i][] is a
Homer_Simpson my $fp = open "data.ldr", :r;
my @myarray = $fp.IO.lines.map(*.comb.List); #convert all those methods to routines!
rf Try just *.comb instead of .List 19:10
.List isn't needed.
Homer_Simpson no difference 19:11
ords returns 49 32 32 32 54 19:12
so yes, its 3 spaces
rf Then your file must be borked 19:13
Homer_Simpson nope 19:15
maybe I shanged a setting in comma
changed* 19:16
I probably did
nope I reset my settings it still does it 19:21
19:34 jpn left 19:36 jpn joined
tonyo the regex in p5 is significantly faster 19:40
(sorry, was in a meeting), the 1781 takes into account the number of iterations too, it was some weird calculation when i looked at it, i don't recall what it was measuring exactly - this was ~10 years ago now 19:41
($.wallclock / $.iterations) - ($.ref ?? $.ref.wallclock / $.ref.iterations !! 0); 19:43
19:48 Xliff left
tonyo that could probably be cleaned up to be coherent, though 19:49
that could probably be cleaned up to be coherent, though 19:50
19:58 jpn left 20:02 Shaeto left 20:03 jpn joined 20:07 jpn left 20:19 notna left 20:22 jpn joined 20:28 thundergnat joined
rf tonyo: Is that because Perl5 "compiles" it's regexes? 20:28
tonyo i haven't banged around in moar in so long it'd be difficult for me to guess 20:29
rf Interesting, thanks for these stats.
tonyo it's nearly 2x faster with the regex in p5, though 20:30
thundergnat lizmat: I believe the algorithm Ovid was reffing to (in the weekly) was from colabti.org/irclogger/irclogger_lo...02-09#l322 20:31
Possibly also relevant as it is based on the same code: rosettacode.org/wiki/Pathological_...t_problems
s/reffing/referring/ 20:32
20:32 frankmng joined 20:33 frankmng left 20:43 fnaufel joined 20:44 oodani left, codesections left, discord-raku-bot left, leah2 left, buffet left, sarna left, xkr47 left, kybr left, pjlsergeant left, corwin left, xkr47_ joined, discord-raku-bot joined, xkr47_ is now known as xkr47, kybr joined, oodani_ joined, pjlsergeant_ joined, codesections1 joined, leah2 joined 20:45 sarna joined, fnaufel left
Homer_Simpson net split yo 20:45
20:45 mplsCorwin joined, mplsCorwin left, mplsCorwin joined 20:46 buffet joined, codesections1 is now known as codesections 20:47 jpn left, jpn joined 20:49 mplsCorwin is now known as corwin
Geth doc/main: 6995ffe846 | (Joelle Maslak)++ (committed using GitHub Web editor) | doc/Type/Test.pod6
throws-like does not work correctly a string for the exception name (#4185)
20:53 jpn left 20:58 leah2 left 20:59 leah2 joined 21:08 cfa joined
cfa afternoon all 21:10
tellable6 2019-11-04T19:24:00Z #raku-dev <jmerelo> .tell cfa it's done by hand for the time being. Automatic deployment is yet to come...
Nemokosch wow
cfa okay, so it's been a little while
21:13 [Coke] left
Nemokosch what's up? 😂 21:15
cfa libera, apparently :) 21:16
Nemokosch what brought you back here? 😛 21:17
21:19 jpn joined
cfa i've been writing in raku again after a bit of a hiatus 21:20
also i was lazy and hadn't re-registered following the move away from freenode
21:24 jpn left
Nemokosch well, welcome aboard 21:32
cfa thanks :) 21:34
21:36 jpn joined
cfa what encouraged me to finally (re)register was the following surprising behaviour; i was hoping someone could clarify what exactly is going on: 21:40
m: my %h1 = <foo bar>.Set; say %(%h1, :baz) # behaves as expected
camelia {bar => True, baz => True, foo => True}
cfa m: my %h1 = <foo bar>.Set; my %h2 = %h1, :baz; say %h2 # as does this
camelia {bar => True, baz => True, foo => True}
cfa m: my %h3 = <foo bar>.Set.Hash; say %(%h3, :baz) # ...and this
camelia {bar => True, baz => True, foo => True}
cfa m: my %h4 = <foo bar>.Set.Hash, :baz; say %h4 # whoops!
camelia {Str|bar => bar => True, Str|foo => foo => True, baz => True}
cfa i expected that last case to behave similarly to:
m: my %h5 = :foo, :bar; my %h6 = %h5, :baz; say %h6
camelia {bar => True, baz => True, foo => True}
cfa which is why i'm calling this out. it seems that `<foo bar>.Set.Hash` returns a `Hash[Any,Any]`, so this is therefore similarly surprising:
m: my %h7 is Hash[Any, Any] = <foo bar>.Set.Hash; say %(%h7, :baz) 21:41
camelia {Str|bar => bar => True, Str|foo => foo => True, baz => True}
cfa sorry for the noise from those examples. (also, i realise i could do something like `|<foo bar>.Set, :baz` but i'm curious to know what the source of the above behaviour is) 21:42
final curiosity: 21:44
m: say %(<foo bar>.Set.Hash, :baz); say hash(<foo bar>.Set.Hash, :baz)
camelia {Str|bar => bar => True, Str|foo => foo => True, baz => True}
{bar => True, baz => True, foo => True}
cfa so in the case of %() and those assignments, the paramterisation of the hash seems to be significant... but not for the hash sub 21:46
Nemokosch h3 vs h4 is really interesting 21:49
I have an idea 21:51
I think this is a "single argument rule" situation 21:52
when you have a .Hash on the right handside as the only thing, you have no further nesting, it's just stored as it is, as a simple Hash
however, when the .Hash appears next to some additional thing, the assignment won't flatten the structure (?) 21:55
this assignment is backed up by the STORE method of a Hash, that's something I'm quite sure of 21:56
while I think %(...) does the same thing as (...).hash
cfa yeah, the hash() case seems orthogonal to the other issue, afaict. or at least, it was an additional surprise. 21:59
m: say hash(<foo bar>.Set.Hash, :baz); say %(<foo bar>.Set.Hash, :baz); say (<foo bar>.Set.Hash, :baz).hash
camelia {bar => True, baz => True, foo => True}
{Str|bar => bar => True, Str|foo => foo => True, baz => True}
{Str|bar => bar => True, Str|foo => foo => True, baz => True}
Nemokosch oh there is a hash subroutine as well? that one I didn't know 22:00
cfa ignoring sets entirely:
m: my %h1 is Hash[Any, Any] = :foo, :bar; my %h2 = :foo, :bar; say %(%h1, :baz); say %(%h2, :baz);
camelia {Str|bar => bar => True, Str|foo => foo => True, baz => True}
{bar => True, baz => True, foo => True}
cfa it seems to be the parameterisation that's causing the difference -- and since .Hash on a Set gives me a parameterised hash...
(sorry, i probably should've given this more minimal case in the first place) 22:01
Nemokosch even the name is reported in a weird way in the first case 22:02
lemme join the IRC
22:02 NemokoschKiwi joined
NemokoschKiwi m: my %h1 is Hash[Any, Any] = :foo, :bar;  dd %h1; 22:02
camelia (my Any %{Any} = :bar(Bool::True), :foo(Bool::True))
NemokoschKiwi my Any %{Any} ? :D 22:03
m: my %h2 = :foo, :bar; dd %h2;
camelia Hash %h2 = {:bar(Bool::True), :foo(Bool::True)}
NemokoschKiwi %h1.VAR.name is downright empty 22:04
cfa huh 22:06
NemokoschKiwi we don't even need :baz
 %(%h1,) will do
cfa nods
NemokoschKiwi let's see what call is made 22:07
I don't know if you remember CoreHackers::Sourcery :P 22:08
cfa not ringing a bell
NemokoschKiwi it's a simple and straightforward tool to locate core calls in the rakudo repo 22:09
cfa neat
NemokoschKiwi github.com/rakudo/rakudo/blob/704a...ny.pm6#L77 this code snippet didn't help a lot 22:10
let's go the STORE way, then
cfa bisectable6: my %h1 is Hash[Any, Any] = :foo, :bar; dd %(%h1,)
bisectable6 cfa, Will bisect the whole range automagically because no endpoints were provided, hang tight
NemokoschKiwi also a really good idea ^^ 22:11
bisectable6 cfa, Output on all releases: gist.github.com/f4ce24e36a22208eeb...fe3ca06f29
cfa, Bisecting by output (old=2021.12 new=2022.02) because on both starting points the exit code is 0
NemokoschKiwi looks like it never worked well? 22:12
bisectable6 cfa, bisect log: gist.github.com/71696c09df4439b204...f064cada58
cfa, (2022-01-02) github.com/rakudo/rakudo/commit/49...0503e2d3e2
cfa, Bisecting by exit code (old=2020.05.1 new=2020.06). Old exit code: 1
cfa only valid from 2020.06 because of the `is` but yeah
bisectable6: my %h1{Any} = :foo, :bar; dd %(%h1,)
bisectable6 cfa, Will bisect the whole range automagically because no endpoints were provided, hang tight
cfa, bisect log: gist.github.com/b32fcdea1a005aa89c...7d21375cde
cfa, (2020-05-12) github.com/rakudo/rakudo/commit/de...5ff3690813
cfa, Bisecting by output (old=2018.12 new=2019.03.1) because on both starting points the exit code is 1
NemokoschKiwi can reproduce with my %dummy and %dummy.STORE: (%h1,)
that's good for a start...
bisectable6 cfa, bisect log: gist.github.com/dd382f4cfc37395181...8e458f527d 22:13
cfa, Bisecting by output (old=2018.06 new=2018.08) because on both starting points the exit code is 1
cfa, Output on all releases: gist.github.com/da3c613a5548c7e4ea...31daa43760
cfa, Bisecting by output (old=2021.12 new=2022.02) because on both starting points the exit code is 0
cfa okay this is useful: gist.github.com/Whateverable/da3c6...31daa43760
2016.07.1 introduced the change
NemokoschKiwi nice
by the way, STORE is creepy nqp github.com/rakudo/rakudo/blob/704a...sh.pm6#L74 22:14
cfa :)
bisectable6 cfa, bisect log: gist.github.com/b70466f2a0c7b675d1...d36b8093c0
cfa, (2018-07-19) github.com/rakudo/rakudo/commit/e9...c636fb166a
NemokoschKiwi that's a long time ago!
22:15 bisectable6 left
NemokoschKiwi does it have a corresponding commit? 22:15
poor one...
cfa whoops, did i just kill off bisectable6?
NemokoschKiwi hopefully it just timed out a bit, lol
22:15 bisectable6 joined
cfa whistles innocently 22:15
NemokoschKiwi anyway, did you get a bisected commit by any chance? 22:16
cfa not seeing it yet
the logs above were for the Hash[Any, Any] case, i think 22:17
might have to request a bisect on %h1{Any} = :foo, :bar again
bisectable6: my %h1{Any} = :foo, :bar; dd %(%h1,)
bisectable6 cfa, Will bisect the whole range automagically because no endpoints were provided, hang tight
cfa, Output on all releases: gist.github.com/e96da0c3cc2855f774...55477522e1 22:18
cfa, Bisecting by output (old=2021.12 new=2022.02) because on both starting points the exit code is 0
cfa, bisect log: gist.github.com/7ee22e3a73c00d82f5...bafce9a066 22:19
cfa, (2022-01-02) github.com/rakudo/rakudo/commit/49...0503e2d3e2
cfa, Bisecting by output (old=2020.02.1 new=2020.05.1) because on both starting points the exit code is 0
cfa, bisect log: gist.github.com/de5910fbfd577c4e34...85a953e7ad
cfa, (2020-03-20) github.com/rakudo/rakudo/commit/35...72e32b8a0d
cfa, Bisecting by output (old=2019.11 new=2020.01) because on both starting points the exit code is 0
NemokoschKiwi so close... 22:20
bisectable6 cfa, bisect log: gist.github.com/4981a43f94c2953046...2adcc68a66
cfa, (2020-01-06) github.com/rakudo/rakudo/commit/08...0c9087c687
cfa, Bisecting by output (old=2016.06 new=2016.07.1) because on both starting points the exit code is 0
cfa sorry for the noise
bisectable6 cfa, bisect log: gist.github.com/83607b0e8760cf60f1...4cf9ef2529
cfa, (2016-07-03) github.com/rakudo/rakudo/commit/ec...95db11dfed
cfa, ⚠ New output detected, please review the results manually
cfa, Output on all releases and bisected commits: gist.github.com/a8837f95fc8ec8d8cc...3c088900de
cfa NemokoschKiwi: gist.github.com/Whateverable/83607...4cf9ef2529
ecfb956bcf92488106a85f9462731095db11dfed ? 22:21
NemokoschKiwi bravo 😋 22:22
22:25 jpn left
NemokoschKiwi I think I have the line 22:26
m: use nqp; my %h1{Any} = :foo, :bar; say nqp::getattr(%h1, Map, '$!storage') 22:27
camelia {Str|bar => bar => True, Str|foo => foo => True}
NemokoschKiwi in !STORE_MAP at the time of the first appearance 22:28
sadly this seems to be a lower-level error 22:29
cfa ouch
NemokoschKiwi we'd need to know the anatomy of a Hash 22:31
or a Map, for that matter
perhaps $!storage is not sufficient in itself to recreate the hash/map 22:32
there is also a $!descriptor 22:33
cfa hmm, what would be responsible for mapping 'bar' to 'Str|bar'?
NemokoschKiwi maybe it would be good to trace something that DOES work about %h1 because at this point that's more surprising, probably there's something we miss 22:35
cfa nods 22:38
informally, it seems like the pair key is being stringified and prefixed with its type
22:42 ProperNoun left
NemokoschKiwi the very same instance is used for the .keys and .values methods, and it works... 22:46
cfa hmm 22:48
again informal, but this seems to be what we're seeing in the output:
m: %(:foo, :bar).map({.key.WHICH => $_}).say
camelia (Str|foo => foo => True Str|bar => bar => True)
cfa (not sure what else would prefix 'Str|' though) 22:49
ugexe m: my %h1{Any} = :foo, :bar, 1 => "a"; say DUMP %h1
camelia Hash[Any,Any]<1>(
tellable6 2023-01-23T11:49:07Z #raku <tbrowder> ugexe what is the recipe for installing zef in the rakudo installation directories for use by all raku users on the same host?
jaguart tbrowder: if using rakudo-pkg then github.com/nxadm/rakudo-pkg/blob/m...ocs/zef.md 22:52
ugexe for all users on the same host you would need a rakudo that is installed in a location that all users can access. then install zef with the --install-to=site option (which is the default), and set the PATH as appropriate per user 22:54
in other words: if a root user installs rakudo and then installs zef, all other users should be able to access those things if their PATH is setup to point at their respective bin directories 22:56
NemokoschKiwi the underlying BOOTHash seems to be wrong. I don't know how it's supposed to work exactly but it is still a Hash - a Hash that can be indexed and all
m: use nqp; my %h1{Any} = :foo, :bar; my $bh := nqp::getattr(%h1, Map, '$!storage'); say $bh<foo>; say $bh<Str|foo>; 22:57
camelia (Any)
foo => True
22:57 thundergnat left
NemokoschKiwi I don't think it's to be expected that it's indexed with the WHICH of the key 22:58
jaguart oh - the butterfly lives again?!
NemokoschKiwi jaguart: which one? :P
ugexe why isnt it expected?
jaguart m: 'alive'.say
ugexe i agree seeing the output ya'll are posting doesnt appear to make sense
NemokoschKiwi I didn't phrase it right but I was about to elaborate 22:59
ugexe but using .WHICH on it would be to differentiate e.g. StrInt 1 from Int 1 or some such i imagine
NemokoschKiwi some hash-key value format needs to be obtained. For Any, it makes sense that this would be WHICH
but the data that went in wasn't "just" Any, it was an Str instance 23:00
and this seems to be something that got lost
ugexe typing a hash makes that happen i believe
otherwise it just stringifies the indexes? i dunno if thats true it just feels like something i remember 23:01
NemokoschKiwi this seems something to be fixed but which way? Keep the BOOTHash content and compensate for it while creating a usual Hash? Or make the BOOTHash itself more intuitive? 23:02
apparently BOOTHash is "smarter" than this behavior most of the time, i.e without type parameters 23:03
anyway, retreating to discord now 23:05
23:05 NemokoschKiwi left
jaguart I've seen .WHICH is used for lots of compares and lookups - so 'Str|Something' is the same as 'Str|Something' whereas 'Foo:U123456' is not the same as 'Foo:U561029' - two different instances etc. 23:07
Nemokosch this bug is gladly yours I think 23:16
cfa Nemokosch, thanks for looking into this
23:21 jpn joined
Nemokosch it would be worth a rakudo issue with all these findings, to be honest... 23:25
23:26 jpn left