🦋 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:01 linkable6 joined, evalable6 joined 00:07 reportable6 left, reportable6 joined 00:55 Sankalp left 00:56 Sankalp joined 01:04 clarjon1 joined 01:09 Khwarizmi joined
Khwarizmi Is anyone available to answer a few beginner questions? #raku-beginner seems dead 01:34
01:42 Khwarizmi left 01:58 p6steve left 02:00 p6steve joined 03:00 coverable6 left, quotable6 left, bloatable6 left, sourceable6 left, greppable6 left, linkable6 left, tellable6 left, committable6 left, statisfiable6 left, releasable6 left, unicodable6 left, reportable6 left, benchable6 left, shareable6 left, notable6 left, nativecallable6 left, evalable6 left, bisectable6 left 03:01 quotable6 joined, reportable6 joined, bisectable6 joined, sourceable6 joined, coverable6 joined, evalable6 joined 03:02 nativecallable6 joined, tellable6 joined, statisfiable6 joined, linkable6 joined, releasable6 joined, greppable6 joined, benchable6 joined, notable6 joined, bloatable6 joined 03:03 committable6 joined, shareable6 joined 03:04 unicodable6 joined 03:15 deoac joined, deoac left, deoac joined 03:16 deoac left 03:19 deoac joined 03:20 deoac26 joined, deoac left 03:26 andinus left 04:00 deoac26 left 04:35 [Coke] left 05:35 quotable6 left, bloatable6 left, sourceable6 left, statisfiable6 left, notable6 left, evalable6 left, unicodable6 left, reportable6 left, bisectable6 left 05:36 linkable6 left, benchable6 left, greppable6 left, nativecallable6 left, tellable6 left, shareable6 left, coverable6 left, committable6 left, releasable6 left, [Coke] joined, notable6 joined, releasable6 joined, unicodable6 joined, quotable6 joined, bloatable6 joined, sourceable6 joined, shareable6 joined 05:37 greppable6 joined 05:38 bisectable6 joined, evalable6 joined, reportable6 joined, linkable6 joined, benchable6 joined, committable6 joined, coverable6 joined, nativecallable6 joined 05:39 tellable6 joined, statisfiable6 joined 05:58 frost joined 06:07 reportable6 left 06:10 reportable6 joined 06:28 cmburn joined
cmburn Sorry if this is a stupid question, I *want* to use raku, but is there a maintained web framework out there? Best I can tell, only one I saw was abandoned 06:32
Currently use Mojolicious
kjp cmburn: The usually used web solution for raku is cro -- cro.services 06:35
cmburn Oh great, I hadn't seen that at all, all I'd seen was Bailador which seemed dead 06:38
:) 06:39
07:04 frost left 07:11 frost joined, lichtkind joined 07:44 kjp left 07:51 kjp joined 08:20 Guest3 joined 08:23 Tirifto_ left 08:54 Sgeo left 08:56 lichtkind left 08:57 lichtkind joined
Guest3 Is there any way to replace a method with augment? Still trying the same as yesterday, but "Cannot have a multi candidate for 'message' when an only method is also in the package 'X::Syntax::Confused'" 09:07
m: augment class X::Syntax::Confused { method message() { "I am confused" } } 09:08
09:08 clarjon1 left
camelia ===SORRY!=== Error while compiling <tmp>
augment not allowed without 'use MONKEY-TYPING'
at <tmp>:1
------> augment class X::Syntax::Confused⏏ { method message() { "I am confused" }
expecting any of:
generic role
Guest3 m: use MONKEY; augment class X::Syntax::Confused { method message() { "I am confused" } }
camelia ===SORRY!=== Error while compiling <tmp>
Package 'X::Syntax::Confused' already has a method 'message' (did you mean to declare a multi method?)
at <tmp>:1
09:17 cmburn left
lizmat m: class X::Foo is X::Syntax::Confused { method message { "I am foo" } } # why not subclass ? 09:22
camelia ( no output )
Guest3 I want to change compile time errors' messages 09:36
There's not much usefulness to this so it's not a big problem if that's not possible 09:37
lizmat Guest3: why do you want to change them? Do you think they're unclear / wrong? 09:38
if that's the case, maybe a PR would be a better solution ?
Guest3 Just for fun, to see how much Raku's internals can be changed, just like we can change the grammar 09:41
lizmat well, you appear to be going for one of the most difficult ones: changing the error message of a compile-time error 09:42
then again: 09:44
m: class X::Syntax::Confused is X::Syntax::Confused { method message() { "foo" } }; 32 45
camelia ===SORRY!=== Error while compiling <tmp>
at <tmp>:1
------> fused { method message() { "foo" } }; 32⏏ 45
expecting any of:
infix stopper
statement end
statement modifier
lizmat but that would only be in *that* lexical scope
09:47 Guest331 joined
Guest331 lizmat: sorry, lost my internet (and nickname apparently) 09:47
09:47 Guest3 left
Guest331 Is there any way to change the compile time error message? 09:47
lizmat m: class X::Syntax::Confused is X::Syntax::Confused { method message() { "foo" } }; 32 45
camelia ===SORRY!=== Error while compiling <tmp>
at <tmp>:1
------> fused { method message() { "foo" } }; 32⏏ 45
expecting any of:
infix stopper
statement end
statement modifier
lizmat create a subclass with the same name :-) will work lexically 09:48
m: class X::Syntax::Confused is X::Syntax::Confused { method message() { "foo: " ~ callsame } }; 32 45
camelia ===SORRY!=== Error while compiling <tmp>
foo: Two terms in a row
at <tmp>:1
------> d message() { "foo: " ~ callsame } }; 32⏏ 45
expecting any of:
infix stopper
statement end
Guest331 Damn that's awesome 09:49
lizmat generally speaking: if you want to make changes to the language in a lexical scope, that's pretty easy 09:50
changing things globally is a different ballpark and generally not advisable
Guest331 Why can't I augment a non-multi method tho? Also why can't I augment roles? 09:52
lizmat again, you can do that lexically 09:55
m: role Associative does Associative { }
camelia ( no output )
Guest331 Why doesn't augment allow this?
lizmat as to the why? because it introduces action at a distance, and that is generally thought to not be a good thing 09:56
Guest331 Isn't augmenting class an action at a distance too? 09:58
lizmat indeed 10:03
whereas lexical subclassing isn't 10:04
Guest331 Then allowing augmenting of classes but not of roles
lizmat well, augment was decided upon very early in the development process of Raku 10:08
but later, when pre-compilation of modules was developed, turned out to be a design mistake
well, at least in my opinion :-)
in a language without pre-compilation, and everything is looked up at runtime, this is different, such as in e.g. Perl 10:09
need to go afk now&
10:14 Tirifto joined
nine If augmenting is the answer to your problem, you may be trying to solve the wrong problem 10:18
Geth doc/operator-table-fix: 68ca383047 | (Daniel Mita)++ (committed using GitHub Web editor) | assets/js/main.js
Fix precedence table ordering

Table header names changed in #4031. Closes #4085.
doc: m-dango++ created pull request #4086:
Fix precedence table ordering
10:33 andinus joined
Guest331 augment should be deprecated, shouldn't it? 11:10
11:11 lichtkind_ joined 11:14 lichtkind left 11:21 vrurg_ joined, vrurg left 11:39 frost left 12:07 reportable6 left 12:08 reportable6 joined 12:29 frost joined 12:43 lichtkind_ left 12:56 lichtkind joined 13:08 Guest331 left 13:59 frost left 14:10 Guest3 joined 15:10 benchable6 left, reportable6 left, evalable6 left, coverable6 left, releasable6 left, notable6 left, tellable6 left, shareable6 left, bloatable6 left, greppable6 left, committable6 left, bisectable6 left, quotable6 left, unicodable6 left, linkable6 left, statisfiable6 left, sourceable6 left, nativecallable6 left 15:11 nativecallable6 joined, greppable6 joined, sourceable6 joined, reportable6 joined, linkable6 joined, benchable6 joined 15:12 quotable6 joined, unicodable6 joined, shareable6 joined, committable6 joined 15:13 evalable6 joined, tellable6 joined, coverable6 joined, releasable6 joined, bisectable6 joined, bloatable6 joined, notable6 joined, statisfiable6 joined
Anton Antonov At some I heard in this forum the idea to implement a global setting that prevents random order in hash objects. Is this considered in a more serious manner or it is still "just an idea" ? 15:28
At some point I heard in this forum the idea to implement a global setting that prevents random order in hash objects. Is this considered in a more serious manner or it is still "just an idea" ?
16:13 linkable6 left, evalable6 left 16:16 evalable6 joined, linkable6 joined 16:22 Guest3 left
japhb Depends what you mean. Associatives are sorted when writing keys out during precomp, so that precomp is repeatable. There are also Hash::Ordered and Map::Ordered modules if you want to have associatives in your own code that track insert order (I use Hash::Ordered fairly regularly, in fact). 16:53
17:01 sena_kun left
Anton Antonov @japhb Thank you! I will try Hash::Ordered in next 1h... 17:02
17:02 sena_kun joined
Voldenet I don't think it's sane idea to depend on order of hashes 17:05
japhb Voldenet: There are definite use cases for ordered hashes. For example guaranteed round-trip ordering from unsorted inputs such as config files, so that any changes your code makes to the config hashes don't trash the user's layout. 17:14
Anton Antonov @Voldenet Depends what you want to do. Mathematica, Python, R and have ordered hashes -- very useful feature in data wrangling and visualizations and machine learning algorithms. 17:15
@Voldenet Depends what you want to do. Mathematica, Python, and R have ordered hashes -- very useful feature in data wrangling and visualizations and machine learning algorithms.
Voldenet but it is usually more useful to simply use arrays or lists 17:16
Sure, you get bad Big-Theta lookups with simply using iterables 17:17
but you can just extract (ref -> index) hash for faster lookups 17:18
japhb Voldenet: One idiom I use is to load data from a file into an ordered hash, so I get the associative I need elsewhere without forgetting the file's ordering, and then cache the .keys and .values from that ordered hash into positionals or iterables for use where those are what I want instead. 17:25
So I get the ordering, the associativity, and the steady-state performance. 17:26
Voldenet Ha, I don't even use the ordered hash
japhb In that case, you're probably doing something similar, with extra steps. :-) 17:27
Voldenet m: my @foo = "A".."X"; my &m = {.ord}; @foo.map(&m).first(* ~~ 70).say; my %k = @foo.map({ m($_) => $_ }); say %k{70}
camelia 70
Voldenet that's basically what I do 17:28
imo using a library _is_ an extra step
m: my @foo = "A".."X"; my &m = {.ord}; @foo.first({ m($_) ~~ 70 }).say; my %k = @foo.map({ m($_) => $_ }); say %k{70} 17:29
camelia F
Voldenet more like this
japhb I mean ... to each their own, I suppose. 17:30
Voldenet In the core Hash::Ordered works similarly, but it's hard to apply different indexing strategies that way 17:33
so I believe that keeping things as plain data structures inside a class allow easier performance tweaks later
m: my @foo = "A".."X"; my &m = {.ord}; @foo.first({ m($_) ~~ 70 }).say; my %k = @foo.kv.map({ m($^v) => $^i }); say @foo[%k{70}] 17:38
camelia F
Voldenet that's what would Hash::Ordered do 17:39
Anton Antonov @Voldenet When I try to execute your first two code examples above I am get the error: [No such method 'ord' for invocant of type 'Any']. (Sorry for being ignorant...) The last one works.
Voldenet hm, that would mean that &m was executed without topic variable 17:42
it's possible that `my &m -> $_ {.ord};` would work
`my &m = -> $_ {.ord};`
(it's not directly the style I use, I just posted it as an example of the approach I use) 17:46
Anton Antonov I think during copy-and-paste some characters got lost. On my Discord window I see the code giving errors as [email@hidden.address] m($) => $ })" -- I assume it has to be "$_" , not "$". 17:47
I think during copy-and-paste some characters got lost. On my Discord window I see the code giving errors as "@foo.map({ m($) => $ })" -- I assume it has to be "$_" , not "$".
Nemokosch Yeah
Voldenet Ah, that makes sense 17:48
Anton Antonov @Voldenet Thanks for posting those examples -- I am trying to _not_ use Hash::Ordered.
Nemokosch I don't see why using a library (whatever even counts as a library and not the language itself) would be an extra step anyway 17:49
Also, in Python, the ordering in hashes made it to the standard, for example 17:50
Voldenet I've got this irrational fear of dependencies caused by seeing too many react projects 17:51
m: role Indexed[$indexer] { method AT-KEY($k) { self.first({ $indexer($_) ~~ $k }) }; }; my $a = [] but Indexed[{.ord}]; $a.push("a"); say $a{97} 17:52
camelia a
moritz Voldenet: call it "learned" and not "irrational"
Nemokosch Well it's rather a Pavlovian reflex 17:55
"Learned" in that sense
Voldenet indeed :)
Nemokosch When you implement something by hand, that can very well be a "dependency" - an internalized one 17:57
As long as you depend on stuff you are really using, it definitely has certain advantages (as well)
Voldenet it can lead to reinventing the wheel (along with the cart, the horse and the road) 18:00
18:02 evalable6 left, linkable6 left, linkable6 joined
Nemokosch This reminds me of the "wisdom culture" in the programmer community 18:03
It's so common to have visionary opinions about programming languages, infrastructure, paradigms and so on 18:04
18:05 evalable6 joined
And honestly they are often interesting 18:06
But they have to be taken with multiple grains of salt because your average wise programmer likes to reduce their model so that only their one key vision remains
18:08 reportable6 left, reportable6 joined
Voldenet It's always specific to problems encountered in the past 18:10
Nemokosch And often those problems are viewed through the lens of some preconception 18:14
Which, again, may not be a problem but it's definitely worth keeping in mind
Just take a look at the Perl-Raku split... 18:16
18:19 mexen joined
Voldenet true, the split only was needed because of the preconception that p6 will eventually replace p5 18:22
and the insanity is that p7 is only caused by that as well 18:23
18:32 Sgeo joined
Nemokosch And then everyone has strong feelings and some wisdom why Perl failed, didn't fail, sucks, sticks, you name it 18:47
19:00 mexen left 19:38 sena_kun left 19:39 sena_kun joined 20:35 cine joined 20:47 cine left 20:55 cine joined 20:56 cine left
Geth doc: uzluisf++ created pull request #4088:
Fix URL (#4087)
21:34 linkable6 left 21:35 linkable6 joined
p6steve m: sub sbv( %h --> Seq ) {%h.sort(*.value).map(*.key)}; my %x = %(a=>2,b=>0,c=>1); %x.&sbv.say; 21:40
camelia (b c a)
p6steve # sorts Hash by value, returns keys (poor woman's Ordered Hash)
m: sub sbv(%h) {%h.antipairs.sort.map(*.value)}; my %x = %(a=>2,b=>0,c=>1); %x.&sbv.say; 21:50
camelia (b c a)
p6steve (first seems more legible to me) 21:51
Voldenet but not "ordered" like search tree, but "retrievable by stored order" 22:02
p6steve I like this because (i) can use standard raku Hash forward as eg. an index from column label to column number very fast and clear, (ii) sort on column labels is native raku sort on couple hundred items - quite quick (0.95s for 100,000 pairs) 22:05
Voldenet: that's right - but my main use case is forward lookup as an index (label => col id) and I imagine that a native raku hash is fast in this direction, the ordered aspect is secondary (eg. to view a list of column name), and is cheap and stateless to do it this way 22:10
and I like that hashes are deliberately unordered -- that means there are two just concepts Array || Hash that can be blended to do a wide range of behaviours 22:15
(too much perl in my youth) 22:20
22:32 Sgeo left
Geth docker: MadcapJake++ created pull request #49:
Update Rakudo Star to 2022.04
23:32 evalable6 left, linkable6 left, evalable6 joined 23:34 linkable6 joined 23:41 lucs left 23:42 lucs joined 23:48 lichtkind left