00:16 Sgeo joined
Voldenet hm, TEMP block is actually an interesting concept 00:27
m: my $next = 0; sub next { my $curr = $next++; if @*temps[0] { @*temps.push({ $next = $curr }) }; $curr }; my @*temps; say next(); say next(); say next(); if True { my @*temps; @*temps[0] = sub{}; say next(); @*temps[0] = Nil; say next(); say next(); for @*temps { .() if .so } }; next(); say next(); # example from Temporization design docs
camelia 0
1
2
3
4
5
4
Voldenet m: my $next = 0; sub next { my $curr = $next++; if @*temps[0] { @*temps.push({ $next = $curr }) }; $curr }; my @*temps; say next(); say next(); say next(); if True { my @*temps; @*temps[0] = sub{}; say next(); @*temps[0] = Nil; say next(); say next(); for @*temps { .() if .so } }; say next(); say next(); # example from Temporization design docs 00:28
camelia 0
1
2
3
4
5
3
4
00:34 kst joined
Voldenet basically the consuming code sets itself up as "temporization scope", runs some code, then completes the scope using given block 00:35
so the restoration can be explicitly described - it's a lot more than "let/temp" because it is possible to restore the state file to its previous state for example 00:38
and if I understand correctly, the scope can be as deep as needed with a lot of restore procedures
01:00 sibl joined 01:13 ds7832 left, ds7832 joined 01:22 ds7832 left 02:15 derpydoo joined 02:45 kylese left 02:46 kylese joined 02:57 arkiuat left 03:00 sibl left 03:01 sibl joined 03:05 arkiuat joined 03:10 arkiuat left 03:14 arkiuat joined 03:15 kylese left, kylese joined 03:22 sibl left, sibl joined 04:07 lichtkind joined 04:09 lichtkind_ left 05:19 human_blip left 05:20 human_blip joined 05:28 arkiuat left 06:17 Aedil joined 06:30 atcroft left 06:31 atcroft joined 06:41 constxd left 06:43 constxd joined 07:39 derpydoo left 07:50 Sgeo left 08:24 sibl left 08:26 sibl joined 09:09 dakkar joined 10:08 sibl left 11:57 sergot left 12:02 librasteve_ joined 12:36 oodani left 12:37 oodani joined
[Coke] TPRC 2026 will be in Greenville, SC, USA on June 26th-28th (25th-29th for the ambitious). tprc.us/ 13:31
I am not currently considering attending. 13:32
(it's the same venue as last year)
lizmat sadly, I would have to recommend not attending unless you're a white US citizen :-( 13:35
[Coke] Oh, certainly wouldn't expect anyone to come from abroad. :| 13:40
FWIW, the surrounding area was nice enough, good food, the venue was fine for the size of attendence. 13:41
El_Che lizmat: we're at the stage that being white does not protect you from fascism 13:53
tellable6 2026-01-24T19:29:04Z #raku-dev <jdv> El_Che the 2026.01 release happened
El_Che ah damn
will roll it
nemokosch something something "be the change" something 14:35
14:56 arkiuat joined 15:21 Sgeo joined
lizmat El_Che: true 15:22
15:31 oodani left 15:36 oodani joined
El_Che pkgs build fine,but cloudsmiths need to create opensuse lea 16 repo 15:47
they do it quickly normally
lizmat El_Che++ 15:53
aruniecrisps Perhaps we could have a separate Raku meetup? 16:07
Even if it's virtual
lizmat well, there's this Sat meeting wrt to problem solving issues
aruniecrisps Ah I won't be able to attend that one 16:08
nemokosch anyway, even without organizing a formal-ish meetup, there can be conference calls or talking on discord voice chat 16:14
just like there is also the Raku Study Group 16:15
not always Raku, not always study, it's more of an informal computer science gathering of a bunch of people on Zoom
that's basically the virtual successor of the San Francisco Perlmongers meetup 16:16
lizmat weekly: hackaday.com/2026/02/03/ysgrifennu...-in-welsh/ 16:20
notable6 lizmat, Noted! (weekly)
17:10 hvxgr left 17:25 hvxgr joined 17:35 arkiuat left 17:38 dakkar left
[Coke] do folks on non raku projects ever go through and clean up stale branches? 17:42
17:46 arkiuat joined 17:50 arkiuat left
antononcube They should. 17:50
[Coke] Yes, but *do* they. :) 17:51
I had a $dayjob once with 100s of repos and some with 1000s of branches because of a permission issue on PR closing. 17:52
and I made a stink to get them cleaned up, and no one seemed to care. :)
antononcube I really don't know. The other two package repositories I (semi-)frequently submit packages to are completely left to the users/submitters. (PyPI.org and Wolfram Paclet Repository.)
Or, I see. 17:53
Hmm... In the companies I work(ed) for the developer take care of this. But branches might be kept "for posterity" and refer to historical advancement. 17:54
nemokosch I also don't like stale branches, too obsessive 17:56
if my PR's don't get merged for a long time (can easily be years in the FOSS world), eventually I close them 17:57
different topic: did you know that this works?
lizmat yeah, but closing them doesn't necessarily mean the branch is removed
nemokosch m: my $test = "Int"; 12.3."$test".say;
lizmat m: my $test = "Int"; 12.3."$test".say; 17:58
camelia ===SORRY!=== Error while compiling <tmp>
Quoted method name requires parenthesized arguments. If you meant to concatenate two strings, use '~'.
at <tmp>:1
------> my $test = "Int"; 12.3."$test"<HERE>.say;
nemokosch oops, discord might have swallowed the backslash
add a backslash after the interpolated string
lizmat m: my $test = "Int"; 12.3."$test"\.say;
camelia 12
nemokosch that was meant to be the peculiarity
lizmat m: my $test = "Int"; 12.3."$test"().say; 17:59
camelia 12
nemokosch it's not obvious to me why the backslash works
lizmat you need to indicate it's a method call.... either by () or apparently \
nemokosch I mean, from the grammar it's expected but why is the grammar like that?
lizmat m: dd 42\.Str
camelia "42"
lizmat seems to work basically always ? 18:00
nemokosch could be but is there some sort of story behind it?
it seems quite obscure
18:20 arkiuat joined 18:25 arkiuat left 18:35 arkiuat joined
arkiuat I added a comment to issue 504 re the introduction of Cool behavior to div and mod that apparently inspired the 2024.02 "breakage" github.com/Raku/problem-solving/is...3855636822 19:20
nemokosch please note that the performance argument applies at the actual division itself, not the coercions 19:26
if you have inputs '5' and '3' and you want to integer divide them, you have to coerce either way, with any operation
the question is just who does it
arkiuat right, but if the div and the mod are inside a tight loop, you want to make sure the conversion is done before the loop is entered. 19:27
So makes no sense to have div and mod do the coercion
nemokosch what I reckon none of us know is what the cost of the dispatch is
I can't see an outcome where we don't have multi dispatch at all
arkiuat the point is that div and mod are obvious exceptions to many general rules, otherwise they wouldn't exist: we'd just use / and % for everything instead
nemokosch it makes a difference, though, what rules they are exceptions for, and why 19:28
and in my opinion the performance argument is not sufficiently backed for the coercion
if you can say for sure that merely adding a coercive candidate next to a plain Int candidate has a large overhead, that would be an argument 19:29
but I don't think any of us could tell that offhand
arkiuat it might not be sufficiently backed if there were a way to coerce Str that map to Ints without also truncating Str that map to Reals that aren't Int
lizmat "So makes no sense to have div and mod do the coercion" I think that's the reason TimToady originally suggested that there'd be no coercion
nemokosch I think there is a whole lot of speculation here 19:30
lizmat so you'd know as soon as possible that you were doing it wrong
arkiuat S03 says that div and mod don't coerce. It doesn't spell out the reasons why, but I think the burden of proof is one those who would relax that stipulation, not the other way around. I don't think your case has been made.
lizmat, yes, exactly
lizmat knowing TimToady's C and bash background, I think that's a bit more than speculation
nemokosch arkuiat: even if S03 gives no argument?
arkiuat nemokosch, yes. 19:31
nemokosch I think compared to that it's quite a fair argument that gcd and lcm also work like this
if this is good behavior for them, why not for div?
arkiuat not a reason to relax a stipulation that was made quite specifically
nemokosch with no reason given, though 19:32
lizmat Converts both arguments to an integral type and then finds the largest integer
that both arguments are evenly divisible by, and returns that integer.
arkiuat if anything, that might be a reason to think that perhaps they just overlooked making a similar stipulation for gcd and lcm
nemokosch they are equally likely
arkiuat I don't think so
nemokosch but now we are just arbitrarily speculating in one direction
lizmat well, there's the fact that gcd and lcm are not really simple machine ops
afaik
nemokosch let's instead do a measurement at least 19:33
arkiuat nemokosch, please do the measurement.
that would be putting the burden of proof where it belongs
nemokosch I don't think anybody should get the upper hand in mere speculations
arkiuat and then figure out a way to convert Str to Int that doesn't also incidentally Strs that encode Reals that aren't Ints
incidentally truncate, that is
nemokosch after all, I didn't imply that a coercive overload would make div too slow (compared to the pre-2024.02 case) 19:34
arkiuat I'm afraid that's the pot calling the kettle black, nemokosch. The change in 2024.02 relaxing S03's stipulations was made on the basis of speculations that were never adequately supported by testing and evidence.
nemokosch I think it is a definite difference that I have at least something we can tell for a fact 19:35
arkiuat lizmat, good point
furthermore, the change in 2024.02 wasn't treated as a breaking change when it fact it broke any code out there (apparently not in published modules because Blin accepted the change) that relied on div and mod raising errors where now they just coerce 19:36
nemokosch also, I agree that perhaps random commits of breaking changes shouldn't go upstream; I never suggested that 19:37
but if we are to decide on something, don't hastily decide based on mere speculations
arkiuat what's done is done, but I thought you were arguing against undoing it
I think it's the initial doing that was done hastily
nemokosch I think even undoing it might be better than the current situation but I wouldn't accept it as a permanent, informed design decision 19:38
it really isn't that, after all
arkiuat the permanent informed design decision is in S03.
we can change, but we need to have very good reasons for doing so. Currently, I don't see any such reasons. 19:39
nemokosch no, it's not there and you know that: you point out there is no reasoning given, and it's not implemented for more than a decade
arkiuat providing the convenience of Cool for two operators that are obvious exceptions to other similar general expectations isn't such a reason, for instance
nemokosch if we can agree on the primary facts, why can't we even agree on the secondary, direct conclusions?
arkiuat whether or not reasoning was added to an already very long spec document has nothign to do with it. It's still a record of the design decision that was made. 19:40
obviously they edited anything out that wasn't directly relevant to providing guidance for writing the initial roast tests 19:41
nemokosch also, Cool has virtually nothing to do with this, for what it's worth
arkiuat I'm just invoking Cool as shorthand for the idea that div and mod should accept s
Str args
nemokosch so what is your principle? backwards compatibility? we have already broken that for years 19:42
also, backwards compatibility imo would still allow for considerations for the future
what I'm gathering is that for you, if something is just, say, 10% better than it used to be, that's not enough 19:43
but then what is in the other side of the scale? 19:44
arkiuat I don't know why you're pretending confusion about the principles that I'm arguing from. I think I've laid them out pretty clearly both here and in comments in issue 504
nemokosch but those are already answered 19:45
arkiuat 10% better? I don't even use mod at all anymore, because there's no point to it. I just use % and .floor instead. It's 100% worse
nemokosch for what it's worth, I think we see literally no point to mod 19:46
unlike div, it's not a common operation
arkiuat If you want to abolish div and mod, then argue for that directly.
But given that they do exist, I think they should behave as specified in S03. 19:47
nemokosch "I don't know why you're pretending"
div and mod are two different cases: div is useful, mod not really
I have never said otherwise
arkiuat I found mod useful, that's why I was distressed when I discovered that it wasn't behaving as specified and stopped using it. 19:48
nemokosch what benefit did it have over just using % ?
arkiuat This was like five months ago, and it's irrelevant 19:50
a stated design decision was overturned carelessly for bad reasons.
nemokosch it's not irrelevant, this was a clear chance to say something that I can understand and acknowledge
it was a chance for the discussion to move forward in a constructive way
arkiuat I'm sorry you can't understand and acknowledge the *relevant* points that I've already made 19:51
You are familiar with the term "derailing", are you not?
nemokosch I could understand them hopefully and I didn't find them convincing
anyway, would you please refrain from steering this in a personal direction? 19:52
arkiuat I'd be happy to do so if you would address the points that I've actually made. 19:53
nemokosch which point do you consider unaddressed?
no idea what changed but now, with company VPN turned on (😬) I could submit a comment 20:21
hooray
20:31 Aedil left
aruniecrisps question, is COERCE still the modern raku standard or is it not? 20:34
lizmat it is, but most of the documentation still lives in vrurg's blog posts :-(
aruniecrisps how do i go ahead and help with adding that documentation to the raku site? 20:35
nemokosch actually, I noticed something very strange
% does use mod_i for integers that fit
/ doesn't do anything similar 20:36
is it possible that % and mod are actually closer in performance than / and div? 20:37
lizmat aruniecrisps by converting vrurg's blog posts into documentation pod ?
nemokosch % seems to outright slightly beat mod.... 20:40
okay, I did it stupid but still, % barely loses to mod 20:42
oh right, / doesn't do this because it's not allowed to 20:45
to be frank, / might be so slow that even $a %% $b ?? $a div $b !! $a / $b might be a win on average 20:47
lizmat please gist the code and the benchmarks you've seen 20:48
nemokosch is Rakudo v2025.12 good enough? 20:50
lizmat yes
20:56 arkiuat left
nemokosch gist.github.com/2colours/99d514f8f...38eb62ca3f 21:09
the results to push certainly have an influence on the runtime because mod can come out faster than div what it's derived of 21:12
21:13 arkiuat joined
arkiuat cool! now I wonder what the same benchmark would look like for 2024.01 21:45
nemokosch this might be your lucky day 21:49
updated 21:55
okay, great... everything got faster for no apparent reason 21:56
at the very least the numbers are relative to each other
I'm inclined to say these are the same numbers with a margin of error 21:59
anyway, point in case: the tendencies between the operators are the same
22:29 oodani left 22:30 oodani joined
"everything got faster" - probably I connected the charger some time between the two measurements; I could update all of them to plugged if you wish 22:32