00:54:54  * cloudshuquit (Quit: Connection closed for inactivity)
00:58:39  * keith_millerjoined
00:59:38  * keith_millerquit (Client Quit)
01:36:50  * keith_millerjoined
01:46:16  * aki_joined
01:47:05  * akirosequit (Ping timeout: 244 seconds)
01:47:05  * aki_changed nick to akirose
02:05:01  * AtumTquit (Quit: AtumT)
02:38:11  <ljharb>devsnek: what do you mean throw
02:39:19  <devsnek>ljharb: GetOwnProperty can return abrupt
02:40:16  <devsnek>but the algorithm for determining if an array is sparse doesn't use any form of completion handling
02:43:17  <ljharb>devsnek: yeah it does seem like the `[[GetOwnProperty]]` call should have a `?` - but i don't read that as meaning "that algorithm is observably followed", only "if it *were* followed, it'd return true"
02:43:45  <devsnek>honestly this entire section is just scary
02:44:06  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
02:44:13  <devsnek>there is stuff lower down about the object being exotic but the way there are different sections seems like it should mean something
02:45:10  <TimothyGu>devsnek: what section are you talking about
02:45:22  <devsnek>https://tc39.github.io/ecma262/#sec-array.prototype.sort
02:45:29  <TimothyGu>ah I was just gonna say
02:45:40  <devsnek>there are three sections describing cases where implementation defined behaviour should be used
02:45:50  <devsnek>and then a fourth section describing the constraints
02:45:59  <TimothyGu>lol
02:46:06  <devsnek>and then the magical section talking about comparefn
02:46:25  <TimothyGu>just use a mergesort + insertion sort combo, like URLSearchParams.prototype.sort
02:46:51  <devsnek>muh timsort
02:47:12  <TimothyGu>suit yourself, it's harder to implement
02:51:53  <ljharb>sort is way underspecified imo :-/ far too much impl-dependent stuff
02:52:23  <ljharb>it also talks about "well-behaved comparison functions", but it doesn't seem like they're defined completely enough, and it doesn't talk about what happens when it's not one
02:53:08  <devsnek>that magic section i was referring to defines how a well behaved comparison function should work but it infers you need to call the function like 20 times for each pair of elements
03:06:56  * keith_millerjoined
03:14:12  * gibson042quit (Ping timeout: 252 seconds)
03:29:32  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
03:51:59  * aki_joined
03:52:38  * akirosequit (Ping timeout: 244 seconds)
03:52:38  * aki_changed nick to akirose
04:19:08  * jmdyckquit (Quit: Leaving.)
05:30:07  * jwaldenquit (Quit: g'night all)
05:58:40  * aki_joined
06:00:06  * akirosequit (Ping timeout: 252 seconds)
06:00:06  * aki_changed nick to akirose
06:56:42  * keith_millerjoined
06:57:51  * isHavvyquit (Ping timeout: 252 seconds)
07:06:52  * Havvyjoined
07:11:57  * srl295quit (Quit: Connection closed for inactivity)
07:21:20  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
07:39:00  * keith_millerjoined
08:04:54  * aki_joined
08:05:58  * akirosequit (Ping timeout: 246 seconds)
08:05:58  * aki_changed nick to akirose
09:13:33  <annevk>https://github.com/tc39/ecma262/pull/1330#issuecomment-430081979 is great, ideally that logic would also apply to new symbol traps affecting hosts going forward
09:16:53  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:31:16  * keith_millerjoined
09:32:37  * keith_millerquit (Client Quit)
10:10:34  * keith_mi_quit (Read error: Connection reset by peer)
10:10:39  * aki_joined
10:11:09  * keith_millerjoined
10:12:00  * akirosequit (Ping timeout: 252 seconds)
10:12:00  * aki_changed nick to akirose
12:17:20  * aki_joined
12:18:56  * akirosequit (Ping timeout: 276 seconds)
12:18:57  * aki_changed nick to akirose
13:04:46  * keith_mi_joined
13:11:54  * jmdyckjoined
14:02:43  * keith_mi_quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
14:23:20  * caiolimajoined
14:23:33  * aki_joined
14:24:00  * akirosequit (Ping timeout: 244 seconds)
14:24:00  * aki_changed nick to akirose
15:22:07  * keith_mi_joined
15:47:53  * cloudshujoined
16:24:03  * jwaldenjoined
16:31:18  <ljharb>annevk: if there's any places you find that are missing a ? or a !, please do file an issue or a PR :-D
16:31:22  * akirosequit (Ping timeout: 246 seconds)
16:32:17  * akirosejoined
16:53:22  <annevk>ljharb: was it settled whether this applies to things that don't return completion records?
16:54:19  <ljharb>annevk: hm, i don't remember it being brought up - but `?` is ReturnIfAbrupt which handles both values and completion records, and `!` i believe is just an assertion that it's not an abrupt completion (so a non-completion would work)
16:54:33  <ljharb>seems fine to me to apply the syntax to everything it makes sense on
16:58:00  <annevk>There was a discussion about that at some point brought up by anba(?)
16:58:35  <ljharb>ah, what was his position?
16:58:36  <annevk>https://github.com/tc39/ecma262/issues/496
16:58:47  <annevk>and https://github.com/tc39/ecma262/issues/497
16:59:48  <annevk>also https://github.com/tc39/ecma262/issues/486
16:59:53  <annevk>which I raised
17:00:05  <annevk>there's some other issues under the completion records label as well that seem related
17:00:32  <annevk>seems it was jmdyck not anba btw
17:01:43  <ljharb>on 496, i think i prefer if all abstract ops returned completion records
17:01:54  <ljharb>but lacking that, i think the implicit unwrapping helps things be readable
17:02:41  <ljharb>so far tho it seems like it's been reviewed case by case, and we've consistently gone with using ?/!
17:04:08  <annevk>I guess it's mostly good, but some architecture decisions on how this works would be good to avoid case-by-case
17:05:06  <ljharb>agreed
17:07:08  <jmdyck>I didn't raise the question of whether !/? apply to values other than completion records: they're clearly defined so that they can.
17:16:42  <jmdyck>One of my objections to the idea that every operation returns a completion record is that, from the point of view of static type analysis, the return type becomes completely uninformative.
17:17:48  <ljharb>wouldn't it be CompletionRecord<T> instead of just T?
17:18:16  <jmdyck>depends what you thinkn T is
17:19:35  <jmdyck>For useful analysis, I want info that is in both the [[Type]] and [[Value]] fields of the Comp record.
17:20:59  <devsnek>`NormalCompletion<V> : Completion<V>` and etc
17:21:44  <jmdyck>Not sure what the colon denotes there.
17:22:17  <ljharb>i'd assume that each completion type was its own subtype of Completion, but i'm sure you could model it in a bunch of ways
17:23:27  <devsnek>jmdyck: a subclass/subtype whatever you wanna call it
17:24:33  <devsnek>the big problem that you get with not everything returning completions is the need for a coercion helper
17:25:17  <jmdyck>I'm doubtful that Completion<V> would be useful.
17:25:19  <devsnek>in engine262 we have `EnsureCompletion` whenever we explicitly need a completion
17:25:20  <ljharb>since we want ? and ! anyways for an assertion or ReturnIfAbrupt, the need for coercion seems like it's not a big deal
17:26:48  <jmdyck>In my world, you don't need to do coercions.
17:27:13  <jmdyck>Because you don't have a record that's "standing in" for some other value.
17:28:34  <jmdyck>There are still abrupt completions, and you (generally) have to detect and handle them (via ?/!, e.g.)
17:29:47  <jmdyck>but you don't have to 'coerce' what remains into a useful value, it already just is.
17:35:47  <jmdyck>You never need to coerce a language value into a normal-completion-record-containing-that-value, because the value is fine as it is, and normal completion records don't exist.
17:38:21  <devsnek>until something asks about the [[Type]] of the result of some evaluation or something
17:43:14  <jmdyck>You wouldn't ask the [[Type]] unless you knew you had an abrupt completion.
17:45:40  <jmdyck>So pseudocode that currently checks if [[Type]] is ~normal~ would certainly need to be rewritten, but there's only about a dozen such.
18:38:49  * aki_joined
18:39:37  * akirosequit (Ping timeout: 250 seconds)
18:39:38  * aki_changed nick to akirose
20:44:40  * aki_joined
20:45:36  * akirosequit (Ping timeout: 252 seconds)
20:45:36  * aki_changed nick to akirose
20:59:27  * leobalter_fancy_part
21:46:07  * arkainrdkjoined
21:49:52  * arkainrdkquit (Read error: Connection reset by peer)
22:27:12  * arkainrdkjoined
22:37:56  * arkainrdkquit (Ping timeout: 244 seconds)
22:50:23  * aki_joined
22:51:28  * akirosequit (Ping timeout: 246 seconds)
22:51:28  * aki_changed nick to akirose
23:17:24  * AtumTjoined
23:23:31  * keith_mi_quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
23:48:24  * arkainrdkjoined
23:49:56  * AtumT_joined
23:51:17  * bpaytonjoined
23:52:51  * AtumTquit (Ping timeout: 244 seconds)
23:54:25  * AtumT_quit (Client Quit)
23:57:33  * arkainrdkquit (Ping timeout: 252 seconds)
23:59:49  * gibson042joined