00:05:36  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
00:30:07  * AtumTquit (Quit: AtumT)
01:26:15  * keith_millerjoined
02:20:14  <devsnek>what do RFTG and RFTC stand for
02:30:01  * cloudshuquit (Quit: Connection closed for inactivity)
02:30:58  <rkirsling>royalty-free task group / tech committee
02:31:31  <devsnek>is there a source on the definitions of those
02:31:45  <rkirsling>yes, will link in other channel
02:42:38  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
02:56:55  * keith_millerjoined
02:59:27  * jwaldenquit (Quit: ChatZilla 0.9.92-rdmsoft [XULRunner 35.0.1/20150122214805])
03:18:16  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
04:26:43  * jmdyckquit (Quit: Leaving.)
04:27:03  * jmdyckjoined
04:28:46  * jmdyck1joined
04:28:46  * jmdyckquit (Read error: Connection reset by peer)
05:07:50  * keith_millerjoined
05:13:47  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
05:29:10  * keith_millerjoined
05:38:51  * jmdyck1quit (Remote host closed the connection)
05:43:32  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
06:26:59  * keith_millerjoined
06:32:39  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
07:21:59  * keith_millerjoined
07:22:44  * keith_millerquit (Client Quit)
08:51:56  <littledan>they are ECMA-specific IP terms. It's about whether we, as a whole, have a royalty-free patent policy, or just a certain sub-group does (where that sub-group happens to contain all of our activities....)
08:52:25  <littledan>Becoming a royalty-free committee as a whole will let us establish official sub-groups, which could be useful for ECMA-402
08:52:52  <ljharb>what does an official sub-group get to do that it couldn't do otherwise?
10:09:35  * akoserwajoined
10:29:13  * obensourcequit (Ping timeout: 245 seconds)
10:43:01  * obensourcejoined
12:08:41  <littledan>well, Allen was often saying that ECMA-402 should be an official TG, rather than an informal call that has no particular status
12:08:46  <littledan>this gives us the infrastructure to do that
12:09:15  <littledan>tbh I was treating this as somewhat lower priority than making sure we had publicized meetings, published notes, and attendees signed the IP form
12:47:24  * jmdyckjoined
14:12:13  * gibson042joined
15:32:30  * akoserwaquit (Quit: Leaving)
17:06:52  * AtumTjoined
17:28:17  * keith_millerjoined
17:54:43  * cloudshujoined
18:18:00  <ljharb>makes sense
18:31:32  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:40:44  * keith_millerjoined
18:46:51  <bradleymeck>ljharb: I have no clue what behavior you are expecting in that issue, I'm quite confused as it seems to conflict with other comments
18:48:21  <bradleymeck>.has / .delete / .get / .set being hooked seems to be ok, but .keys() appears to be being hooked since (rekeyOps === 3) but it is unclear what that means
18:48:31  <bradleymeck>since you have to hold onto bobA or bobB to do that?
18:48:45  <bradleymeck>and that means it could vary if someone mutated bobA or bobB
18:50:58  <bradleymeck>cause map.set(bob, 1); bob.name = 'alice'; shouldn't mutate the .keys() of map
18:56:11  <ljharb>bradleymeck: yeah when i typed out my rekey i realized what i need is both input and output
18:56:29  <bradleymeck>i think output is actually super hard
18:56:33  <ljharb>bradleymeck: and yeah definitely rekeyOps would have to be 2 there :-/
18:56:57  <ljharb>i guess i'm envisioning mostly being able to use rekey to store my *actual* data in a separate weakmap or something
18:57:12  <bradleymeck>for your use, maybe an operation for just enforcing a .is operation for things that === eachother might work
18:57:14  <ljharb>ie, i'd keep a weak ref to the original key, and also my transformed key, and be able to do both conversions
18:57:43  <bradleymeck>mutations like setting the rekey to depend on mutable state makes .keys() change
18:57:47  <ljharb>maybe my use case is better served with a way to override the comparison function from SameValueZero
18:57:58  <ljharb>ie, to override how uniqueness is determined
18:58:02  <ljharb>rather than rekeying
18:58:14  <bradleymeck>might work, ya
18:58:22  * AtumTquit (Read error: Connection reset by peer)
18:59:01  <ljharb>bradleymeck: what use cases of rekey would "reCompare" not address for you?
18:59:41  <ljharb>assuming it would also throw, and then, it would be ran on any operation that currently did SameValueZero
18:59:49  * AtumTjoined
19:01:17  <bradleymeck>ljharb: i'm not sure how recompare would work in a performant fashion
19:01:29  <bradleymeck>iterating all keys wouldn't be good
19:02:43  <bradleymeck>you still need to produce a comparable identity for fast ops, you only need this compare operation for when identities appear equal but shouldn't be treated as such
19:06:06  <ljharb>hmm
19:06:45  <ljharb>ok so maybe instead of a two-arg compare function, a one-arg "give me the value with which I'll perform SameValueZero" - that way internally, the engine can cache the "compare value" for each key, and the callback would only ever be called one per key?
19:07:01  <ljharb>*once per key
19:07:52  <bradleymeck>idk, i'd ask implementors
19:08:43  <ljharb>so, assuming that would be performant, and that you could still throw in it, would it solve your use cases?
19:09:16  <ljharb>i'd be happy to drive or help drive a modified proposal if there's a way to meet all our use cases :-)
19:09:47  <bradleymeck>for swapping out the values? maybe, but i don't fully see the affects of this
19:09:58  <bradleymeck>this is pretty complex vs just doing input sanitization
19:10:13  <bradleymeck>like idk what I would even expect the .keys() to return
19:10:20  <ljharb>oh no what i'm suggesting won't swap out the values
19:10:59  <bradleymeck>well i do want to allow GC of objects
19:11:01  <ljharb>if you added `{ name: 'bob', id: 1 }` and `{ name: 'bob', id: 2 }`, and the compare value was `key.name`, it'd only add the first object
19:11:27  <bradleymeck>idk what that means for map keys, cause i want the obj to GC
19:11:30  <ljharb>hmm
19:11:37  <bradleymeck>for sets it seems ok?
19:11:39  <ljharb>why not a WeakMap then?
19:11:45  <ljharb>perhaps with this compareValue thing
19:11:58  <ljharb>or is it literally because you want the "name" string only as well as discarding the object?
19:12:00  * AtumT_joined
19:12:32  <bradleymeck>i don't know why we would want to hold onto the object, discarding it allows some free'd up memory and leaves us only holding onto the identity values
19:12:40  <bradleymeck>which is what we will be comparing in the future
19:13:02  * AtumTquit (Ping timeout: 244 seconds)
19:13:31  <ljharb>because collections aren't just for testing membership; they're also for being able to extract values
19:13:42  <bradleymeck>a simple separate identity comparator hook that is used instead of SameValueZero seems to be fine, and less complicated
19:13:46  <ljharb>and either way it's a weird inconsistency if the thing i put into the collection doesn't come out in some form
19:14:04  <ljharb>yeah talking it out, that seems way simpler than an actual comparator function
19:14:08  <bradleymeck>i don't understand that statement
19:14:34  <bradleymeck>the point of these hooks is to sanitize what is put in, so what comes out / is compared differs from what is put in
19:14:39  <ljharb>yeah that's weirdly worded, let me think how to rephhrae
19:14:41  <ljharb>*rephrase
19:15:37  * AtumTjoined
19:17:26  * AtumT_quit (Ping timeout: 240 seconds)
19:17:52  <ljharb>ok so maybe what would cover all our wants is these things: 1) a "compareValue" function, that takes one key arg and returns a single value to SameValueZero with; 2) a "mapKey" function, that does what rekey does; and perhaps 3) a future "mapValue" function, that takes one value and returns a replacement value, but ofc mapKey and mapValue only both make sense on Maps, and you'd only want one of them on Sets ? does that seem like a reasonable summary?
19:18:03  * AtumTquit (Read error: Connection reset by peer)
19:18:22  <ljharb>(separate from whether any of those are a proposal you want to drive; just trying to think about the problems and possible solutions)
19:18:50  <bradleymeck>mapKey and mapValue probably both need to exist
19:19:03  <bradleymeck>Sets are phrases as collections of values, so use mapValue
19:19:06  * AtumTjoined
19:20:00  <ljharb>right
19:20:01  <bradleymeck>but a compareValue seems ok as a separate hook, i don't have usage for it though and need to think on it. probably won't be moving forward with that, and it seems like it can be done separate of the mapping hooks
19:20:07  <ljharb>sure
19:20:37  <ljharb>ok so if you're proposing `mapKey` for maps and `mapValue` for sets (irrespective of the name), there seems room to add a comparison value function alongside it as a followon/parallel
19:20:43  <ljharb>i like that
19:38:24  * AtumTquit (Ping timeout: 246 seconds)
19:44:05  * AtumTjoined
19:47:00  * AtumTquit (Read error: Connection reset by peer)
19:47:14  * AtumTjoined
20:31:19  * jwaldenjoined
20:34:05  <TimothyGu>Question: what makes `function a() {} var a;` legal?
20:34:39  <TimothyGu>one of the early errors for Script is "It is a Syntax Error if any element of the LexicallyDeclaredNames of ScriptBody also occurs in the VarDeclaredNames of ScriptBody."
20:34:56  <TimothyGu>couldn't find anything in Annex B either
20:48:16  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
20:57:19  <devsnek>TimothyGu: is there a test262 test for it
20:57:26  <TimothyGu>ah never mind found it
20:57:30  <TimothyGu>devsnek: yeah, a bunch
20:58:01  <TimothyGu>basically LexicallyDeclaredNames of ScriptBody is redirected to TopLevelLexicallyDeclaredNames of the StatementList, which treats FunctionDeclaration like a var-declared name
20:59:08  <devsnek>👌
21:01:59  <rkirsling>interesting, I hadn't gathered the explanation there myself
21:02:13  <rkirsling>just knew that it's legal at top level and illegal in block
21:04:32  <devsnek>this language is too confusing
21:04:54  <bradleymeck>https://www.ecma-international.org/ecma-262/#sec-block-static-semantics-toplevellexicallydeclarednames
21:04:54  * gibson042quit (Ping timeout: 250 seconds)
21:21:33  * gibson042joined
21:29:03  * keith_millerjoined
21:35:37  * pvinisjoined
21:36:25  * pvinisquit (Client Quit)
21:36:26  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
21:36:49  * pvinisjoined
21:36:52  <pvinis>hello
21:37:13  <pvinis>id like to make a proposal, and the github repo has as teh first step to share my thoughts here
21:37:28  <pvinis>is that alright?
21:37:42  <devsnek>sure
21:37:47  <ljharb>pvinis: sure - also see https://github.com/tc39/ecma262/blob/master/CONTRIBUTING.md#creating-a-new-proposal
21:37:51  <pvinis>its a pretty small but useful sugar i think
21:38:13  <pvinis>yes. thats where it said to come here
21:38:21  * keith_millerjoined
21:38:34  <pvinis>so my idea is to create an easier syntax for property getters
21:39:04  <pvinis>currently its like `const obj = { a: 1, get b() {return this.a+1}}`
21:39:15  <devsnek>seems pretty simple
21:39:38  <pvinis>it would be cool to have somehting like `const obj = { a: 1, b: $.a + 1 }`
21:40:04  <devsnek>`b: $.a + 1` is already valid
21:40:11  <devsnek>assuming you have a variable named `$`
21:40:13  <pvinis>and avoid this whole `get return this` stuff
21:40:28  <pvinis>of course, but we can choose any other
21:40:37  <pvinis>i thought of . in the beginning
21:40:55  <pvinis>like { a: 1, b: .a + 1 }
21:41:09  <ljharb>are getters commonly used enough that the sugar is worth it? most styleguides i'm familiar with strongly discourage using getters
21:41:20  <pvinis>which is fine unless i have a number after
21:41:34  <pvinis>oh?
21:41:45  <pvinis>i havent see any like that
21:41:59  <pvinis>what is their suggestion to use instead of getters?
21:42:09  <devsnek>a function?
21:42:10  <ljharb>pvinis: explicit functions
21:42:18  <pvinis>i guess they are not soooo common, but they might be if it was easier to write :D
21:42:40  <ljharb>i think omitting the static `get` keyword would be a bit of a nonstarter thho
21:42:51  <pvinis>hm
21:43:00  <ljharb>and given that the `this` actually depends on how the getter is used, i'm not sure avoiding that keyword is helpful either
21:43:16  <ljharb>(ie, you can do `Object.getOwnPropertyDescriptor(obj, key).get.call(anyReceiver)`
21:43:18  <ljharb>)
21:43:26  <pvinis>you mean for the person writing the code?
21:43:57  <ljharb>for the person reading the code later, whose needs are always more important than the one writing it :-)
21:44:15  <devsnek>i wish it was easier to tell where a generator came from
21:44:36  <pvinis>right, so you think the `get` should be there to signify that its not a hardcoded value but its some calculation?
21:47:30  <ljharb>pvinis: yes
21:47:50  <ljharb>(also, any such sugar would probably need to apply for both object literals and class bodies)
21:50:23  <pvinis>ljharb: sure, but I dont see anything thats bad about that. And the function alternative is pretty verbose too, compared to a possible sugar like `b: .a + 1`
21:58:39  <ljharb>pvinis: verbosity often makes writing code a bit harder, but understanding it a bit easier - and since code is read many many more times than it's written, that seems like a worthy tradeoff when needed
21:59:22  <ljharb>pvinis: also if `b: .a + 1` were to work, i'd expect `.a` to be sugar for `this.a` in any function - and then, it seems like `b: .a + 1` should be equivalent to `b: this.a + 1` which is already a data property :-/
22:03:32  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:04:49  * gibson042quit (Quit: Leaving.)
22:06:00  * keith_millerjoined
22:08:21  * keith_millerquit (Client Quit)
22:09:00  * keith_millerjoined
22:09:06  * keith_millerquit (Client Quit)
22:09:48  * keith_millerjoined
22:17:26  * gibson042joined
22:20:01  * pvinisquit (Ping timeout: 256 seconds)
22:31:19  <bradleymeck>Domenic: i'm rewording some stuff but i think we might be in alignment for what rekey is intended to do
22:35:24  <Domenic>\o/
23:33:08  * gibson042quit (Quit: Leaving.)
23:58:05  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)