🦋 Welcome to Raku! raku.org/ | evalbot usage: 'p6: say 3;' or /msg camelia p6: ... | irclog: colabti.org/irclogger/irclogger_log/raku
Set by ChanServ on 14 October 2019.
valley Oh, ouch. Sometimes I feel like an idiot. I just assumed the `.raku` was there for a reason and didn't even think about removing it. Thank you for the help. I swear I'm not usually this dumb, programming after a long and stressful day of work can be hard. 00:01
moon-child :) 00:02
valley And I do plan on making this a pure Raku program if possible (meaning no capturing command/shell output). Whenever I get started with a new language, I make an info fetch program that initially captures command output, and I slowly work my way up to properly parsing files and all that. 00:05
codesections I just came up with an advent 00:45
*advent of code solution that is probably too short/cryptic to be anything I'd actually use, but it was a lot of fun to write: 00:46
github.com/codesections/advent-of-.../01/reduce
(and, the more I look at it, the closer I come to convincing myself it makes perfect sense) 00:48
MitarashiDango[m Couldn't you ditch the $p2 default and just use ?$p2 after the plus (for the sake of golfing further) 01:38
codesections Yeah, I guess I could. I was kind of treating the `unit sub MAIN` line as "free" and just focusing on the "substantive" line 02:45
if I'm golfing the character count, I guess I'd want to use braces instead of `unit` too 02:46
guifa Weird. binding is slower than normal assignment
but not consistently? Maybe I Need better tests 02:48
sten37 How to explain?? (1..5) »*« (6..10) (# no questions), but (1..5) [»*«] (6..10) (#same thing !) 03:31
(raku 2020.11) 03:32
coldpress I can say lines.combinations(3); but why can't I my @combined-lines = lines.combinations(3); say @combined-lines; ? 03:52
I get this error: uv__close: Assertion `fd > STDERR_FILENO' failed.
invoking with `raku file < in`
.combinations(2) does not give this error
coldpress it's all good now, plagarized raku AoC solutions :) 04:27
I think I don't understand how functions return values 04:28
`sub f() { ...; say ... }` outputs my answer, but `say f()` outputs Nil 04:30
moon-child coldpress: 'sub f() { foo; bar; baz }' returns baz 04:31
'say' returns null
coldpress correction: `sub f() { ...; say computation }` outputs my computation, but `sub f() { ...; computation } say f()` outputs Nil
moon-child m: sub f() { 5; 6; 7 }; say f() 04:32
camelia WARNINGS for <tmp>:
7
Useless use of constant integer 5 in sink context (line 1)
Useless use of constant integer 6 in sink context (line 1)
moon-child (also note that you can leave out the ()) 04:33
coldpress yes, that's what I expect. I think the when-for computation messes it up somehow? 04:34
moon-child code?
coldpress m: sub solve($lines, $p2) {[*] $_ if .sum == 2020 for $lines.combinations($p2 ?? 3 !! 2) }; say solve([1721,979,366,299,675,1456], True);
camelia Nil
coldpress m: sub solve($lines, $p2) {say [*] $_ if .sum == 2020 for $lines.combinations($p2 ?? 3 !! 2) }; solve([1721,979,366,299,675,1456], True); 04:35
camelia 241861950
moon-child I'm not entirely sure why that's the case, but I do notice that wrapping parens around the expression in the function makes the problem go away 04:37
coldpress moon-child: by wrapping parens, you mean `sub solve { ( ... ) }`? This constructs a list, right? 04:42
that resolves my issue, thank you very much 04:43
coldpress another way to resolve is `sub solve { return ... }` 04:48
no list is constructed, so I think this is preferable
jmerelo Today's post starts with "Perl is dead" raku-advent.blog/2020/12/02/day-1-...-and-raku/ 06:46
sjn nice article :) 06:48
(though, I'd have loved to see some acknowledgment that Larry _and his community_ designed the language - many people had a hand in that process! Maybe there's an ackowledgment list somewhere to link to?) 06:50
Damian's work should definitely not go ignored, certainly. 06:52
Looking at design.raku.org/ there's an AUTHORS section at the end of most files 06:53
jmerelo: Maybe github.com/Raku/mu/blob/master/AUTHORS is a good list to link to? :) 06:54
jmerelo sjn: you can comment at the post, and the author is usually around here too 07:04
.seen nigehamilton
tellable6 jmerelo, I haven't seen nigehamilton around
jmerelo .seen nigehamilton_
tellable6 jmerelo, I haven't seen nigehamilton_ around
jmerelo .seen nige123
tellable6 jmerelo, I haven't seen nige123 around, did you mean nige1?
sjn no worries :) 07:05
coldpress hmm, URL says day-1 07:25
jmerelo coldpress: noted 08:57
coldpress: problem is I can't change it now... it was scheduled to be published yesterday initially. But I'll fix it for the next ones. Thanks! 08:58
nige hi o/ 09:03
nige happy to make an amend to the article - it's true that Larry designed it with the help of the community 09:04
github.com/Raku/mu/blob/master/AUTHORS <--- should I link to this one?
jmerelo nige: probably 09:08
nige ok - cool - sentence now reads: When Larry Wall designed Raku, with the help of the Perl community, he fixed most of Perl's imperfections and doubled down on Perl's DNA. 09:09
where "Perl community" links to - github.com/Raku/mu/blob/master/AUTHORS 09:10
and "designed" links to - design.raku.org
JJAtria[m] Is there a reason we don't have a touch in IO::Path? I was expecting to see that, or have eg. modified be a setter as, but the closest I've seen is trizen.gitbook.io/perl6-rosettacod...ation_time 09:26
jmerelo nige: please note this too raku-advent.blog/2020/12/02/day-1-...omment-368 09:36
notandinus what is the equivalent to perldoc for raku? 09:45
moritz docs.raku.org/ 09:49
moritz there is some bare-bones command line tool, but IMHO it's not good enough to be worth using 09:50
notandinus which version of rakudo includes zef? looks like the one in openbsd ports doesn't come with zef 09:52
moritz zef is a third-party module 09:55
if you have access to a rakudo-star package, that should come with zef
notandinus i see, ports only has rakudo-2018.11 09:56
hmm looks like i can build the rakudo-star version from source, it has instructions for obsd 09:57
moritz also, rakudo development still moves quickly enough that I wouldn't advise using a 2 year old version 09:59
jmerelo even more so if it's prior to the rename...
notandinus i see, looks like someone did it sometime ago, blog.lambda.cx/posts/openbsd-compi...kudo-star/ 10:08
should i go the rstar way or get rakubrew from cpan and install with it?
Zero_Dogg You don't actually need rakudo-star these days. rakudo and zef should be enough 10:11
jmerelo notandinus: the rakudo star version has everything in and is reasonably up to date. Give it a try first. 10:12
notandinus i see, i'll try installing rakudo-star then 10:20
xinming Hi, today, I watched video from jnthn on youtube about perl6 optimization, we got quite a lot improvements there. but still got me curious, do we still have much room to optimize the compiler to make it run much faster than it was now? 10:57
moritz xinming: there is some more potential, but it requires a few bigger changes, like the higher-level AST that preserves more context for the optimizer (rakuast branch) 11:01
xinming moritz: Ok, Thanks, BTW, when I run raku script I wrote, I got, Command terminated, How can I debug this? 11:02
timotimo are you on linux? 11:04
xinming yea, I do
And I think it might be caused by
timotimo command terminates sounds like maybe a segfault or other signal
dmesg would usually point out segfaults 11:05
xinming class AA { multi method test ('aaa', My::ObjectType $object) { } }; AA.test('aaa', $obj);
timotimo: Ok
timotimo with rakudo-gdb-m you can get backtraces of where it asplodes
xinming Yea
I got it.
timotimo could be out-of-memory killed
there doesn't seem to be a $obj declared in your code 11:06
xinming Nope
termbin.com/alg4
timotimo: It's just illustration, It's a large script.
timotimo OK
xinming and later, I changed to AA.new.test('aaa', $obj) I got an error
timotimo infinite recursion is a way to get a crash at record speeds, though if you don't have a ulimit set it may make your computer unusable for a couple minutes 11:08
xinming timotimo: yea, But my computer is not freezed at all, It just runs and runs, and soon, I receive Command terminated error. 11:09
timotimo OK
timotimo what kind of help would you like? 11:13
xinming Nothing ATM, Just now, I tried to repeat the issue, now, it always raises error. 11:14
timotimo are you accessing one hash or array from multiple threads at the same time, per chance? 11:16
apart from NativeCall, that is one major way to segfault or crash a rakudo
xinming I don't think so, as I don't use multi threads feature 11:17
timotimo OK 11:18
xinming before I try to fix the issue, I don't know where I modified, it's now always raises error instead of `Command terminated` thin
timotimo oh, error as in an Exception 11:19
Geth advent: 58eadd37b8 | (Tom Browder)++ (committed using GitHub Web editor) | CONTRIBUTING.md
Update CONTRIBUTING.md

Update a bit. Needs more love.
11:48
notandinus ok so i installed rakudo-star from source on OpenBSD, it took ~1H with default module list 12:05
jmerelo notandinus++ 12:09
notandinus hmm something went wrong 12:10
ld.so: raku: can't load library 'libmoar.so'
Killed
^ it says this when i run it
notandinus hmm i figured out the error, i moved the whole directory to another location thinking that won't change anything. i've symlinked the old install directory to the new one & it works fine now 12:18
timotimo is that that one feature in rpath that openbsd doesn't have that we rely on for relocatable builds? 12:19
Geth advent: b28fa1e3b3 | (Tom Browder)++ (committed using GitHub Web editor) | raku-advent-2020/authors.md
Update with new title
12:40
notandinus what would be the best way to get each line of a file in an array? i'm thinking of slurp'ng it and splitting 12:46
lizmat my @array = "file".IO.lines
this will also remove newlines for you 12:47
if you want to keep them:
my @array = "file".IO.lines(:!chomp)
notandinus ^^ 12:48
notandinus ah thanks 12:49
i wanted this, found it from someone elses code : my @inputs = "input.txt".IO.lines>>.Int; 12:50
i need to read up on this methods thing, i only understand functions
lizmat if you just want to take from STDIN, its just "lines"
my @array = lines
if you want words from STDIN: 12:51
my @array = words
:-)
notandinus ah thats nice, thanks 12:52
lizmat ah, and if you just want STDIN as a string: slurp
my $stdin-as-a-single-string = slurp 12:53
gfldex lolibloggedalittle: gfldex.wordpress.com/2020/12/02/sa...packaging/ 12:56
notandinus thanks, i'm saving these for later
i was doing the advent of code thing
Geth advent: 3b40509262 | p6steve++ (committed using GitHub Web editor) | raku-advent-2020/local-drafts/p6steve-rudolph-on-raku.md
some comments in the Bearing code section
13:12
notandinus how would i improve this: ix.io/2Gft 13:15
looks like $num scope is larger than the while loop, i want its scope to be only the loop 13:16
timotimo internal server error :< 13:17
notandinus oh, sorry looks like it got fixed, works fine on my end 13:18
timotimo m: my @nums = 1e0 ... 10e0; while shift @nums -> $num { say $num } 13:19
camelia 1
2
3
4
5
6
7
8
9
10
timotimo m: my @nums = 1e0 ... 10e0; while shift @nums -> $num { say $num }; say $num
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$num' is not declared. Did you mean any of these: 'num',
'Num'?
at <tmp>:1
------> 3e shift @nums -> $num { say $num }; say 7⏏5$num
timotimo ^- note that this will abort if the value shifted off the array booleans to false, for example 0e0
moritz notandinus: you could do something like: for @inputs.kv -> $idx, $num { }
and then only iterate over @inputs[$idx..*] inside the loop 13:20
timotimo @inputs.skip($idx) or $idx - 1 depending on what exactly you need
or + 1 i mean
notandinus ah that looks better, i only need to go over an index one time 13:21
so i'll iterate over @inputs[$idx..*]
notandinus looks like that is significantly slower than previous code 13:25
i did: ix.io/2Gfx
this new one takes ~ 2.3 s whereas previous one took ~1.7 s 13:26
moritz internal server again :-(
notandinus what could be causing this?
moritz maybe that slice is slow
notandinus oh i guess ix.io is under load, i'll use another paste
notandinus did it load? paste.debian.net is also down :( 13:27
moritz it loaded on the third attempt :D 13:29
notandinus oh ghostbin is also down, do you know of any other paste serivce?
ah nice
yeah the slice part is the only change, rest is same 13:30
moritz gist.github.com
perlpunks.de/paste 13:31
notandinus thanks i'll bookmark it 13:32
notandinus raku in general seems slower than perl, will this improve in later versions? 13:35
moritz we're working on it
timotimo we just had a relatively big performance regression in the last release 13:40
which was a fix for correctness that wasn't fully optimized at the time of the release 13:41
sena_kun timotimo, I think it is relatively big in some isolated examples, though, not in general. 13:44
timotimo OK 13:49
ggoebel how does one force an object to interpolate as a string in a regular expression? i.e. assume $a is an object where ~$a stringifies it to 'abc'. what is the correct way to say 'abc' ~~ /~$a/? 13:57
timotimo $a won't do it already? 13:58
ggoebel maybe I'm overthinking it...
timotimo m: my $to-match = "abc"; say "123abc987" ~~ / . $to-match . /
camelia 「3abc9」
moritz ggoebel: there is no special syntax for that; you might need to create the stringified variable outside of the regex
timotimo m: my @to-match = "abc", "xyz"; say "123abc xyz987" ~~ / . $(@to-match) . / 13:59
camelia 「3abc xyz9」
timotimo m: my @to-match = "abc", "xyz"; say "123abc xyz987" ~~ / . $(~@to-match) . /
camelia 「3abc xyz9」
timotimo this seems to work
moritz m: class A { method Str() { "abc" } }; my $x = A.new; say "fooabcd" ~~ /$x/ 14:02
camelia 「abc」
moritz seems to work fine
ggoebel my token x { 'abc' }; 'abc' ~~ /<x>/; if ('abc' ~~ /$<x>/) { say "1" } 14:04
doesn't work...
timotimo tokens are like subs and have & as their sigil 14:05
ggoebel my token x { 'abc' }; 'abc' ~~ /<x>/; my $x = ~$<x>; if ('abc' ~~ /$x/) { say "2" }
evalable6 2
ggoebel does
timotimo m: my token x { 'abc' }; say 'abc' ~~ /<x>/; if ('abc' ~~ / &x /) { say "1" } 14:06
camelia 「abc」
x => 「abc」
timotimo m: my token x { 'abc' }; say 'abc' ~~ /<x>/; if ('abc' ~~ / $&x /) { say "1" }
camelia 「abc」
x => 「abc」
1
ggoebel does 14:07
thank you! 14:08
notandinus moritz: i see, that's nice 14:18
ggoebel timotimo: I don't think I'm fully understanding what you did with the token when you do $&x. If I am trying to match against what the token captured... how do I make the following work? 14:53
my token x { <:alpha>+ } my token y { <:alpha> <x> } if ('bc' ~~ /$(~$<y><x>)/) { say "ok" }
oops
my token x { <:alpha>+ } my token y { <:alpha> <x> } say 'abc' ~~ /<y>/; if ('bc' ~~ /$(~$<y><x>)/) { say "ok" } 14:54
timotimo not sure if that's what you mean, but you can always $<blorp>=$<y> and then probably $/<blorp>
ggoebel m: my token x { <:alpha>+ } my token y { <:alpha> <x> } say 'abc' ~~ /<y>/; my $foo = ~$<y><x>; if ('bc' ~~ /$foo/) { say "ok" } 14:57
camelia 5===SORRY!5=== Error while compiling <tmp>
Strange text after block (missing semicolon or comma?)
at <tmp>:1
------> 3my token x { <:alpha>+ }7⏏5 my token y { <:alpha> <x> } say 'abc' ~
expecting any of:
infix
ggoebel m: my token x { <:alpha>+ }; my token y { <:alpha> <x> }; say 'abc' ~~ /<y>/; my $foo = ~$<y><x>; if ('bc' ~~ /$foo/) { say "ok" } 14:58
camelia 「abc」
y => 「abc」
x => 「bc」
ok
ggoebel is there a way to avoid declaring $foo and assigning ~$<y><x> to it? 14:59
ggoebel is there a way to avoid declaring $foo and assigning ~$<y><x> to it? 15:02
sorry
dakkar m: my token x { <:alpha>+ }; my token y { <:alpha> <x> }; say 'abc' ~~ /<y>/; if ('bc' ~~ /<{~$<y><x>}>/) { say "ok" } # ggoebel 15:14
camelia 「abc」
y => 「abc」
x => 「bc」
Use of Nil in string context
in block at <tmp> line 1
5===SORRY!5=== Error while compiling /home/camelia/EVAL_0
Null regex not allowed
at /home/camelia/EVAL_0:1
------> 3anon regex { …
dakkar that explodes because the match object gets reset at the start of the match 15:15
dakkar m: my token x { <:alpha>+ }; my token y { <:alpha> <x> }; my $m = 'abc' ~~ /<y>/; if ('bc' ~~ /<{~$m<y><x>}>/) { say "ok" } 15:16
camelia ok
dakkar that works, because I saved the match object
ggoebel: does any of that help?
guifa I know I’ve asked it before, but is there anyway to subclass Str? Mixins are (at least currently) a good bit slower than doing outright subclasses, so I’d love to be able to avoid them if possible 15:41
ggoebel dakkar: thank you! 15:46
for both the solution and explanation dakkar++
xinming m: role R { method t () { "R" }; }; class A does R { method t () { "A".say; }; }; A.new.t.say; 15:56
camelia A
True
patrickb timotimo: re relocatability on OpenBSD. Yes, OpenBSD lacks the mechanism to have relative paths in rpath. Doing relocatable builds on OpenBSD is actually forbidden in our build system for that very reason. 16:27
tellable6 2020-12-01T10:15:32Z #raku-dev <MasterDuke> patrickb github.com/pypa/pip/blob/master/.a...AMDisk.ps1 might be interesting to steal from
patrickb timotimo: There may be possibilities programmatically linking the files with dlopen or some such, but then you hit the next wall, that is reliably determining the absolute path of the currently running executable. 16:28
patrickb The limitation of not being able to determine the executable path is known and Theo de Raadt considers it to be a too minor benefit and thus won't-fix. 16:30
timotimo fair enough 17:04
brass Is there a way to convert a string to a regex? 17:28
I'm trying to do this 0x0.st/i745.txt 17:29
codesections brass: there are several ways :D I believe <$rx> may be the one you want 17:32
details at docs.raku.org/language/regexes#Reg...erpolation
brass codesections: Oh awesome!! Thank you! 17:33
brass btw, whoever wrote raku-mode for Emacs is an absolute Saint, I use it all the time :) 17:35
timotimo $ain't 18:15
brass Is there a way to convert a match to an array of strings? 18:47
timotimo if you want to do that, perhaps you'd be better served by the "comb" method 18:49
brass I'm just trying to golf my advent of code question 18:50
timotimo OK, you can try putting a >>.Str after it
brass Beautiful! Thanks 18:52
holyghost I just started on the sequel of Game::Bayes, github.com/theholyghost2/p6-Game-Decision . it's decision theory based on Game::Stats and Game::Bayes where you use the stats from there 19:41
In a few weeks/months I will try to PR Game-Stats and Game-Bayes into some ecosystem 19:42
I still have to read the book about, finish it for building Bayes and Decision out 19:43
holyghost I am working on 10 things at the same time, so be patient 19:56
codesections Raku doesn't have an easy way to both print and return a value, does it? 20:24
for example:
m: say(^5).map({$_+2}).sum 20:25
camelia ^5
codesections er
m: say (^5).map({$_ + 2}).sum
camelia 20
codesections if I wanted to inspect the value inside the map 20:26
m: say (^5).map({$_ + 2 ==> {.say; $_}()}).sum
camelia 2
3
4
5
6
20
codesections is the best I've come up with, but that's clunky enough that I miss Rust's dbg! macro 20:28
codesections (which would be trivial to write myself in Raku, I know. But "while I'm print-debugging" isn't really a time when I want to be writing helper fns) 20:30
[Coke] worth writing up a debug module once and using that? 20:34
brass What's the ==>? 20:37
nvm found it docs.raku.org/language/operators#infix_==%3E 20:38
timotimo i don't know what "dbg!" does, but have you seen that module that offers "is traced"? 20:39
modules.raku.org/dist/Trait::Traced:cpan:KAIEPI
codesections yep that's the one (re: ==>) 20:39
Thanks, I'll take a look (it's not a big deal -- I mostly wanted to make sure I hadn't missed something built in) 20:41
(between all the ways we have to print something, I thought there might be one that returns something more useful than `True` :D ) 20:42
brass Is there an operator like ==> but that lets you use blocks instead of routines? 21:03
guifa [Coke]: unit module Debug::PrintReturn; sub print-return (\x) is export { print x; x }
^_^ 21:04
brass Is mienaikage here? I have a question about their answer for day 2 :) 21:51
MitarashiDango[m Hi! 21:52
brass What do you call the prefix dot on this line? github.com/codesections/advent-of-...2.raku#L19 21:53
I assume it's something to do with grammars but I'm not sure where to look
guifa brass: That’s an implicit method call
brass OOOOOH
MitarashiDango[m Yup, its on the topic variable $_ 21:54
guifa basically if you ever see ‘.foo’, it really means $_.foo
brass I didn't know that you could do .<thing>
With the angle brackets
0x0.st/i7tD.raku :OOO 21:57
I had no idea!
guifa Works with all of the postfixes too
brass I've always accessed them directly using like %a<a>, not knowing it could be %a.<a> 21:58
That's really cool
perryprog ur really cool
brass :^)
guifa codesections: you’re welcome github.com/alabamenhu/DebugTransput 22:01
mort Noob here, sorry. How can I iterate through the characters in a string? 22:23
brass .comb
Returns an array of all the characters from the string 22:24
mort oh, I didn't notice that one of the overloads for .comb is one which takes only the input string
guifa Also don’t forget Raku’s definition of character differs a little from other languages (I think swift is the only other one that works similarly).
mort I found .comb in docs.raku.org/type/Str#routine_comb, but also found .words which says it uses .comb, and found .comb which looked super complex so I assumed it was a low-level function which
guifa More just super versatile :-) 22:25
Guest5249 but does it comb hair? 22:27
brass m: "hair".comb().say 22:28
camelia (h a i r)
Guest5249 nice!
guifa was going to make a joke about not combing too fast and use race, but ‘hair’ is too short to trigger out-of-order parallelization 22:31
cpan-raku New module released to CPAN! RogueGame (0.1.10) by 03KOBOLDWIZ 22:33
mort is there something wrong about using "eq in sink context"? Rakudo warns on the expression ($pass.comb[$p2] eq $ch)
the full statement is `return ($pass.comb[$p1] eq $ch) xor ($pass.comb[$p2] eq $ch);` 22:34
(yes, I'm using advent of code as an opportunity to try to learn raku) 22:35
Geth ecosystem/alabamenhu-patch-1: 32ac9a1745 | L'Alabameñu++ (committed using GitHub Web editor) | META.list
Add Debug::Transport to list

See github.com/alabamenhu/DebugTransput
22:36
ecosystem: alabamenhu++ created pull request #571:
Add Debug::Transport to list
guifa facepalms. Not transport, transput hahaha 22:37
mort: careful about precedence 22:38
letter operators like xor have extremely low precedence
so what you’ve said is
mort sure, but even with parens literally everywhere like with `return (($pass.comb[$p1]) eq $ch) xor (($pass.comb[$p2]) eq $ch);` it still complains
guifa hmm 22:39
mort Useless use of "eq" in expression "($pass.comb[$p2]) eq $ch" in sink context (line 10)
apparently sink is raku's name for void, so it's in a void context? I thought xor was a binary operator? 22:40
Guest5249 that return is still the left operand of the xor
mort wat
so the statement is parsed as `(return (($pass.comb[$p1]) eq $ch)) xor (($pass.comb[$p2]) eq $ch)`? 22:41
sorry, I had too many (s somewhere, but you get the idea
guifa mort: correct 22:42
mort well, you're right that adding parens to the whole expression fixes it. That's really weird to me though 22:42
guifa xor has EXTREMELY low precedence
MitarashiDango[m Try ^^ instead of xor
guifa you’re probably wanting ^^
mort I suppose I'm used to statement-oriented languages, where the general syntax for a return statement would be `return <expression>`, so as long as xor is at all an operator which can be part of an expression, it can't be lower "presedence" than the return keyword 22:43
guifa I can’t really think of a reason to use ‘xor’ to be honest. It was probably only done for parity with ‘and’ and ‘or’ which are useful
mort are there times when it's useful to have an operator with a lower presedence than the return keyword? 22:44
guifa yeah 22:45
return $foo if $foo > 10
mort ah, that kind of infix if is an operator?
guifa actually, I think if in that case isn’t an operator
But I suppose with return there might be a case where your return expression results in a failure, and you could catch that with an `or` 22:46
mort does a return "expression" evaluate to the returned value? So that you could do like 'return do-something() or die', parsed as '(return do-something()) or die', where you die if do-something() evaluates to something falsey? 22:47
timotimo bisectable6: sub MAIN($a, $b --> Nil) { }
bisectable6 timotimo, Will bisect the whole range automagically because no endpoints were provided, hang tight
timotimo, Output on all releases: gist.github.com/2d39696a3851b4d781...09b3cc1f15 22:48
timotimo, bisect log: gist.github.com/92a9b8ace55143ee0e...eefa95a8fd
timotimo, Bisecting by output (old=2018.09 new=2018.10) because on both starting points the exit code is 2
timotimo, bisect log: gist.github.com/a688d006258a74cf22...c15d765e7e
timotimo, (2018-10-12) github.com/rakudo/rakudo/commit/7d...7a69bc97af
timotimo, Output on all releases and bisected commits: gist.github.com/472c8271c47ad6a92d...008a38544d 22:49
guifa I can’t seem to get a way to trigger an ‘or’ with with return 22:55
but it definitely fully exits the routine when it hits:
m: my $foo = ‘hi’; sub bar { $foo = return ‘bye’ }; bar; say $foo 22:56
camelia hi
guifa But my suspicions are correct, it’s implemented as a sub, rather than as a control flow word 22:59
m: say &return.WHAT
camelia (Sub)
timotimo .seen chloekek 23:03
tellable6 timotimo, I saw chloekek 2020-09-20T18:36:15Z in #raku: <chloekek> m: say (*).^name
guifa I’d guess that a lot of it has to do with the fact that it (and several others, like ‘redo’, ‘next’, or ‘take’) can take postfix control statements, which isn’t allowed for regular control statements 23:04
but I could be wrong, I wasn’t involved in the early design
mort might just be an incidental result of other stuff, if there are other keywords which it does make sense to give a higher precedence than and/or, and it makes sense for return to be in the same category as those keywords, and it makes sense for xor to be in the same category as and/or 23:13
when making one strict ordering of the presence of every keyword, I suppose it's hard or impossible to make sure every single keyword pair's relative precedence makes sense in isolation 23:14
lizmat guifa: little in raku is really statement: most operators are really just subs 23:15
the only exception is really the short-circuiting || and && 23:16
SmokeMachine I was thinking... would that make sense if `done` could accept a optional parameter and if it received it, that would be returned by react? so, something like this `say react whenever Promise.in: 1 { done 42 }` would print 42 23:22
lizmat m: say react whenever Promise.in: 1 { done } 23:23
camelia Nil
lizmat m: say react whenever Promise.in: 1 { done 42 }
camelia 5===SORRY!5=== Error while compiling <tmp>
Calling done(Int) will never work with declared signature ( --> Nil)
at <tmp>:1
------> 3say react whenever Promise.in: 1 { 7⏏5done 42 }
SmokeMachine lizmat: would that make sense? 23:24
lizmat semantically I guess
lizmat technically, not sure how easy it would be to implement :-) 23:24
guifa mort: yeah, and that’s why Raku tries to let you know when you hit a situation that is probably not what you want 23:34
lizmat SmokeMachine: looks like it could be implemented :-) so make an issue, I'd say 23:36
SmokeMachine 👍 23:38
tbrowder .tell jmerelo my advent article is on the advent site 23:39
tellable6 tbrowder, I'll pass your message to jmerelo
SmokeMachine lizmat: github.com/Raku/problem-solving/issues/249 23:47
cpan-raku New module released to CPAN! RogueGame (0.1.11) by 03KOBOLDWIZ 23:50