🦋 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:02
librasteve left
00:08
jjido left
00:15
librasteve joined
00:20
librasteve left
00:48
librasteve joined
00:53
librasteve left
01:21
librasteve joined
01:26
librasteve left,
hulk joined
01:27
kylese left
01:37
tejr left
01:38
tejr_ joined,
tejr_ is now known as tejr
01:55
librasteve joined
02:00
librasteve left
|
|||
[Coke] | .seen util | 02:12 | |
tellable6 | [Coke], I saw util 2024-04-16T20:36:58Z in #raku: <Util> Summary: (1) we want more Raku talks. (2) Rakudo internals qualifies for the Science track (paper or poster). Thanks! | ||
02:15
hulk left,
kylese joined
02:16
tejr left
02:21
tejr joined
02:31
librasteve joined
02:35
librasteve left
03:04
librasteve joined
03:09
librasteve left
03:25
maylay left
03:31
maylay joined
03:36
librasteve joined
03:41
librasteve left
03:45
kylese left
03:47
kylese joined
03:55
oodani left
03:58
oodani joined
04:11
librasteve joined
04:16
librasteve left
04:38
tejr left
04:44
librasteve joined
04:46
tejr joined
04:49
librasteve left
04:57
tejr left
05:18
librasteve joined
05:19
sjm_ joined
05:22
librasteve left
05:24
soverysour joined
05:39
ACfromTX joined
05:51
librasteve joined
05:59
librasteve left
06:11
librasteve joined
06:15
librasteve left
06:18
soverysour left
06:21
soverysour joined
06:34
tbrowder left,
tbrowder joined
06:44
librasteve joined
06:46
soverysour left
06:49
librasteve left
06:57
PotatoGim left,
PotatoGim joined
07:07
Aedil left
07:13
librasteve joined
07:17
librasteve left
07:18
wayland76 joined
07:25
jjido joined
07:28
Sgeo left
07:45
librasteve joined
07:49
soverysour joined
07:55
librasteve left
08:11
soverysour left
08:27
jjido left
09:22
librasteve joined
09:29
avuserow left
09:34
avuserow joined
09:40
human-blip left
09:56
nine left
09:57
nine joined
09:58
nine left
09:59
nine joined
10:02
nine left
10:03
nine joined
10:20
librasteve left
10:47
librasteve joined
10:48
merp left
10:50
merp joined
10:52
librasteve left
11:33
librasteve joined
11:47
sjm_ left
11:48
human-blip joined
12:03
librasteve left
12:15
librasteve joined
|
|||
Geth | ¦ problem-solving: slavenskoj assigned to codesections Issue Towards an AI-powered Raku github.com/Raku/problem-solving/issues/481 | 12:17 | |
12:19
librasteve left
|
|||
Geth | ¦ problem-solving: lizmat unassigned from codesections Issue Towards an AI-powered Raku github.com/Raku/problem-solving/issues/481 | 12:30 | |
12:30
sivoais left
12:31
sivoais joined
12:50
librasteve joined
12:54
librasteve left
13:01
leah2 left
13:03
leah2 joined
13:19
librasteve joined
|
|||
ugexe | I suspect they’ve never had to review code generated by ai at any real level | 13:22 | |
Nor have they had to review ai code reviews at any real level | 13:23 | ||
13:23
librasteve left
|
|||
ugexe | I have and it is one of the biggest issues I deal with because it is impossible to properly review mass amounts of code berated by someone with little understanding of the workings directing an ai | 13:24 | |
It might even be the single biggest issue I deal with as an engineering manager | 13:25 | ||
s/berated/generated/ | 13:27 | ||
The main problem here being the magnitude of output | 13:33 | ||
13:52
librasteve joined
13:55
Aedil joined
13:59
librasteve left
|
|||
lizmat | ugexe: mind if I add these comments to the issue ? | 14:01 | |
specifically irclogs.raku.org/raku/gist.html?,2...6-27Z13:33 | 14:05 | ||
14:18
Sgeo joined
14:25
librasteve joined
14:42
simcop2387 left
|
|||
SmokeMachine | What is “the xz incident”? Sorry if I shouldn’t be asking that… | 14:50 | |
Voldenet | en.wikipedia.org/wiki/XZ_Utils_backdoor | 14:52 | |
AI-generated docs are mostly ok, a lot better than no docs at all | 14:55 | ||
they should only contain info about being automatically generated | |||
SmokeMachine | Voldenet: thanks | 14:56 | |
Voldenet | iirc AI-written tests (both white and blackbox) are often not testing what they should | 14:57 | |
whitebox often test behaviors that are not guaranteed, blackbox skip testing important things | 14:58 | ||
so these tests can become truly evil, because they give false sense of safety net, but the net isn't attached to anything solid | 15:01 | ||
or rather, AI needs to be instructed on what has to be tested | 15:02 | ||
15:11
human-blip left
15:13
human-blip joined
15:21
simcop2387 joined
15:24
librasteve left
15:26
librasteve joined
15:30
melezhik joined
|
|||
melezhik | o/ | 15:30 | |
Anyone has an experience calling Raku from c++ ? | 15:31 | ||
lizmat | eh... perhaps Perl's Inline::Perl6 module could serve as inspiration (although that may have bitrotted significantly) | 15:32 | |
15:34
librasteve left
|
|||
melezhik | Thanks Liz. I thought maybe someone has already something with that regards . Maybe I will go with just “spawn Rakudo process” way , extremely inefficient but probably ok for my purposes … | 15:35 | |
15:44
librasteve joined
15:45
soverysour joined,
soverysour left,
soverysour joined
15:49
librasteve left
|
|||
disbot3 | <apogee> What's best practice for shipping a module with a C FFI dependency? | 15:51 | |
lizmat | ugexe may have some ideas about that | 15:54 | |
disbot3 | <apogee> I'm writing a wrapper for Tokenizers | 15:56 | |
<apogee> Then probably onnx | |||
<apogee> Oh hm onnx has one | 15:57 | ||
<apogee> Thats good | |||
<apogee> ⚠️ Important: Due to a bug in Raku's module precompilation system when using NativeCall with function pointers, the bindings cannot be packaged as a traditional Raku module. Instead, use the standalone scripts provided. Oh 😄 | 15:58 | ||
lizmat | is that still true ? | ||
disbot3 | <apogee> Not sure, it's on the ONNX::Runtime readme | ||
<apogee> Looks like it was 11 days ago. | 15:59 | ||
lizmat | aah... well, there's no reference to any issue afaics | 16:00 | |
ah, yes, AI generated module | |||
disbot3 | <apogee> So probably not a Raku issue? | 16:01 | |
lizmat | well, what can I say: If the AI, or its manager, doesn't report problems, we cannot fix them | ||
16:01
soverysour left
16:03
soverysour joined,
soverysour left,
soverysour joined,
orangebot joined
16:09
librasteve joined,
Aedil left
16:13
Aedil joined
|
|||
disbot3 | <apogee> I'll try to confirm the issue later & report if I can with a minimum reproduction example. | 16:19 | |
lizmat | apogee fwiw I did github.com/slavenskoj/raku-onnx-bi...s/issues/1 | 16:21 | |
disbot3 | <apogee> Nice, if they don't reply I'll try to reproduce the issue. | 16:26 | |
<apogee> I've been meaning to take a look at the Rakudo sources | |||
<apogee> And MoarVM | |||
16:28
librasteve left
16:29
librasteve joined
|
|||
disbot3 | <apogee> I want to optimize that Simplex implementation and it's hard without seeing how the bytecode gets compiled/optimized and run. | 16:29 | |
<apogee> I'd imagine using native types would help | 16:30 | ||
lizmat | yes, as I suggested yesterday ? | ||
disbot3 | <apogee> Yeah | ||
<apogee> I just need to get it done 😄 | |||
<apogee> Your help is much appeciated. I did some of the low hanging fruit stuff but it was so hot yesterday I ended up falling asleep before getting back to it. | 16:31 | ||
lizmat | heh.. upper 90s (35C) expected here for next Tue/We | 16:32 | |
d | |||
disbot3 | <apogee> But it'll be nice to be able to understand the whole stack, what happens under the hood etc. C is very comfortable for me, I'm new to Raku. | ||
lizmat | well, C questions will be mostly answerable by people on #moarvm | 16:33 | |
disbot3 | <apogee> Yeah it's not quite that hot here but I live on a boat and no AC. 😄 | ||
<apogee> 80 right now at 5.30pm | |||
[Coke] | we just spent 2 days in the car with it 95-100F outside. | ||
[Coke] melts at the thought of no ac | |||
disbot3 | <apogee> Yeah I'll hop on IRC over the weekend | ||
<apogee> Yeah here in the UK heat tends to be a passing thing | |||
<apogee> There's no space on the boat for a proper AC unit, could probably get a caravan unit on | 16:34 | ||
<apogee> But those are pricy. | |||
16:35
librasteve left
|
|||
[Coke] | I used to be OK with no AC, but then I spent 1.5 years in Houston, Texas, and was spoiled for it. | 16:37 | |
disbot3 | <apogee> Yeah I spent a couple of years in Florida and also got spoiled on it. | ||
[Coke] | Nearly everything was AC'd all year, and I don't want to go through the withdrawal. | 16:38 | |
disbot3 | <apogee> Yeah was similar in Tampa | 16:40 | |
16:47
soverysour left
|
|||
SmokeMachine | ab5tract: I must be doing something wrong... usercontent.irccloud-cdn.com/file/.../image.png | 16:47 | |
16:47
soverysour joined,
soverysour left,
soverysour joined
|
|||
SmokeMachine | ab5tract: if I did not misundtood it, it should print 42, no? | 16:50 | |
[Coke] | You want .result.say | 16:56 | |
otherwise you're saying the promise itself, not the result of the promise | |||
m: await Promise.kept(42).andthen: { .result.say } | 16:57 | ||
camelia | 42 | ||
ab5tract | SmokeMachine: you need to `use v6.e.PREVIEW` | 16:58 | |
or `use 6.*` | |||
SmokeMachine | oh! of course, sorry! | ||
[Coke] | ? that doesn't seem to change the result of the .say, does it? | 16:59 | |
ab5tract | ]Cok | ||
[Coke]: R#5917 and R#5892 | |||
linkable6 | R#5917 [open]: github.com/rakudo/rakudo/pull/5917 New andthen/orelse for 6.e | ||
R#5892 [open]: github.com/rakudo/rakudo/issues/5892 Promise.andthen and Promise.orelse could provide the .result or .cause directly. | |||
SmokeMachine | now it's working! sorry ignoring that was guarded for v6.e... | 17:00 | |
ab5tract | your thoughts appreciated on those tickets | ||
SmokeMachine: no worries! | |||
[Coke] | as long as it's guarded, no issues here. | 17:01 | |
17:01
human-blip left
|
|||
[Coke] | m: use v6.e.PREVIEW; await Promise.kept(42).andthen: { .say } | 17:01 | |
camelia | Promise.new(scheduler => ThreadPoolScheduler.new(uncaught_handler => Callable), status => PromiseStatus::Kept) | ||
[Coke] | Just checking, is that change only in a branch right now? (or PR?) | 17:02 | |
SmokeMachine | usercontent.irccloud-cdn.com/file/.../image.png | ||
ab5tract | indeed. it's SmokeMachine's job now to try and break it :) | 17:03 | |
17:03
human-blip joined
|
|||
ab5tract | [Coke]: note the third example in that screenshot is the one I'd most like feedback on. The branch currently implements as JS does, where the promise result is awaited if Awaitable | 17:04 | |
er, if the result of the andthen block is a promise it is awaited if Awaitable, sorry | |||
I'm back and forth on whether that's too much action at a distance or not.. but today I'm leaning towards it being the better semantics | 17:05 | ||
SmokeMachine | I like very much using that with JS... | 17:06 | |
ab5tract | yeah I've warmed up to it. And it fits the name "andthen" (also "orelse") in that I can understand why a user would expect it to be blocking | 17:08 | |
17:09
human-blip left
|
|||
[Coke] | I like usability | 17:09 | |
As long as it's not too... fiddly? | 17:10 | ||
This feedback probably not entirely useful. :) | |||
17:10
librasteve joined
|
|||
ab5tract | you've more or less described my position, so.. :) | 17:10 | |
17:11
human-blip joined
|
|||
ab5tract | So if someone really wanted/needed the promise "itself", I believe a `start { start { ... } }` would do it | 17:11 | |
17:12
orangebot left
|
|||
SmokeMachine | or use `then` instead of andthen/orelse... | 17:14 | |
ab5tract | even better! | 17:15 | |
17:16
vrurg_ joined,
vrurg left
|
|||
SmokeMachine | should infix andthen/orelse work as the methods? | 17:18 | |
17:37
vrurg joined
|
|||
Voldenet | ab5tract: very nice addition - but consider using `$!result` in orelse too | 17:38 | |
instead of self | |||
17:40
vrurg_ left
|
|||
Voldenet | also, maybe consider `sub try-await($value) { nqp::istype($value, Awaitable) ?? …` | 17:40 | |
17:40
melezhik left
|
|||
Voldenet | so then it can become `try-await code($!result)` | 17:41 | |
fwiw my attempt, it also has failing test 0x0.st/8l0Y.raku | 17:42 | ||
because I didn't build try-await yet | 17:43 | ||
one thing I find not nice about it is that it doesn't strictly behave like await | 17:44 | ||
m: use nqp; say await [Promise.kept(1), Promise.kept(2)]; say nqp::istype([Promise.kept(1), Promise.kept(2)], Awaitable) # array with Awaitable gets awaited, but is not Awaitable directly | 17:45 | ||
camelia | (1 2) 0 |
||
[Coke] | Do we want to have REA modules as part of the standard blin test? | 17:47 | |
ww | |||
SmokeMachine | I have used something similar (but opposite) in a project... something like: `multi my-await(Awaitable $a) { my-await await $a }; multi my-await($a) { $a }` | ||
Voldenet | so instead… | 17:48 | |
SmokeMachine | (it could also have a Positional candidate... but I didn't need that at time...) | 17:49 | |
(maybe the returning Awaitable from andthen/orelse could be on await instead of on those modules... that way it would work for "everuthing"...) | 17:51 | ||
Voldenet | m: my $x = [Promise.kept(1)]; say nqp::istype($x, Awaitable) || nqp::istype($x, Any) && nqp::istype($x.are, Awaitable) | 17:52 | |
camelia | ===SORRY!=== Error while compiling <tmp> Could not find nqp::istype, did you forget 'use nqp;' ? at <tmp>:1 ------> kept(1)]; say nqp::istype($x, Awaitable)<HERE> || nqp::istype($x, Any) && nqp::istype( |
||
Voldenet | m: use nqp; my $x = [Promise.kept(1)]; say nqp::istype($x, Awaitable) || nqp::istype($x, Any) && nqp::istype($x.are, Awaitable) | ||
camelia | 1 | ||
Voldenet | However, await-all variant needs to be called for Array of Awaitable | 17:53 | |
m: use nqp; my $x = [Promise.kept(1)]; say nqp::istype($x, Awaitable) || nqp::istype($x, Any) && $x.are(Awaitable) | |||
camelia | True | ||
Voldenet | right, this works as well | ||
17:55
melezhik joined
|
|||
melezhik | . | 17:55 | |
SmokeMachine | glot.io/snippets/h8ozutcapu | ||
17:56
soverysour left
|
|||
SmokeMachine | Voldenet: but does that all need to be Awaitable? couldn't it be a single value inside that array? | 17:57 | |
Voldenet | yes, all value arrays need to be awaitable | 17:58 | |
erm | |||
all array values | |||
m: await [Promise.kept(1), 42]; # or this happens | 17:59 | ||
camelia | An operation first awaited: in block <unit> at <tmp> line 1 Died with the exception: Can only specify Awaitable objects to await (got a Int) in block <unit> at <tmp> line 1 |
||
SmokeMachine | but why? shouldn't be possible to await a single value inside an array? | ||
(as the code on my link example) | 18:01 | ||
usercontent.irccloud-cdn.com/file/.../image.png | 18:04 | ||
Voldenet | SmokeMachine: single value inside an array doesn't need to be awaited | 18:10 | |
SmokeMachine | why not? | ||
18:12
librasteve left
|
|||
Voldenet | SmokeMachine: …well, they are resolved already, aren't they | 18:19 | |
though maybe I'm too fixated on how `await` currently works | |||
SmokeMachine | not that awaitable one... | ||
[Coke] | japhb, patrickb: github.com/Raku/Blin/blob/coke/cle...al.rakumod | 18:21 | |
18:25
librasteve joined
18:30
librasteve left
|
|||
ab5tract | Voldenet: I interpreted that the request for orelse was to have the cause, so not sure what you mean | 18:33 | |
orelse by its nature doesn't have a value for $!result? | 18:34 | ||
jdv | does Text::Diff::Sift4 test clean for anyone? | 18:35 | |
i get fail on head and 2025.03 | |||
Voldenet | ab5tract: well `.cause` is using `$!result` directly, I added github comment that should add more clarity | 18:36 | |
I'm assuming that .andthen and .orelse should use the lowest level possible, so they can avoid pointless overhead | 18:37 | ||
otherwise they could be implemented in `.then` in saner way: | |||
[Coke] | Uho, the essentials is bisecting PDF? | 18:38 | |
ab5tract | I don't really understand your comment, sorry | 18:39 | |
18:40
human-blip left
|
|||
Voldenet | ab5tract: if `$!status == Broken`, then `my \final-result := code(self.cause);` can become `my \final-result := code($!result);` | 18:40 | |
ab5tract | on the one hand you want to avoid overhead with self.cause (which does more than just $!result, it has conditional logic in it) | ||
on the other hand you are suggesting to wrap $*AWAITER.await, and I can't see a reason for that | 18:41 | ||
18:41
human-blip joined
18:42
soverysour joined
|
|||
Voldenet | ab5tract: `await $x` can also operate on Array of Awaitables, which is… debatable, but to maintain the consistency I this should be supported in andthen/orelse | 18:42 | |
ab5tract | Can you give an example as to how an array of awaitables can be supplied to andthen/orelse? | 18:44 | |
ah, sorry, you mean as a result of the block | |||
Voldenet | m: say await await Promise.kept(5).andthen( $p -> { [Promise.kept($p.result)] }) | ||
camelia | ===SORRY!=== Error while compiling <tmp> Variable '$p' is not declared. Perhaps you forgot a 'sub' if this was intended to be part of a signature? at <tmp>:1 ------> ay await await Promise.kept(5).andthen( <HERE>$p -> { [Promise.kept($p.result… |
||
Voldenet | m: say await await Promise.kept(5).andthen( -> $p { [Promise.kept($p.result)] }) | 18:45 | |
camelia | (5) | ||
jdv | [Coke]: so SmokeMachine can run that module's test clean on "some linux"? | ||
Voldenet | it's more obvious when you do things like this: | ||
[Coke] | jdv: ? | ||
.seen masterduke17 | 18:46 | ||
tellable6 | [Coke], I saw masterduke17 2025-06-20T20:26:50Z in #raku-dev: <MasterDuke> Undeclared routine: evo used at line 1` | ||
jdv | ok, you mean verified the failures? | ||
Voldenet | $db.getUser(login => "test").andthen(-> $user { [$db.getProfile($user.id), $db.getAvatarUrl($user.id)] }) | 18:47 | |
[Coke] | jdv: ? | ||
Voldenet | or $db.get-user(login => "test").andthen(-> $user { [$db.get-profile($user.id), $db.get-avatar-url($user.id)] }) | ||
ab5tract | I don't know. That just makes me start flipping back to thinking it is more appropriate for the user to manager their own awaits | ||
SmokeMachine | jdv: I do not have "some linux" here... | 18:48 | |
that would be the equivalent to return a Promise.all-of, right? | 18:49 | ||
jdv | SmokeMachine: ok. but you can reproduce the test failures? | 18:50 | |
Voldenet | ab5tract: perhaps so, in fact in most languages `await` only handles single awaitable and for arrays there are more obvious helpers `Promise.all-kept`, `Promise.all-broken`, `Promise.all` etc. | ||
(`all` is unfortunate naming) | |||
SmokeMachine | I'm start thinking that the "recursive" await should be on await (or a new &recursive-await) instead of on andthen/orelse... and it's easy enough to just instead of `return returns-promise()` to `return await returns-promise()`... | 18:53 | |
Voldenet | yes, but await is a method | 18:56 | |
e | |||
m: say await Promise.kept(Promise.kept(2)).andthen(await *.result) # nope | |||
camelia | An operation first awaited: in block <unit> at <tmp> line 1 Died with the exception: Can only specify Awaitable objects to await (got a WhateverCode) in block <unit> at <tmp> line 1 |
||
Voldenet | m: say await Promise.kept(Promise.kept(2)).andthen(*.result.&await) # uh | 18:57 | |
camelia | 2 | ||
SmokeMachine | m: multi my-await(Awaitable $a) { my-await await $a }; multi my-await(@a) { @a.map: { my-await $_ } }; multi my-await($a) { $a }; say my-await Promise.kept(Promise.kept(2)).andthen(await *.result) | 18:59 | |
camelia | An operation first awaited: in block <unit> at <tmp> line 1 Died with the exception: Can only specify Awaitable objects to await (got a WhateverCode) in block <unit> at <tmp> line 1 |
||
SmokeMachine | m: multi my-await(Awaitable $a) { my-await await $a }; multi my-await(@a) { @a.map: { my-await $_ } }; multi my-await($a) { $a }; say my-await Promise.kept(Promise.kept(2)).andthen(*.result) | 19:00 | |
camelia | 2 | ||
SmokeMachine | Voldenet: ^^ | ||
Voldenet | m: multi my-await(Awaitable $a) { my-await await $a }; multi my-await(@a) { @a.map: { my-await $_ } }; multi my-await($a) { $a }; say my-await Promise.kept([Promise.broken(1), Promise.in(5)]).andthen(*.result); say now - BEGIN now | 19:01 | |
camelia | An operation first awaited: in sub my-await at <tmp> line 1 in block <unit> at <tmp> line 1 Died with the exception: 1 in sub my-await at <tmp> line 1 in block <unit> at <tmp> line 1 |
||
Voldenet | m: multi my-await(Awaitable $a) { my-await await $a }; multi my-await(@a) { @a.map: { my-await $_ } }; multi my-await($a) { $a }; say my-await Promise.kept([Promise.broken(1), Promise.in(5)]).andthen(*.result).orelse( -> $p { 5 }); say now - BEGIN now | ||
camelia | An operation first awaited: in sub my-await at <tmp> line 1 in block <unit> at <tmp> line 1 Died with the exception: 1 in sub my-await at <tmp> line 1 in block <unit> at <tmp> line 1 |
||
Voldenet | a very long line this becomes | 19:02 | |
anyway, if you just do `map`, you will not await for all the results if the first dies | |||
[Coke] | anyone know of an irc channel for cpantesters? | 19:04 | |
Voldenet | `my $file = open("x"); recursive-await Promise.kept(2).andthen( $p -> { [Promise.broken("foo"), start { $file.write("got $p"); }] }); $file.close` # if you don't await all the results, this might fail somehow, because the file is closed | 19:06 | |
so instead Promise.allof would have to be used, but it only handles array of awaitables :( | |||
SmokeMachine | but if the first dies, it it does m: multi my-await(Awaitable $a) { my-await await $a }; multi my-await(@a) { @a.map: { my-await $_ } }; multi my-await($a) { $a }; say my-await Promise.kept([Promise.broken(1), Promise.in(5)]).andthen(*.result).orelse( -> $p { 5 }).andthen: {"1"}; say now - BEGIN now | 19:07 | |
m: multi my-await(Awaitable $a) { my-await await $a }; multi my-await(@a) { @a.map: { my-await $_ } }; multi my-await($a) { $a }; say my-await Promise.kept([Promise.broken(1), Promise.in(5)]).andthen(*.result).orelse( -> $p { 5 }).andthen: {"1"}; say now - BEGIN now | |||
camelia | 1 0.060420252 |
||
Voldenet | it should finish after 5 seconds | ||
[Coke] | (cpantesters) never mind, got what I needed. | 19:09 | |
SmokeMachine | I was going to write that the it would not wait for the other promise... | 19:11 | |
19:13
guifa joined
19:17
guifa left
19:22
librasteve joined
19:23
Aedil left
|
|||
Voldenet | m: sub my-await($a) { my @n = $a.map: { $_ ~~ Awaitable ?? $_ !! Promise.kept($_) }; await Promise.allof(@n); await @n }; say await Promise.kept([Promise.broken(1), Promise.in(2)]).andthen({ my-await .result }).orelse( -> $p { say $p.cause; 5 }); say now - BEGIN now | 19:24 | |
camelia | An operation first awaited: in sub my-await at <tmp> line 1 in block at <tmp> line 1 Died with the exception: 1 in sub my-await at <tmp> line 1 in block at <tmp> line 1 5 2.062931677 |
||
SmokeMachine | Voldenet: why should it wait 5 secs? | ||
m: m: try await Promise.broken(1), Promise.in: 5; say now - BEGIN now | |||
camelia | 0.040709131 | ||
Voldenet | SmokeMachine: when you run multiple async operations, they run independently - some operations could fail, some operations could succeed - after awaiting you close resources used for the operations | 19:25 | |
…otherwise, promise is never awaited, it's running in the background with nothing ever awaiting it, so the program could even close in the middle of it | 19:26 | ||
SmokeMachine | but it seems await breaks fast... as shown on my lass piece of code... | ||
19:26
librasteve left
|
|||
Voldenet | yeah, it seems that `await(@)` is `await Promise.anyof(@)` actually, it's a choice | 19:27 | |
SmokeMachine | (I think that makes sense...) | 19:28 | |
I think I'll create a recursive-await module... | 19:31 | ||
Voldenet | in fact, what I think that when working on arrays of promises, there's no shorthand for `await for all promises, then continue with results if none of them failed` | 19:39 | |
19:43
guifa joined
19:48
librasteve joined
|
|||
ab5tract | so do I hear two votes in favor of leaving auto-await out of andthen/orelse? | 19:53 | |
20:00
melezhik left
20:12
soverysour left
20:14
librasteve left
|
|||
guifa | Does anyone know what happened to the old P6 exegesis docs? | 20:24 | |
Working on a history of presentation for the conference this weekend and I can't seem to find them anymore | |||
[Coke] | guifa: good question. | 20:32 | |
the syn are at github.com/Raku/old-design-docs | |||
jdv | web.archive.org/web/20221219205436....raku.org/ | ||
is the best i can do | |||
guifa | jdv: thanks! | 20:33 | |
grrr | |||
[Coke] | www.perl.com/authors/damian-conway/ looks like it has a bunch of them still | 20:34 | |
guifa | ah actually it was apoca that I needed but jdv's link worked | ||
jdv | which is here?: github.com/Raku/raku.org/tree/main...design/exe | ||
so github.com/Raku/raku.org/tree/main...design/apo | 20:35 | ||
guifa | hrm I think I ended up on a different github | ||
jdv | what a twisty maze of yesteryear | ||
[Coke] | mmm | ||
guifa | I'm going to be starting from Perl v0 up through MooseX::Declare to Perl 6 to Raku to Corinna (aka "you didn't want a good thing then, but apparently now you do lol") | 20:38 | |
jdv | nice | 20:41 | |
guifa | except ruth pushed my talk from Sunday to Saturday and it was at 0% written as of about an hour ago :) | 20:42 | |
20:42
librasteve joined
|
|||
guifa | codesections got sick and couldn't make it :-( | 20:42 | |
Voldenet | ab5tract: not entirely – basic await is a good idea, but `await []` is not that useful | 20:43 | |
[Coke] | guifa - thanks for stepping up! | ||
ab5tract | ok | ||
[Coke] | I'll give you a drink ticket if that helps. :) | 20:44 | |
guifa | hahahaha | ||
honestly getting it done for tomorrow means I can enjoy Saturday night more fully | |||
also sounds like I'm going to be put on a call with damian to get more deets on the history side. now I'm really wishing i had more time to write this talk | |||
20:47
librasteve left
|
|||
Voldenet | around the topic of await - `multi await(*@ --> Array)` says `Waits until one or more promises are I<all> fulfilled, and then returns their | 20:47 | |
...values` | |||
My question is: what does `fullfilled` in the context mean and is the behavior of broken promise in that array specified in roast? | 20:49 | ||
20:50
guifa left
|
|||
Voldenet | `Waits until one or more promises are kept or until first promise is broken` would be more reality-aligned | 20:50 | |
ab5tract | we could adjust the behavior in 6.e to align with the docs :) | 20:51 | |
Voldenet | what I mean: | 20:52 | |
m: { CATCH { default { }}; say await [Promise.broken(0), Promise.in(1)] }; say now - BEGIN now # this breaks early | |||
camelia | 0.042674309 | ||
ab5tract | Ah, I missed the ambiguity in the docs there ("one or more") | 20:53 | |
paired with "are all" | |||
Voldenet | github.com/Raku/roast/blob/master/...ng-await.t -- this specifies breaking on the first promise, but doesn't specify that all of them have to be completed | ||
ab5tract | I honestly feel like it should have always been `allof` and not `anyof` | 20:54 | |
but I guess we have methods on Promise for that .. | 20:55 | ||
Voldenet | it's kind of anyof | ||
anyof has other problem -- it gives you "True" | |||
erm, allof | |||
20:55
jjido joined
|
|||
Voldenet | m: { CATCH { default { }}; my @x = [Promise.broken(0), Promise.in(1)]; say await Promise.allof(@x); say await @x }; say now - BEGIN now # typical usage of anyof :( | 20:56 | |
camelia | True 1.032650659 |
||
SmokeMachine | Is the event happening tomorrow? Is it going to be recorded? | 20:57 | |
21:07
bartolin joined
21:15
guifa joined
21:16
librasteve joined
21:20
guifa left
|
|||
tbrowder | hi, i’m back trying to use multi sub MAINs instead of trying to roll my own. is there some way to define a set of default values of named options so they are auto-included with selected multi MAIN subs? | 21:21 | |
21:22
librasteve left
|
|||
SmokeMachine | m: multi MAIN(:$bla = "something default") { say $bla } # tbrowder something like this? | 21:38 | |
camelia | something default | ||
jdv | why do we still get "Merging GLOBAL symbols failed: duplicate definition" errors these days? | 21:42 | |
i thought lexically scoping is cleaner now | 21:43 | ||
i think its because 2 versions of the same module are being used | |||
lizmat: github.com/lizmat/IRC-Client/issues/66 is not resolved methinks | |||
21:49
librasteve joined
|
|||
tbrowder | SmokeMachine: no, thanks, not exactly. when i get a chance, i’ll provide a gist expanding on my question. | 22:13 | |
22:25
jjido left
22:30
librasteve left
23:00
librasteve joined
23:05
librasteve left
|
|||
lizmat | jdv: zef install IRC::Client is clean for me? | 23:15 | |
23:16
tejr joined
|
|||
lizmat | anyways, too tired to look at now, first sleep& | 23:16 | |
23:34
librasteve joined
23:40
librasteve left
|
|||
Voldenet | SmokeMachine, ab5tract: github.com/rakudo/rakudo/issues/5919 - relevant to andthen and orelse - thoughts? | 23:56 |