00:33
<rbuckton>
Source Phase Imports for Stage 3 (cont’d from Day 1) has been added to the schedule as the final item tomorrow
I will not be available in the afternoon tomorrow, per my previously specified scheduling constraint. Given the main concern is one I raised, it would be better if I'm able to be part of that discussion.
00:40
<Chris de Almeida>
rbuckton: Understood. I'm sorry, your constraint didn't mention source phase imports, and thus wasn't considered in the scheduling of the continuation. The time slot for the continuation was the only possible time/day for this item. I'll defer to guybedford and Luca Casonato for how they wish to proceed.
06:31
<ljharb>
littledan: it'd be great if we could ask the stenographer tomorrow to bump up their line length to as close to infinity as possible, and also to autocorrect any multiple spaces down into one, including after a period
06:43
<Ashley Claymore>
I've been running a regex on the notes post meeting to fix up the added line breaks and multiple spaces, we can keep doing this if they can't adjust their setting. (Just as an FYI)
08:10
<Luca Casonato>
Chris de Almeida: any chance we can proceed on thu (in the afternoon overflow)?
11:19
<littledan>
littledan: it'd be great if we could ask the stenographer tomorrow to bump up their line length to as close to infinity as possible, and also to autocorrect any multiple spaces down into one, including after a period
Yes they are working on this (we are in touch by email)
12:22
<Chris de Almeida>
conflicts with KKL's constraint (unavailable Thursday) and JGT's constraint (although it appears JGT constraint is satisfied if it's the 13:00-13:30 slot)
14:54
<Rob Palmer>
Plenary begins in 5 mins!!!
14:54
<bakkot>
chairs: I don't know why I put 45 minutes for float16array, 15 is probably plenty
14:54
<bakkot>
if we end up having 15 minutes somewhere I am happy to do it wheenever
15:05
<Michael Ficarra>
I think stage 4 is always "pending final integration tweaks"
15:05
<Chris de Almeida>
thanks -- I've updated it in the schedule at hackmd
15:06
<Michael Ficarra>
the PR is open, I've reviewed it, and only had minor editorial feedback, nothing that would prevent it from advancing
15:07
<littledan>
Sorry I need to drop due to a medical issue for my partner
15:07
<littledan>
if others could take notes that would be great
15:10
<rbuckton>
conflicts with KKL's constraint (unavailable Thursday) and JGT's constraint (although it appears JGT constraint is satisfied if it's the 13:00-13:30 slot)
I'm reaching out to others on my team to see if someone can be present for the overflow topic this afternoon. Unfortunately, I'm giving a talk in the afternoon that couldn't be rescheduled.
15:11
<littledan>
OK, back
15:13
<Kris Kowal>
I'm reaching out to others on my team to see if someone can be present for the overflow topic this afternoon. Unfortunately, I'm giving a talk in the afternoon that couldn't be rescheduled.
I do not think my presence is critical, though I would love to be present to support the champions. I do not contest the requested changes (or any of the considered options with regard to syntax). Chip will be present to represent Agoric in general.
15:14
<Chris de Almeida>
Luca Casonato: guybedford --- it appears the Thursday slot at 13:00 will work, per KKL's blessing there. sound good?
15:15
Justin Ridgewell
merges https://github.com/tc39/proposal-array-grouping/pull/52 adding a warning to the README
15:17
<Francisco Tolmasky>
Is the best (only?) way to observer IsConstructor in client code to do IsConstructor = X => { try { class extends X { } } catch (e) { return e instanceof TypeError } return true } ?
15:18
<rbuckton>
I'll also state that https://github.com/tc39/proposal-import-reflection/pull/45 addresses my concern. While it is unfortunate that the import.<phase>() format doesn't use a verb for the method name, doing so would break symmetry with the import <phase> static syntax, so I'm not quite so concerned (for example, import instance mod from "url" could have a dynamic version named import.instantiate(url), but that would break the symmetry that ljharb prefers).
15:19
<ljharb>
you have to use Reflect.construct i believe if you support pre-class syntax engines
15:20
<Francisco Tolmasky>
But that has side-effects, or can have side effects, right
15:21
<ryzokuken>
https://github.com/tc39/ecma402/wiki/Proposal-and-PR-Progress-Tracking#stage-3
15:30
<Michael Ficarra>
Francisco Tolmasky: yeah, there's no way to just test for [[Construct]]
15:31
<Francisco Tolmasky>
Michael Ficarra: Is that because class X extends Tested_Value { } also has side-effects (perhaps by having the prototype key be a getter or something)
15:34
<Michael Ficarra>
yeah, I think just the prototype getter
15:37
<Kris Kowal>
Luca Casonato: guybedford --- it appears the Thursday slot at 13:00 will work, per KKL's blessing there. sound good?
I also need to confirm that Chip is willing and able to stand in for me. Please stand by.
15:39
<littledan>
if we have a check mark, we might as well make that check link to the anchor where the urgent info is discussed
15:40
<Chris de Almeida>
prefer not to have a new col on the proposals table that is usually empty, but not a big deal if col is narrow
15:43
<bakkot>
I mildly prefer not to have this in the proposals table just so that there are not multiple sources of truth
15:44
<bakkot>
proposals table links to the readme and readme documents seems like the right balance
15:44
<bakkot>
but I also don't care very much
15:44
<Chris de Almeida>
Kris Kowal: we may be able to move it to Wednesday though. please hold. apologies for the disarray -- tough shuffling with constraints 🙂
15:44
<nicolo-ribaudo>
I mildly prefer not to have this in the proposals table just so that there are not multiple sources of truth
Is the proposals list currently auto-generated?
15:44
<Chris de Almeida>
no
15:45
<ryzokuken>
no
15:45
<Chris de Almeida>
no, and it's missing things as such
15:45
<ryzokuken>
oh, I think to some extent, yeah
15:45
<littledan>
for example the "last presentation" column is pretty outdated
15:45
<ryzokuken>
the website picks up the dataset from the dataset repo
15:47
<littledan>
The summary is for major points raised; people keep dictating the conclusion and calling it the summary. It's OK if we don't have summaries, if people don't want to capture this information.
15:48
<littledan>
the idea of the summary is to make a shorter version of the lengthy discussion above, so we capture more than just the conclusion
15:48
<littledan>
of course dictating the conclusion is a really good practice and we should keep doing it!
15:48
<Michael Ficarra>
Francisco Tolmasky: I did it, but you're not gonna like it
15:49
<Michael Ficarra>
const isConstructor = (a) => { if (Object(a) !== a) { return false; } try { Promise.prototype.finally.call({ constructor: { [Symbol.species]: a }, then(){} }); } catch { return false; } return true; };
15:49
<ljharb>
interesting
15:49
<Francisco Tolmasky>
Why wouldn't I like it? I love it!
15:49
<ljharb>
i assume that only works with a native finally tho?
15:50
<Kris Kowal>
Kris Kowal: we may be able to move it to Wednesday though. please hold. apologies for the disarray -- tough shuffling with constraints 🙂
I’ve confirmed with Chip that you can ignore my constraint! Thanks.
15:51
<Chris de Almeida>
thanks Kris! I think the Weds option may work better for all involved, but waiting on Luca + Guy to proceed
15:53
<Luca Casonato>
Luca Casonato: guybedford --- it appears the Thursday slot at 13:00 will work, per KKL's blessing there. sound good?
yes
15:53
<Luca Casonato>
sorry, responded to wrong message
15:54
<Luca Casonato>
yes to wed
15:54
<Chris de Almeida>
ok, perfect! thank you!
15:57
<Chris de Almeida>
this has the added benefit of offering double the available time (40 mins now instead of 20m)
15:59
<Chris de Almeida>
Source Phase Imports for Stage 3 (cont'd from Day 1) will be Weds afternoon
16:02
<nicolo-ribaudo>

waldemar I just tested this code with the current proposal, and it alerts 5 as expected:

function minusTwo({ set, get }) {
  return {
    set(v) {
      set.call(this, v - 2)
    },
    get() {
      return get.call(this) + 2;
    }
  }	
}

function timesFour({ set, get }) {
  return {
    set(v) {
      set.call(this, v * 4)
    },
    get() {
      return get.call(this) / 4;
    }
  }	
}

class Foo {
  @minusTwo @timesFour accessor bar = 5;
}

const foo = new Foo();

foo.bar = 5;	
alert(`Serializing and de-serializing 5 yields ${foo.bar}`)
16:03
<nicolo-ribaudo>
( https://babeljs.io/repl#?browsers=ie%2010&build=&builtIns=false&corejs=3.21&spec=false&loose=true&code_lz=GYVwdgxgLglg9mABAWxmEBnAKgdzgCgG9EMBTKAGkQHNzEBfASkUIChFEAnckTpNjhzJR8AN2YDBQ8gDoIAQwA2i_FAAWMDFVGIAtIgBMjdoPoUTHWiIkXB3KLyRW5Sles3MA1IYDct-ib0AJCsAaygkLAIiLDIpBgAYnC8RCTkVFYMNhz2jiy2wmLZUmlQLsqqGlqIOgBUiAAsxlJmtlb4xVK5fDSyChXuGMwA9I1-LYEhYRCK8hgYiElw-RwAAqjo2HiIq7HxSbyI8hAQ8RhwnIgARvKXALyIAKx-0wgYUIjAcMsPYKQ4i2-HT84W-Mhu9yePhCSlInBEAAMAMpwmBKGAALzQ1COYAAJog8aRdGROGjFJjsU9EABPGCkRR4hYAEkIXzg4Nu9ARjCAA&debug=false&forceAllTransforms=false&modules=commonjs&shippedProposals=false&circleciRepo=&evaluate=true&fileSize=false&timeTravel=false&sourceType=module&lineWrap=true&presets=env%2Cstage-2&prettier=false&targets=&version=7.21.8&externalPlugins=&assumptions=%7B%7D )
16:07
<littledan>
ljharb: Outermost to innermost feels counterintuitive but if you think about the setters as successively wrapping each other, this is the natural order to fall out
16:07
<littledan>
so the wrapping is what happens inner to outer
16:09
<Justin Ridgewell>
ljharb: it'd need a queue, which is a very different design
16:10
<shu>
yeah
16:10
<ljharb>
a different design for who? spec/implementations, decorator authors, or decorator users?
16:10
<shu>
for the proposal itself
16:10
<Justin Ridgewell>
I think the order of setters is correct, because this would be how it'd behave if you manually wrapped a class method
16:10
<shu>
for all stakeholders you list
16:10
<Justin Ridgewell>
Also, the order of getters is correct (as discussed earlier)
16:11
<HE Shi-Jun>
This issue is complex... I'm not sure I fully understand the issue and the consequences of each solution...
16:11
<shu>
like, i don't think of any use case for multiple decorators, legacy or standard, is "accumulate into a list, which is evaluated (setters, getters, initializers) in order later"
16:11
<shu>
if that is the model you think it ought to be, that's a redesign
16:13
<ljharb>
const timesTwo = x => x * 2; const minusFour = x => x - 4; const wrapped = x => minusFour(timesTwo(x)); is what i'd expect
16:13
<shu>
IOW, mental model of decorators is replacement, so if you want multiple decorators to apply, you need to make a new wrapper that calls the old one
16:13
<rbuckton>
Similar to what @littldan said, decorators are like layers. You pass a value down through the layers when setting, and bring it back up through the layers when getting. So for @A @B x, setting traverses -> A -> B -> x, and getting traverses <- A <- B <- x.
16:13
<shu>
it sounds like your mental model of decorators is linear list of hooks
16:13
<shu>
which is not what it is
16:14
<nicolo-ribaudo>
Note that the order of operations is different from order of function calls. Setters change the value before passing it to the next setter, while getters replace it after that it has been received by the next getter (so same order of function calls implies opposite order of transforms)
16:14
<rbuckton>
eemeli: yes, there are a lot of use cases for multiple decorators on an item. far too many to introduce that limitation, imo.
16:15
<nicolo-ribaudo>
Also chairs I'm travelling and I don't have a good connection, if when it's my turn in TCQ I don't reply please let other people go ahead
16:16
<Justin Ridgewell>
nicolo-ribaudo: Would an init() change the order of the calls?
16:17
<Justin Ridgewell>
Like, it seem the same as if we just inits.reverse() in the spec?
16:18
<nicolo-ribaudo>
nicolo-ribaudo: Would an init() change the order of the calls?

Having

init(v) {
  nextInit(v * 2)
}

would allow having the same order of function calls as set() and the same order of transforms

16:18
<Justin Ridgewell>
We'd still have a queue of decorator inits that need to run in some order.
16:18
<nicolo-ribaudo>
Because it transforms the input parameter rather than the return value
16:19
<Justin Ridgewell>
I don't think that's the case?
16:20
<Justin Ridgewell>
The reason set order happens is because there's a defined starting point (the thing that's exposed to the user of the class)
16:20
<rbuckton>

Having

init(v) {
  nextInit(v * 2)
}

would allow having the same order of function calls as set() and the same order of transforms

You would need to be sure to call nextInit with this, or you'd end up with an error.
16:20
<nicolo-ribaudo>
Well you already have that requirement with set and get
16:21
<rbuckton>
Yes, but you don't with init currently.
16:21
<Justin Ridgewell>
The init isn't exposed to the user, so there's not a defined order
16:22
<rbuckton>
As I understand it, engines didn't want to thunkify the initializer.
16:23
<shu>
i don't quite remember the exact pushback
16:24
<shu>
oh, like, per-field, we don't want a per-field initializer function
16:24
<nicolo-ribaudo>
oh, like, per-field, we don't want a per-field initializer function
Yep, that's it
16:24
<nicolo-ribaudo>
Every decorated field would need to have its own initializer function with my proposal
16:27
<Bradford Smith>
Suggestion for fuller explanation: Decompose what happens into individual Object.defineProperty() calls in the order they would execute.
16:30
<rbuckton>
Suggestion for fuller explanation: Decompose what happens into individual Object.defineProperty() calls in the order they would execute.
IIRC, and from implementation, only a single defineProperty is called at the end. You need to show how the wrapping occurs, and step through the wrapped functions.
16:40
<rbuckton>
ljharb: only assigning due to dynamic evaluation seems the opposite of what implementers want. IIRC, for the class to have a stable shape resulting from its declaration, then [Symbol.metadata] must be defined due to syntax, not dynamic evaluation.
16:40
<bakkot>

shu:

class A {}
class B extends A {} // gets A[symbol.metadata], goes to F.prototype
16:40
<shu>
yes, okay,
16:41
<ljharb>
ljharb: only assigning due to dynamic evaluation seems the opposite of what implementers want. IIRC, for the class to have a stable shape resulting from its declaration, then [Symbol.metadata] must be defined due to syntax, not dynamic evaluation.
true, but that means that decorated classes now will suddenly start getting a metadata object
16:41
<shu>
thanks
16:44
<rbuckton>
Are there any shipping implementations of native decorators where that would be a problem? TS and Babel have downlevel implementations, but since this is only recently shipping I have less of a concern for this being a problem for our (TS) users.
16:46
<nicolo-ribaudo>
Babel's implementation requires users to explicitly specify the date of the TC39 meeting (YYYY-MM) that they want Babel to comply with (there were too many changes to do otherwise 😬), so I'm not concerned of this type of breaking changes
17:55
<littledan>
I think the error rate was particularly high in the second hour of the morning, and ljharb noted similarly. I contacted Duane, the owner of the captioning service, and the person who was on during that time block won’t end up repeating for the rest of this meeting; it will be shared by the same two people so they should be able to learn and improve over time. Please be like ljharb and send me any feedback about the notes so I can collect it and ensure it reaches the transcription service.
17:58
<littledan>
true, but that means that decorated classes now will suddenly start getting a metadata object
Honestly I've been thinking of the decorators proposal as work-in-progress until the metadata part is done. So to me this isn't as much of a case of changing what is already out there.
17:59
<Rob Palmer>
Plenary is restarting... now
18:03
<littledan>
About this presentation, I'd sort of like to discuss both topics together before drawing a conclusion
18:04
<littledan>
fine to discuss one first in between of course, just for concluding
18:07
<HE Shi-Jun>
It seems option 1 is more consistent to current iterator behavior?
18:09
<littledan>
I believe the transcription quality is higher this time than last time
18:16
<bakkot>
littledan: "with fallback only on undefined" - do you mean and not null? Symbol.iterator uses undefined or null
18:16
<bakkot>
(because it goes via GetMethod)
18:18
<Bradford Smith>
Aren't iterators always supposed to meet the requirement that myIterator[Symbol.iterator]() === myIterator ? Doing this fallback at all seems weird to me.
18:20
<bakkot>
Bradford Smith: nothing in the language expresses that requirement today, and user-implemented iterators IME usually don't
18:21
<bakkot>
and the main place this fallback comes up is in Iterator.from, which is specifically for taking a userland iterator and getting something which inherits from Iterator.prototype; we want to accept the user iterators people are writing today
18:21
<littledan>
littledan: "with fallback only on undefined" - do you mean and not null? Symbol.iterator uses undefined or null
Oops yeah my mistake for trying to correct notes and participate at the same time
18:22
<Bradford Smith>
Interesting. I'm pretty sure closure-compiler's transpilatoin of for-of and similar things relies on myIterator[Symbol.iterator]() === myIterator
18:22
<Bradford Smith>
I don't think we check for a next() method
18:22
<littledan>
Aren't iterators always supposed to meet the requirement that myIterator[Symbol.iterator]() === myIterator ? Doing this fallback at all seems weird to me.
well yeah we're talking about iterables (anyway that is more a convention than a requirement)
18:22
<bakkot>
Bradford Smith: for-of takes iterables, not iterators, so I don't think it comes up?
18:23
<bakkot>
like the way you work with iterators is always "call the Symbol.iterator method, and then call next on the result"
18:23
<Bradford Smith>
I thought it was a requirement that all iterators are also iterables
18:23
<bakkot>
nothing depends on or expresses that requirement
18:25
<HE Shi-Jun>
Michael Ficarra: Not sure I explained myself clear, I expect we can define a protocol which only have accessors which returns normal value, for example obj[ProtocolA.x] // normal value.
18:25
<Bradford Smith>
So then Iterator.from(x) first tries to treatx as an iterable, then falls back to treating it as an iterator, which doesn't happen to have a Symbol.iterator
18:29
<bakkot>
correct
18:29
<bakkot>
all the iterators in the language (and the web platform / node, and those produced by generators) have the property that myIterator[Symbol.iterator]() === myIterator, so that should work for everything
18:30
<bakkot>
unless you go out of your way to make an iterator which does have a Symbol.iterator which is not just this, in which case, that's on you
18:33
<HE Shi-Jun>
I will support failing early if we can "fix" let [] = {[Symbol.iterator](){return {}} } case...
18:39
<bakkot>
I think option 2 not closing is actually pretty bad
18:39
<bakkot>
well
18:39
<bakkot>
a little bad anyway
18:43
<Michael Ficarra>
bakkot: but it never "opens" either
18:43
<bakkot>
fair
18:44
<bakkot>
at least in the case that you're passing a multiple-shot iterable
18:45
<bakkot>

but not in the case that you're passing an iterator:

function* gen(){ yield 0; }
let it = gen();
[] = it; // close gen
console.log(it.next().done); // true
18:45
<bakkot>
it is weird for the "close gen" thing to happen if you have [x] = it but not [] = it
18:46
<ljharb>
why? if it hasn't touched it why would it need to close it
18:46
<rbuckton>
why? if it hasn't touched it why would it need to close it
Consistency with pattern matching?
18:47
<rbuckton>
A match pattern like [] is exhaustive, thus will close the iterator.
18:47
<ljharb>
pattern matching is still stage 1 and i would assume it would just follow whatever is decided here
18:47
<ljharb>
ah, hmm
18:47
<rbuckton>
pattern matching is still stage 1 and i would assume it would just follow whatever is decided here
It can't if array patterns are exhaustive
18:48
<littledan>
My main feeling is, it doesn't seem worth it to change existing things, and 3 and 4 both seem reasonable to me
18:48
<ljharb>
yeah that kind of falls out of the weirdness of having destructuring not be exhaustive by default, and pattern matching be by default
18:48
<rbuckton>
That said, a match pattern of [] will call next() at least once
18:48
<ljharb>
ah yes, that's true
18:49
<rbuckton>
Actually, I honestly don't know if pattern matching informs whether empty array destructuring patterns should close. There's enough of a difference that we could go either way.
18:54
<HE Shi-Jun>
Sorry, could anyone write a simple example to explain the observable diff between option 2 and 3?
18:54
<ljharb>
(fwiw i don't think the animal names are necessarily consistent across users, but i haven't tested thoroughly)
18:54
<shu>
principle: always be vibin'
19:05
<Michael Ficarra>
can someone who maintains TCQ make it so the reply / new topic / clarifying question / PoO buttons take effect immediately when pressed and then you can enter the topic later?
19:05
<Michael Ficarra>
I'm tired of writing out a topic in the reply just for us to move on :-(
19:06
<ljharb>
bakkot: https://github.com/search?q=language%3Ajavascript+grouptoobject&type=code
19:06
<bakkot>
sorry I meant as a property name specifically
19:06
<bakkot>
but yes
19:06
<bakkot>
I see one or two there which are properties
19:07
<Michael Ficarra>
someone claimed "group" was sufficiently obscure? what?
19:07
<HE Shi-Jun>
bakkot: https://github.com/search?q=language%3Ajavascript+grouptoobject&type=code
I see two or three obj.groupToObject and prototype.groupToObject ... 😅
19:07
<ljharb>
in there i see Group.prototype.toObject but no prototype.groupToObject?
19:08
<ljharb>
either way only 64 results on github is astonishingly rare
19:08
<shu>
yo i have an idea
19:09
<HE Shi-Jun>
What about the static methods? No need to worry the web compat issue.
19:09
<bakkot>
in this particular case I'm fine with static methods
19:09
<bakkot>
but I can imagine having other methods in the future
19:09
<bakkot>
e.g. I would really like a "sortBy"
19:09
<bakkot>
even though it unfortunately cannot be called that probably
19:09
<bakkot>
and it would be a huge shame for that to be static
19:10
<shu>
what if we change the identifier property name grammar such that there's some prefix of code units that doesn't parse for assignments and only parse for get (might need runtime errors too i guess)
19:11
<Willian Martins>
Would it be possible to add it inside iterable helpers?
19:12
<HE Shi-Jun>
Would it be possible to add it inside iterable helpers?
As I understand, it will be a different proposal, might have differnt semantic.
19:12
<Bradford Smith>
Wouldn't it be Object.groupBy() since it returns an object?
19:12
<ljharb>
yeah i actually was thinking that too
19:13
<Michael Ficarra>
Willian Martins: no, we cannot fit a possibly infinite structure into a finite structure
19:13
<bakkot>
https://github.com/tc39/proposal-array-grouping/issues/51#issuecomment-1372786948
19:13
<Willian Martins>
That makes sense. Thanks!
19:13
<bakkot>
Wouldn't it be Object.groupBy() since it returns an object?
that's what's in the PR, yeah: https://github.com/tc39/proposal-array-grouping/pull/47
19:13
<bakkot>
was something else proposed? I missed it if so
19:16
<ljharb>
i think a few of us just misspoke and said "Array.groupBy"
19:17
<bakkot>
ah cool
19:17
<HE Shi-Jun>
There are already some stage 1 proposals of Array.prototype methods. For example Array.prototype.unique
19:18
<Michael Ficarra>
the stage 3 proposal list isn't huge, it shouldn't take long to go through them
19:19
<Michael Ficarra>
https://github.com/tc39/proposals#stage-3
19:22
<littledan>
hey saminahusain !
19:22
<littledan>
Could someone with admin rights give Samina the Custom(10) rights to post here?
19:24
<saminahusain>
Ok, thanks
19:25
<ljharb>
fwiw the group PR has been rebased: https://github.com/tc39/proposal-array-grouping/pull/47 spec is here: https://raw.githack.com/tc39/proposal-array-grouping/static-method/index.html
19:26
<Justin Ridgewell>
i think a few of us just misspoke and said "Array.groupBy"
Yup, I meant Object.groupBy
19:59
<pzuraq>
does anyone know how to say "if a List has at least one element" in spec?
19:59
<pzuraq>
does that statement work?
20:00
<ljharb>
"if a List is not empty"?
20:01
<ljharb>
we're at time so i need to hop off
20:02
<Michael Ficarra>
yeah you want "is not empty"
20:02
<Michael Ficarra>
pzuraq: might want to ask these questions in #tc39-editors:matrix.org next time
20:03
<shu>
what is happening
20:04
<shu>
are we, as tc39 delegates, able to confer IPR protection by forming a TG?
20:04
<bakkot>
I had to step away and did not capture speakers for the last few minutes
20:04
<shu>
like that's cool if we are
20:04
<bakkot>
please could people edit that into the notes
20:04
<bakkot>
if you remember who said what
20:05
<msaboff>
littledan: Since you fit this into a shorter time slot, you could bring this back as overflow later in this meeting for TG4 creation consensus.
20:05
<Michael Ficarra>
littledan: we will also have to assign chairs and (when we get approval for a new document) assign an editor group
20:06
<msaboff>
are we, as tc39 delegates, able to confer IPR protection by forming a TG?
If we create the TG, I think we can.
20:06
<shu>
msaboff: how does the transfer of the existing source maps document work?
20:07
<shu>
or is the idea that we start with safeguarding newly produced IP by forming a new TG within which to produce new IP, then do the transfer and merge later with the existing doc?
20:07
<msaboff>
Not totally sure, but if all the participants are Ecma members it should be straightforward .
20:08
<littledan>
yeah the doc was written by Mozilla + Google so it should be fine
20:08
<shu>
huh, interesting
20:08
<shu>
that's cool
20:09
<littledan>
I'm vaguely sympathetic with the idea that we shouldn't jump straight into making a TG prematurely, but at the same time, adopting liberal IPR policy isn't the "too fast" part--it's really the only option for a modern open standard IMO.
20:09
<littledan>
littledan: Since you fit this into a shorter time slot, you could bring this back as overflow later in this meeting for TG4 creation consensus.
Thanks, yeah, I'd like to do this
20:10
<littledan>
littledan: we will also have to assign chairs and (when we get approval for a new document) assign an editor group
I'd like to nominate myself as chair :) I'm optimistic that we'll have volunteers for editor as soon as I raise it.
20:11
<littledan>
If we create the TG, I think we can.
I believe so too. At the same time, this IPR protection only really kicks in once we publish a standard (that's what the opt out period is for)
20:13
<msaboff>
littledan: I think just as long as those that participated in the current draft release any claim on IP. If it is only Google and Mozilla, that shouldn't be an issue.
20:15
<littledan>
I think it should be fine for us to collaborate on a draft with all the same legal theories that we use to participate in drafting the ECMA-262 spec
21:11
<littledan>
also note that the current source map spec is CC-licensed
21:31
<Ashley Claymore>
const isConstructor = (a) => { if (Object(a) !== a) { return false; } try { Promise.prototype.finally.call({ constructor: { [Symbol.species]: a }, then(){} }); } catch { return false; } return true; };

are Proxies allowed?

function isConstructor(f) {
  let v = false;
  try {
    Reflect.construct(new Proxy(f, {
       construct() { v = true; }
    }), []);
  } catch() {};
  return v;
}
21:43
<pzuraq>
bakkot spec has been updated: https://github.com/pzuraq/ecma262/pull/10/files
21:47
<littledan>
bakkot spec has been updated: https://github.com/pzuraq/ecma262/pull/10/files
I love how small this specification is. It makes me feel like we got it right.
21:48
<ljharb>

are Proxies allowed?

function isConstructor(f) {
  let v = false;
  try {
    Reflect.construct(new Proxy(f, {
       construct() { v = true; }
    }), []);
  } catch() {};
  return v;
}
i still would love one that doesn't require ES6 but i don't think there is one :-/
21:48
<pzuraq>
I love how small this specification is. It makes me feel like we got it right.
I should've listened to you in the beginning, we definitely over designed it at first 😅
21:48
<pzuraq>
but we got there eventually
21:49
<littledan>
the final design is simpler than what I initially proposed
21:49
<littledan>
a lot simpler
22:05
<Kris Kowal>
I’m wondering whether decorators for derived classes are likely to continue to function if the Symbol.metadata of the base class is frozen. But more importantly, hoping there’s somewhere I can putter to find out.
22:20
<Ashley Claymore>
bakkot spec has been updated: https://github.com/pzuraq/ecma262/pull/10/files
I like how Function prototype @@metadata is null. Good hole to plug.
22:21
<Ashley Claymore>
(And non configurable)
22:24
<Ashley Claymore>
I’m wondering whether decorators for derived classes are likely to continue to function if the Symbol.metadata of the base class is frozen. But more importantly, hoping there’s somewhere I can putter to find out.
Maybe we fix the overrride mistake but only for metadata objects? 😎
22:25
<Kris Kowal>
Maybe we fix the overrride mistake but only for metadata objects? 😎
The derived metadata inherits prototypically from the base metadata?
22:29
<ljharb>
yes
22:30
<ljharb>
indeed i think it applies the same way here
22:38
<Kris Kowal>
That seems okay to me.
22:38
<Kris Kowal>
It’s the devil we know, any any case, and I imagine there will emerging convergent behaviors to promote composition of unrelated decorators, favoring disjoint gensyms on metadata when possible.