00:10 soverysour joined, soverysour left, soverysour joined 00:14 lichtkind__ left 00:17 eseyman left 00:18 eseyman joined 00:31 soverysour left 00:48 gabiruh left, gabiruh joined 00:58 soverysour joined, soverysour left, soverysour joined
ugexe m: my $p = Promise.new; my $then-p = $p.then(sub ($r) { die "error" }); try { $p.keep(42) }; say $!; say "Original: {$p.status}"; say "Then: {$then-p.status}"; 00:58
evalable6 (Any)
Original: Kept
Then: Planned
ugexe m: my $p = Promise.new; my $then-p = $p.then(sub ($r) { die "error" }, :synchronous); try { $p.keep(42) }; say $!; say "Original: {$p.status}"; say "Then: {$then-p.status}"; 00:59
evalable6 Too few positionals passed; expected 1 argument but got 0
in sub at /tmp/hR8tMb0Ugj line 1
in block <unit> at /tmp/hR8tMb0Ugj line 1

Original: Kept
Then: Planned
ugexe using :synchronous causes that error here: github.com/rakudo/rakudo/blob/f1c1...kumod#L184 because it isn't passing 01:01
but then other issue is it says Then: Planned which means it will never transition out of that state 01:02
and another one: 01:03
m: my $p = Promise.kept(42); my $result = $p.then({ .result + 1 }, :synchronous); say $result.^name; say $result ~~ Promise;
evalable6 Int
False
ugexe .then(:synchronous) on a already kept promise returns raw value instead of Promise 01:04
m: my $p = Promise.new; my $result = $p.then({ .result + 1 }, :synchronous); say $result.^name; say $result ~~ Promise; # when using a promise that isnt already kept 01:05
evalable6 Promise
True
01:07 soverysour left
ugexe it seems like .andthen(:synchronous) and .orelse(:synchronous) have teh same issues 01:08
01:29 topnep left 01:30 topnep joined 01:54 soverysour joined 02:00 kylese left, hulk joined 02:12 soverysour left 02:15 hulk left, kylese joined 02:29 soverysour joined, soverysour left, soverysour joined 02:33 soverysour left
Voldenet ugexe: I remember there's PR for improving these methods github.com/rakudo/rakudo/pull/5917 (though I don't think that PLANNED-THEN was changed anyhow there) 02:45
in fact, .then(:synchronous) is not documented either – I'm not sure what's it for 02:46
.then and similar are kinda forgotten api, I've thought of this improvement too - github.com/rakudo/rakudo/issues/5919 02:49
either way, .then(…, :synchronous) seems like a very weird way to say `then(…).&await` 02:54
but in a way that lets the caller do `if we already have the result, we don't await` 02:56
nobody left docs for it so I have no idea what did it originally do 02:58
apogee_ntv raku.land/zef:apogee/Template::Jinja2 Going to bed now. :D 03:20
03:34 topnep left 03:36 topnep joined 03:41 annamalai joined
ugexe github.com/ugexe/rakudo/commit/6fe...a1486bc764 03:46
patrickb dunno if those bugs are interesting to you or not
maybe :synchronous wasn't meant to be a public api 03:47
04:16 Aedil joined
Voldenet ah, the whole api is the result of deadlocking internals, I'd consider separate method, SYNC-THEN maybe 05:25
patrickb I added :synchronous out of the need to solve a race condition in Lock::Async. I think without a good external use case it should stay an internal feature.
Voldenet so .andthen and .orelse don't really need :synchronous probably 05:27
and this PR can be simplified github.com/rakudo/rakudo/pull/5917 05:29
(it adds auto-awaiting to `andthen/orelse` -> `if-kept/if-broken`) 05:31
05:33 soverysour joined, soverysour left, soverysour joined
patrickb m: my $p = Promise.new; my $then-p = $p.then(sub ($r) { die "error" }); try { $p.keep(42) }; say $!; say "Original: {$p.status}"; say "Then: {$then-p.status}"; 05:36
evalable6 (Any)
Original: Kept
Then: Planned
patrickb why doesn't the then promise trigger?
is that expected? 05:37
05:37 soverysour left
Voldenet I think promises are not expected to evaluate in any specific order or on a specific thread 05:41
m: my $p = Promise.new; my $then-p = $p.then(sub ($r) { say $*THREAD; die "error" }); try { $p.keep(42) }; say $!; say "Original: {$p.status}"; say $*THREAD; say "Then: {$then-p.status}";'
evalable6 (exit code 1) ===SORRY!=== Error while compilin…
Voldenet, Full output: gist.github.com/b6f97b7bb38e601505...928865a897
Voldenet m: my $p = Promise.new; my $then-p = $p.then(sub ($r) { say $*THREAD; die "error" }); try { $p.keep(42) }; say $!; say "Original: {$p.status}"; say $*THREAD; say "Then: {$then-p.status}";
evalable6 (Any)
Original: Kept
Thread #4 (GeneralWorker)
Immortal Thread #1 (Initial thread)
Then: Planned
Voldenet expecting anything else will introduce subtle bugs 05:42
I wouldn't even expect promise being kept synchronously in this case – it seems to be, but it just happens to be implemented that way 05:49
so the result could be any of: `(Any)␤Original: Planned␤Then: Planned␤` `(Any)␤Original: Kept␤Then: Planned␤` `(Any)␤Original: Kept␤Then: Broken␤` 05:52
oh, and there's no need to `try { $p.keep(42) }` - it should never normally fail 05:55
C# has various options in TaskCreationOptions that can influence where, when and in what order the task will be executed – in the past synchronous execution could lead to deadlocks, so RunContinuationsAsynchronously was added 06:03
but currently it's hard to force .net core to execute such code on the same thread 06:05
06:10 soverysour joined, soverysour left, soverysour joined
Voldenet so I'm suspecting that every sane programmer will reach the same conclusion eventually – it's hard to prevent deadlocks when anything is done synchronously in Promises 06:11
06:15 soverysour left 06:19 soverysour joined, soverysour left, soverysour joined 06:26 soverysour left 06:31 annamalai left
patrickb ah, the reason the `then` isn't run is because the program ends before it has a chance to do so. So when the program would continue running, the `then` would eventually be executed? 06:34
I can dig into the synchronous thing and ponder it a bit. But I'd be grateful for any feedback if that functionality is considered to have any value apart from that internal usage I initially added it for. 06:36
06:42 abraxxa joined 06:47 abraxxa left 06:48 abraxxa joined 06:52 sibl joined
Voldenet oh, I forgot 07:03
m: my $*SCHEDULER = CurrentThreadScheduler; my $p = Promise.new; my $then-p = $p.then(sub ($r) { die "error" }); try { $p.keep(42) }; say $!; say "Original: {$p.status}"; say "Then: {$then-p.status}"; # you can enforce this
evalable6 (Any)
Original: Kept
Then: Broken
Voldenet patrickb: I'm not fully sure if simply changing the scheduler wouldn't work here 07:08
07:11 abraxxa left
Voldenet nevermind, it won't work 07:11
because scheduler is a property of a promise, so then it'd force the whole protect-or-queue-on-recursion to be synchronous :( 07:13
07:13 abraxxa joined 07:20 abraxxa left 07:21 abraxxa joined 07:25 soverysour joined 07:29 abraxxa left 07:35 abraxxa joined, Sgeo left 07:40 abraxxa left 07:41 abraxxa joined 07:44 soverysour left 07:45 topnep left 07:46 soverysour joined, topnep joined 07:54 sibl left 08:16 dakkar joined 08:21 annamalai joined 08:25 abraxxa left 08:28 abraxxa joined 08:35 abraxxa left, abraxxa joined 09:10 soverysour left 09:25 sibl joined 09:48 sibl left 09:49 sibl joined 09:50 topnep left 09:51 topnep joined 09:55 soverysour joined, soverysour left, soverysour joined 10:02 sibl left 11:06 abraxxa left 11:08 abraxxa joined 11:13 librasteve_ left, abraxxa left 11:15 abraxxa joined 11:21 sibl joined 11:35 sibl left 12:38 sibl joined 13:42 soverysour left
[Coke] ended up following ugexe's suggestion and made github.com/coke/task-raku-dev# and updated my local script to install from that. 13:46
This should save me tens of seconds! :)
ugexe patrickb: i think the exception thing would be an issue even for internal use 13:53
m: my $p = Promise.new; my $then-p = $p.then(sub ($r) { die "error" }, :synchronous); try { $p.keep(42) }; say $!; say "Original: {$p.status}"; say "Then: {$then-p.status}";
evalable6 Too few positionals passed; expected 1 argument but got 0
in sub at /tmp/c6r9DhKP_u line 1
in block <unit> at /tmp/c6r9DhKP_u line 1

Original: Kept
Then: Planned
ugexe the catch handler expects 1 argument here: github.com/rakudo/rakudo/blob/f1c1...kumod#L228
but we don't pass an argument here: github.com/rakudo/rakudo/blob/f1c1...kumod#L184 13:54
14:00 topnep left 14:01 topnep joined 14:32 atcroft left 14:34 patrickb left, greenfork left, ab5tract left, skaji__ left, SmokeMachine left, nicole left, zostay left, thowe left, tbrowder left 14:36 thowe joined 14:39 sibl left 15:25 patrickb joined, greenfork joined, ab5tract joined, skaji__ joined, SmokeMachine joined, nicole joined, zostay joined, tbrowder joined 15:35 patrickb left, greenfork left, ab5tract left, skaji__ left, SmokeMachine left, nicole left, zostay left, tbrowder left, nicole joined, greenfork joined, skaji__ joined, patrickb joined, zostay joined, SmokeMachine joined, tbrowder joined, ab5tract joined 15:38 sibl joined 15:48 sibl left 16:05 topnep left 16:06 topnep joined 16:20 erooke_ left, erooke joined
tonyo tbrowder++ 16:29
much appreciated, man
16:35 dakkar left
[Coke] antoncube - LLM::Functions fails its tests on win 16:49
once I install all the other stuff, will open a bug. 16:51
apparently in my little subset of things I'm installing for zef, I have one requirement for HTTP::Tiny 0.2.5, and one for 0.2.6. :P 17:01
s/for/with/
apogee_ntv github.com/Raku/tap-harness6/issues/64 17:07
Found an issue in TAP that breaks prove6 on escape sequences leaking. This affects mi6 and zef install specifically. Perl5 prove works. 17:08
17:11 soverysour joined, soverysour left, soverysour joined
timo is there a TAP spec that rigidly defines what should happen when there's unrecognized stuff of any kind in the TAP stream? 17:12
apogee_ntv Don't know but it breaks any tests that need terminal raw mode and emit escape seqs. 17:14
17:15 soverysour left
apogee_ntv github.com/m-doughty/Notcurses-Native - Example (see the t/ and xt/ split and the nasty helper function I had to make to get xt/ to pass at all). 17:21
[Coke] Data::Dump *still* broken on windows, it's been over a year.
tonyo: ^^ 17:22
added some more details, let me know if there's some other thing I can run to give data.
tonyo i thought that issue was resolved?
i'll take a look but don't have a way to test
[Coke] the original one might, but the ticket was still open - just tested it again, failed, pasted in the error from this time. 17:24
one of the dumps is giving `undefined` instead of `(Nil)` 17:25
and, it seems, throwing an exception while it's doing it. (only running 1 test of 3)
tonyo i'm removing that now
[Coke] If you want to put diagnostic output in a branch or something, I can run it on windows and give you the output.
tonyo do you have the repo locally?
[Coke] yes
tonyo alright give me a minute and i'll push directly so you can pull
apogee_ntv raku.land/zef:apogee/Notcurses::Native Anyway got this uploaded, it's only low level bindings but if anyone wants to build TUI stuff :D 17:26
tonyo can you run t/08 ? that should have output prior to dying
apogee_ntv Probably wont work on Windows without a lot of faff, notcurses on Windows is notorious. 17:27
[Coke] commented on issue
tonyo ahh i see 17:31
give me a second to rework these
tyty
what is $*KERNEL.Str on win? 17:33
[Coke] win32 17:37
tonyo can you do a pull and run the tests again? 17:45
should account for any diff across platforms
[Coke] main? 17:46
may "Dubious, test returned 255", followed by "all x subtests passed" 17:48
*many
if I try to run 08 again by hand, I get "Cannot resolve caller min(Any:U: ); none of ...
tonyo let me see if it's easy for me to get a windows vm so i don't need to keep bugging you 17:49
sorry about that, kind of assumed the core fix would fix the rest of the issue 17:50
[Coke] I can hook you up with one in azure if you need.
... but that might be a problem for future me. 17:51
I'm going to go take a nap or something. cheers. Thanks for trying to dig in!
tonyo np, i should have it working shortly. i think i see what's happening 18:13
18:23 annamalai left, soverysour joined, soverysour left, soverysour joined 18:24 annamalai joined
tonyo m: my $d; say Nil|Any ~~ $d.WHAT 18:49
evalable6 True 18:50
tonyo on windows: PS C:\Users\tonyo\Documents\dd> raku -e 'my $d; say Nil|Any ~~ $d.WHAT;' => False
[Coke]: when you're feeling fresh again can you pull & give it a go? not sure what to make of the CORE emissions but it should pass/work 19:01
and then if that passes for you too then i'll bump v and pub
ugexe that cannot resolve caller error might be a precomp error 19:09
ah i guess not. sometimes stale precomp files result in cannot resolve errors which is why i mentioned that 19:11
19:14 [Coke] left 19:25 abraxxa1 joined 20:39 soverysour left
patrickb ugexe: Thanks for the investigation and ping! I'll definitely look into this. 20:41
20:55 kylese left 20:56 kylese joined 21:10 [Coke] joined
[Coke] back online for a bit, going to check... 21:19
tonyo: HEAD works now on windows! 21:22
... wait 21:23
'zef test .' worked. 'zef install .' gave me "cannot unbox a type object (Str) to a str"
same issue with 'zef install <git repo url>' 21:28
lizmat tonyo: are we sure that's the same version of Rakudo ? 21:50
22:00 abraxxa left 22:01 abraxxa1 left 22:11 soverysour joined 22:15 soverysour left
[Coke] oh, very likely not. let me upgrade my rakudo 22:32
my windows is at 2025.10
now zef test . passes but is very noisy 22:35
type Any, type Mu uninit warnings
same warnings on install, but install is successful.
wonder what changed.
22:48 simcop2387 left
[Coke] does 'zef install --serial' stop after *any* module fails to install? (I've run it a few times and it I think it's got some randomization, and so I've had two different failures running it twice. (I kind of want it to install *everything it can*, even if something fails, if there's another thing that doesn't depend on it, it should install that too) 23:06
(this is especially helpful on windows where I'm not sure if a module on my huge list of dev modules will work)
tonyo i tested on 2026.03 23:07
[Coke]: you want i should pub as is to at least get you going or should i try to reduce noise first?
yeh, same version of raku - behaves differently on windows than on linux for that specific comparison 23:10
[Coke] I'm installed from git at the moment. 23:12
If you want to take some time and clean things up, I'm fine with that. 23:13
23:15 simcop2387 joined
tonyo i'll give it a go tonight but it didn't seem easy, i wonder if reversing the check so it doesn't go through the linux check first is as easy as it is 23:16
ugexe [Coke]: --serial makes more sense when zef does not use staging repos because it prevents extra modules from being installed. when zef does use staging repos if a test fails then none of the modules are installed so there isn't really a reason to use --serial 23:22
but yeah --serial is basically a no-op when installing to a staging repo, i.e. any of the default repos 23:23
installing *with* a staging repo rather
[Coke] ugexe: is there an option for my use case here (which I admit is rare) - install everything possible from the deps list, omitting only those that fail tests and have no failing deps? 23:39
23:40 Aedil left
[Coke] (I basically want it to get down to a "here are the modules you want to use that fail on windows" without having to go through one a time. 23:40
ugexe no 23:48
personally i wouldnt worry much about the "and have no failing deps" part. i'd run something like `zef install Whatever --debug --force-test` and grep for [FAIL] or just feed all the output to an llm and ask it what failed 23:54