00:55
<ljharb>
confirmed - when i sign into teams with my microsoft account, i have no ability to change my name or profile picture just for teams, it's forced to be whatever my global account's name/picture are. i had to sign out so i could customize my display name
00:59
<rkirsling>
yeah I'm trying my work computer today so I'll see if it's different this way tooo
00:59
<rkirsling>
-o
01:02
<littledan>
has the meeting started yet? I'm having trouble getting in
01:02
<rkirsling>
they're managing entry individually
01:04
<wsdferdksl>
We just started
01:05
<littledan>
OK, I'm still seeing "When the meeting starts, we'll let people know you're waiting."
01:05
<wsdferdksl>
The chairs requested that only the chairs let folks in
01:06
<littledan>
OK, it doesn't seem like Teams is really working out, either from a technical or moderation perspective
01:09
<rkirsling>
littledan: I don't disagree :-/
01:09
<littledan>
oh, I think I was going into the wrong link, and that's why it wasn't loading
01:09
<littledan>
so, I can't blame Teams for this :)
01:15
<rkirsling>
I love the use of "yadda yadda" in a proposal explanation
01:17
<michaelficarra>
non-BMP *scripts* is the more appropriate term
01:21
<haxjs>
Let's split string.p.item to a follow-on proposal!
01:24
<rkirsling>
haxjs: if it gets removed from this proposal, then yeah, anybody could champion it separately
01:26
<haxjs>
I think maybe we can use codepoint-safe access on string.p.item, but it obviously need further discussion
01:27
<littledan>
our language does support grapheme clusters now, thanks to Intl.Segmenter! :)
01:27
<devsnek>
v8BreakIterator :)
01:27
<littledan>
not like that!
01:27
<keith_miller>
ljharb: It would have a perf impact if you did it enough
01:27
<ljharb>
noted
01:28
<littledan>
I can understand the argument that we should have .item(), but I don't understand the argument that, without it, the proposal isn't ready for Stage 3
01:28
<keith_miller>
Maybee you could optimize out the array but I doubt any engine does that
01:28
<littledan>
strings are missing other things that logically *could* be defined on them, for example map
01:28
<rkirsling>
re-rope-ification? :p
01:28
<devsnek>
translate
01:28
<michaelficarra>
are the Intl people working on a grapheme cluster iterator?
01:29
<devsnek>
michaelficarra: Intl.Segmenter
01:29
<rkirsling>
yeah it includes iteration
01:29
<michaelficarra>
it has a grapheme cluster mode?
01:29
<michaelficarra>
I only remember it doing like word/sentence stuff
01:29
<devsnek>
yes! and its stage 3!
01:29
<michaelficarra>
cool
01:30
<rkirsling>
admittedly I never thought to test it with emoji but now I want to
01:31
<ljharb>
jorendorff: lol, they might be less confused about what item does - most users don't know about code points or graphemes or whatnot
01:31
<Bakkot>
the benefit of adding this is purely for developers; the cost paid for the bugs is paid by users
01:32
<Bakkot>
there are more of the latter
01:32
<Bakkot>
by a lot
01:32
<ljharb>
i'm very skeptical to the implication that the existence of `item` on strings is going to increase the likelihood that these sort of bugs will happen
01:32
<keith_miller>
jorendorff: But yeah you can't do random access on a UTF-16 without it being O(n)
01:32
<keith_miller>
As far as I know
01:32
<keith_miller>
Which is a big O.o to 99% of JS users...
01:33
<ljharb>
s/skeptical to/skeptical of
01:33
<rkirsling>
devs not knowing about code points doesn't mean it's okay that they don't know about code points
01:33
<apaprocki>
(Like timezones)
01:33
<michaelficarra>
Bakkot: users that are usually disconnected from the development process and will be invisible
01:33
<ljharb>
rkirsling: sure, agreed, but it does mean they're less likely to be confused about `.item`, and if they know about code points, they'd already know about the difference presumably?
01:34
<Bakkot>
michaelficarra right
01:34
<michaelficarra>
(clarification: their pain will be invisible, not the users)
01:35
<gibson042>
`Array.from( (new Intl.Segmenter("en", {granularity: "grapheme"})).segment("Moto\u0308rhead") )`
01:35
<littledan>
how about a straw poll?
01:36
<rkirsling>
littledan: vocally?
01:36
<littledan>
(I agree with Mark's take)
01:36
<rbuckton>
We need better ways to measure and manipulate strings for all 3 scenarios (code unit, code point, grapheme cluster)
01:36
<rkirsling>
I really want to see this advance either way
01:36
<gibson042>
agreed
01:37
<Bakkot>
ljharb if we leave it out, and people reach for it, they might learn why it's not there and learn the correct thing to do
01:37
<Bakkot>
if we add it, there is no chance of that
01:37
<michaelficarra>
I don't think indexing on either code points or grapheme clusters is a good idea, since it's a linear operation
01:37
<Bakkot>
they will be guaranteed to ship the bug
01:37
<haxjs>
maybe we could land item() but add codepoint-safe methods like codePointItem(), codePointSlice() etc.
01:38
<keith_miller>
haxjs: I'd prefer we do something like String("content", { format: "utf-32" })
01:38
<leobalter>
start with Assertions please :)
01:38
<rkirsling>
haxjs: I mean you have a point there; if the key is that `item` and `[]` are consistent then having other means of dealing with code points feels more consistent
01:38
<mmarchini>
Computers are hard
01:38
<ljharb>
Bakkot: that is certainly possible. i am very skeptical they'd do any more thinking about it than just doing `str.slice(-1)[0]` or `str[str.length - 1]`
01:38
<haxjs>
keith_miller: I also support that idea!
01:38
<rbuckton>
i.e., `.codePointCount`, `.graphemeCount`, `.nthCodePoint(n)`, `.nthGrapheme(n)`, `.isLowSurrogate(i)`, `.isHighSurrogate(i)`, etc.
01:38
<ljharb>
haxjs: i like that idea
01:38
<keith_miller>
haxjs: That said, it's way more work for browsers lol
01:39
<keith_miller>
but it's also much faster in the long run
01:39
<devsnek>
rbuckton: `nthWord`, `nthSentence`
01:39
<keith_miller>
since you don't have to have O(n) codePointItem()
01:39
<brad4d>
did we skip item #20 on tcq or did I just miss it somehow?
01:39
<devsnek>
brad4d: skipped
01:39
<rkirsling>
rbuckton: that's a whole new library at that point though
01:39
<rbuckton>
devsnek: Those would be `Intl` features :)
01:39
<Bakkot>
ljharb certainly some would, but also almost certainly some wouldn't
01:39
<rkirsling>
ahhh
01:39
<Bakkot>
some might, e.g., do `[...foo].item(-1)`
01:40
<devsnek>
rbuckton: graphemeCount and nthGrapheme are intl as well
01:40
<Bakkot>
which is at least more correct
01:40
<ljharb>
Bakkot: and then they'd still cause bugs for users, just slightly less often.
01:40
<Bakkot>
right!
01:40
<Bakkot>
which is good!
01:40
<Bakkot>
fewer bugs is better than more bugs!
01:40
<rbuckton>
rkirsling: Perhaps, but we constantly come back to "string indexing is bad".
01:40
<keith_miller>
Bakkot: Oh god at `[...foo].item(-1)` lol
01:40
<devsnek>
Bakkot: so you admit you're trying to cause bugs! (/s)
01:40
<ljharb>
Bakkot: unless more bugs leads to them discovering the true nature of code units/points and grapheme clusters, sooner
01:40
<ljharb>
Bakkot: just like you're claiming the "bug" that item is absent might
01:40
<Bakkot>
ljharb what
01:41
<ljharb>
(not that i believe it will cause more bugs, i'm just working with your hypothetical :-p )
01:41
<Bakkot>
you really aren't
01:41
<Bakkot>
the likelihood of them discovering this fact as a consequence of causing harm to users is a direct function of the amount of harm caused to users, which will happen over a shorter or larger period of time depending on how bad their implementation is
01:42
<Bakkot>
but the thing I am saying is that if we leave it out they might find it (or reach for something which works better, even if not perfectly _before_ causing harm to users), which there is no chance of if we include it
01:43
<Bakkot>
(parentheses are messed up there sorry)
01:44
<shu>
littledan: are those slides shared somewhere?
01:44
<littledan>
shu: Yes, linked from the agenda
01:44
<littledan>
I'll copy that slide into the notes as the conclusion
01:44
<shu>
cool thanks
01:44
<rkirsling>
I think the biggest thing is that having S.p.item exist, with that name, and not be about code units, would be block-worthy
01:45
<jorendorff>
yes, that would be ... bad
01:45
<ljharb>
rkirsling: i agree with that for sure
01:45
<Bakkot>
sure but that's not on the table
01:46
<jorendorff>
there's a pattern with TC39 where we must decide anew each time if we are going to try to protect people from the language's pre-existing warts
01:46
<rkirsling>
right but if somebody made a popular library that did the equivalent of [...foo].item(-1), that could be a worse reality
01:47
<jorendorff>
i don't think we should make a habit of worrying, every time we decide _not_ to do something, that a web developer will do something worse
01:47
<jorendorff>
spoiler: they will do something worse anyway
01:47
<rkirsling>
I accept that counterpoint XD
01:47
<jorendorff>
:D
01:49
<mpcsh>
a friendly reminder to everyone of the existence of #tc39-beginners! if you're willing, please join and help clarify topics for our newcomers ♥
01:51
<shu>
jorendorff: the existence of a bad thing is a stronger argument than hypothetical worries. in this case the argument's kinda weak, but was stronger for TLA, since there was sufficient evidence of people default exporting a thenable or something? i forget what the thing was but it was bad, and convinced me it was worse than having TLA
01:53
<rkirsling>
basically my point here is that I hear Kevin's worries but I at least feel okay with the fact that we're doing the obvious thing
01:56
<ljharb>
shu: re your queue reply, happy to wordsmith with any of the 3 alternatives, and i still strongly and nonblockingly prefer alt 1
01:56
<shu>
ljharb: but my suggestion is to change what alt 1 says
01:56
<shu>
does alt 1 for you generalize to "relax for some subset of hosts"?
01:56
<ljharb>
shu: i'm ok with that, pending wordsmithing :-)
01:56
<shu>
okay
01:57
<shu>
thanks
01:57
<ljharb>
shu: iow i want the default/common case to be the stronger constraint
01:57
<ljharb>
devsnek: eg, 2 dynamic imports one after the other
01:58
<devsnek>
hm ok
02:01
<akirose>
is it possible for us to move on beyond this topic
02:01
<littledan>
akirose: This is really the key topic that we've been debating about
02:01
<akirose>
k
02:13
<shu>
ljharb: i think dan's got a good point. istm your actual worry is the "evaluator attributes" that was split out; the edge cases are going to exist regardless
02:14
<ljharb>
shu: right but without the constraint, there's nothing preventing an implementation from making import assertions *be* evaluator attributes
02:15
<devsnek>
evaluator attributes should be illegal
02:16
<shu>
ljharb: the "no reinterpretation" constraint is still there and uncontroversial!
02:17
<devsnek>
temporal!!
02:17
<shu>
you'd have to squint *pretty* hard to use import assertions like evaluator attributes and say you conform to "no reinterpretation"
02:17
<shu>
like, we would just shoot it down
02:17
<devsnek>
i don't put squinting very hard past the js ecosystem
02:19
<ljharb>
shu: that is fair. but it also seems really unfortunate that all engines would have less usability for users due to an html spec editor's preference :-/
02:19
<leobalter>
I wanted to watch this one - Intl Enumeration - but I'm gonna need to have a break for proper parenting time
02:20
<leobalter>
audio is on, I'll try to catch keywords
02:20
<ljharb>
leobalter: it's json modules now
02:20
<leobalter>
ljharb: yeah, I just spent my luck today
02:20
<shu>
ljharb: it affects edge cases, not general usability
02:21
<shu>
ljharb: if it did affect general usability i'd fight with html harder on this
02:21
<ljharb>
shu: since hosts can play with adding arbitrary assertions, i suspect it'll get way less edge casey over time.
02:23
<shu>
ljharb: that's possible, and for that i pin hopes on implementation notes like for the memory model as we talked about
02:24
<jorendorff>
another footgun issue
02:25
<shu>
all host hooks are footguns, we can treat hosts as adversaries or as partners with some degree of trust
02:25
<jorendorff>
I didn't mean the host hook, I meant the issue of whether JSON modules should be immutable
02:25
<jorendorff>
I don't know
02:26
<shu>
ah
02:26
<jorendorff>
on the web, if you want mutability, you can just fetch()
02:27
<ljharb>
jorendorff: and if you want immutability, you could just Object.freeze it the first time you import it :-p
02:33
<akirose>
i think it was good to come back to this point and spell it out
02:34
<rickbutton>
ljharb: unless someone imports it first and changes it before you
02:35
<ljharb>
rickbutton: well sure, you can't defend against anything if you're not first-run code
02:35
<rickbutton>
true
02:35
<ljharb>
rickbutton: pretty sure if you're unable to safely run SES, then "is a json import mutable" isn't really your biggest problem
02:35
<rickbutton>
well, unless it is strictly immutable
02:35
<ljharb>
true :-)
02:36
<rickbutton>
do people actually want the ability to import a JSON module and change it? feels "icky"
02:37
<devsnek>
importing json is already kind of broken
02:37
<devsnek>
ez leaks
02:37
<haxjs>
what leak mean?
02:37
<devsnek>
haxjs: leaking memory
02:38
<haxjs>
oh, I agree!
02:40
<devsnek>
littledan: fwiw i think shared global namespace, in hindsight, was not a fantastic idea and i don't think we should create more of that
02:40
<rkirsling>
I agree with what jorendorff is saying
02:41
<littledan>
devsnek: I just think it's really important, pragmatically, in this case, that both TC39 and hosts can define assertions
02:41
<devsnek>
maybe `#type`
02:41
<littledan>
?
02:41
<devsnek>
not a valid identifier
02:42
<devsnek>
separate namespace
02:42
<haxjs>
what #type mean?
02:42
<ljharb>
just a string with a hash in front?
02:42
<devsnek>
like if we reserved `#` things for tc39
02:42
<devsnek>
forbidden extension to define your own
02:42
<jorendorff>
haha re: bikeshed-ability
02:43
<haxjs>
It seems `#` already used by several proposals?
02:43
<shu>
devsnek: i am not understanding, `type` isn't closed off as a key to hosts
02:43
<shu>
just the specific pair `type: 'json'`
02:43
<devsnek>
one value of it is
02:43
<shu>
and why is that so bad?
02:43
<devsnek>
for example if i wanted to use `type` for something meaningful to my host that isn't the format of the imported module
02:44
<devsnek>
it would definitely not be a good api for it to interfere with `type: json`
02:45
<ljharb>
why is it prohibitive for you to use an alternate name?
02:45
<devsnek>
because the name "type" might already be meaningful?
02:45
<devsnek>
this comes up in rust a lot where people use `kind` instead of `type` because `type` is a reserved keyword
02:45
<shu>
i see no difference between that and general namespace clashes
02:45
<shu>
it's so easy to feel strongly about the theoretical badness of namespace clashes
02:45
<devsnek>
shu: i think general namespace clashes are bad and we should not make new ones
02:45
<devsnek>
that's my point
02:45
<shu>
i do not see them as a problem borne out in practice
02:45
<jorendorff>
Hmm. this is a stronger point
02:46
<rickbutton>
HTML and TC39 regularly cooperate to share the global object namespace
02:46
<devsnek>
but if we did js again from scratch i assume that wouldn't be something we do
02:47
<shu>
we don't have that luxury, and thus in general i don't find appeals to "if we could rewind time" persuasive
02:47
<devsnek>
right but we don't have to rewind time
02:47
<devsnek>
this is a new feature
02:48
<devsnek>
are you saying shared namespaces are now idiomatic?
02:48
<shu>
so for your constraint i agree we don't have to rewind time
02:48
<shu>
i am, yes, but you're right that your view point was that it isn't
02:48
<shu>
oh whoa irccloud sent it out of order
02:48
<devsnek>
O.o
02:50
<devsnek>
i just know from experience with languages that claim certain identifiers that it is very annoying
02:50
<devsnek>
even if it doesn't come up every minute
02:51
<ljharb>
how is that avoidable tho without making either "making identifiers" or "using builtin things" less aesthetic?
02:51
<devsnek>
i don't see the need for this assertion to be part of the spec
02:51
<ljharb>
wait, so are we on a break rn or are we waiting for someone to fill the last 8-9min?
02:51
<drousso>
^ +1
02:51
<drousso>
would love to make dinner
02:51
<shrutikapoor>
not on a break yet
02:51
<rickbutton>
waiting for PFC to get ready
02:51
<shrutikapoor>
"WE WERE ON A BREAK"
02:52
<devsnek>
good break everyone
02:52
<shu>
shrutikapoor: oh i get that reference now
02:52
<devsnek>
terrible reference
02:52
<rkirsling>
what's the reference?
02:52
<devsnek>
f.r.i.e.n.d.s
02:52
<shu>
shrutikapoor: i grew up with seinfeld and it wasn't until like a month ago that my wife made me watch all of friends now that it's on streaming
02:52
<shrutikapoor>
lol
02:53
<rkirsling>
it's really hard to watch for the first time now
02:53
<shu>
friends? how come?
02:53
<rkirsling>
it's _painfully_ 90's if you don't have nostalgia goggles
02:53
<shu>
oh ha, yes, that part's true
02:54
<rkirsling>
I watched a season and a half a while back, should probably continue
02:54
<rickbutton>
fraiser holds up pretty well, modulo kelsey grammar
02:54
<rkirsling>
also sorry, we should probably move to tdz
02:54
<devsnek>
advance q plz
02:55
<ljharb>
MylesBorins akirose ^
02:55
<MylesBorins>
which item are we on now again?
02:55
<ljharb>
GetOption
02:55
<jorendorff>
bears
02:56
<ljharb>
i'm still not seeing the slides ftr
02:57
<rickbutton>
io
02:57
<rickbutton>
i'm seeing them, on your end i tihnk
02:57
<ljharb>
i'm seeing istvan's placeholder pinned
02:57
<ljharb>
and there's no way to alter it
02:58
<ljharb>
oh hey there it goes
03:01
<shrutikapoor>
@rkirsling: Whats a tdz?
03:01
<akirose>
#temporaldeadzone
03:01
<rkirsling>
shrutikapoor: #temporaldeadzone, where all of our not-serious conversations happen :D
03:01
<akirose>
shrutikapoor: that's where the sass happens
03:01
<rkirsling>
;)
03:02
<shrutikapoor>
thanks lol
03:02
<ljharb>
sass, but not LESS
03:02
<rkirsling>
true
03:02
<shrutikapoor>
SASS > LESS
03:03
<rickbutton>
less < more
03:05
<akirose>
HEY EVERYONE
03:05
<akirose>
does anyone have a 30-ish minute timebox they want to tackle after lunch?
03:05
<akirose>
we have an open slot at the end of the day
03:06
<haxjs>
my proposal-deiter is 15 mins. Is that ok?
03:07
<akirose>
haxjs: if you can find another 15 min to team up with
03:08
<haxjs>
maybe Chengzong Wu's topic? I will ask him
03:12
<rbuckton>
rkirsling: I wrote down a very brief sketch about some helpful string APIs for either `String.prototype` or `Intl` if you're interested: https://gist.github.com/rbuckton/cc14f0ff97cf420f474996fee2f78a13
03:12
<rkirsling>
it seems like a good problem space
03:13
<devsnek>
is there a part of unicode for saying like
03:13
<devsnek>
`a` is latin, `м` is cyrillic, `η` is greek, etc
03:13
<devsnek>
it doesn't have to be latin/cyrillic/greek but understanding that those characters are part of different sets
03:14
<rbuckton>
Rather than clutter `String.prototype`, I moved most of the design to an `Intl.StringInfo` namespace (though it can be called whatever), but I did put `.codePointCount()` and `.nthCodePoint(n)` on `String.prototype` because there's already a few code-point related APIs on `String`, so they feel somewhat more natural there.
03:14
<haxjs>
devsnek: can use regexp to test it, but i agree methods are much easy to use
03:15
<devsnek>
haxjs: you mean like `\p{Latin_Letter}` or whatever?
03:15
<haxjs>
yes
03:15
<devsnek>
yeah that's like the reverse of what i'm thinking of
03:15
<devsnek>
rbuckton: is that "unicode category" in your gist?
03:16
<rbuckton>
haxjs: Yeah, most of these methods are already in the spec since they need to exist for `RegExp` evaluation, but testing for them requires using a `RegExp` which can be expensive.
03:17
<rbuckton>
devsnek: no, I don't think so.
03:19
<akirose>
okay i have a taker on the 30 min slot
03:21
<devsnek>
i can rant for 30 minutes about hashing apis
03:22
<rbuckton>
Hashing?
03:22
<devsnek>
hashing values
03:22
<rbuckton>
cryptographic hashing or hashcodes for identity/equality purposes?
03:22
<devsnek>
oh the latter
03:23
<rbuckton>
I've been thinking about that too.
04:01
<michaelficarra>
devsnek: you're looking for scripts
04:01
<devsnek>
michaelficarra: hm?
04:01
<devsnek>
oh for the categorization
04:01
<devsnek>
i assume no way to query that from js
04:01
<michaelficarra>
sure there is, just in RegExps
04:03
<haxjs>
already start?
04:03
<robpalme>
yes
04:04
<michaelficarra>
devsnek: /^\p{Script=Greek}$/u.test('ρ')
04:04
<devsnek>
michaelficarra: nothing O(1) :P
04:04
<devsnek>
have to iterate over tens of regexes
04:05
<michaelficarra>
sure, there's no API that gives you a character's script
04:05
<michaelficarra>
or any other Unicode property, to my knowledge
04:06
<ljharb>
could you make a single regex listing each of the scripts as a (named?) capturing group, and use .match to see which ones it matched?
04:07
<rickbutton>
the regex engine would iterate over each of those groups to see which one matched
04:07
<rickbutton>
would it not?
04:07
<devsnek>
faster than calling exec on each one
04:07
<rickbutton>
true
04:08
<devsnek>
i wonder if the unicode crates could help with this
04:08
<devsnek>
can we just add `Intl.CLDR` constants
04:08
<rickbutton>
are there ecosystem solutions? I imagine they just build a big object map from char->script
04:08
<devsnek>
yeah i think you could use data from the unicode crate to generate a map
04:08
<devsnek>
a large map
04:08
<rbuckton>
Write a script that uses RegExps to generate a script containing a function that takes in a codePoint and returns the script based on the value of the codepoint?
04:09
<michaelficarra>
we don't even have a titlecase operation on strings, asking for arbitrary Unicode property access is a bit of a stretch
04:09
<devsnek>
it can be on intl
04:09
<shu>
just a bag of... all units?
04:10
<devsnek>
`Intl.generalCategoryOf(c)`
04:10
<michaelficarra>
shu: yeah I can't imagine the use cases
04:10
<devsnek>
i wanted to make a thing to detect when people do stuff like "мıηαтσ"
04:10
<devsnek>
for moderation purposes
04:11
<rbuckton>
devsnek: that's kind of like what I was talking about in https://gist.github.com/rbuckton/cc14f0ff97cf420f474996fee2f78a13
04:11
<rkirsling>
devsnek: I mean presumably not so far as to try to resolve σ to o though, right?
04:11
<michaelficarra>
devsnek: there's a few concepts you should be familiar with, let me get you the links
04:11
<devsnek>
rkirsling: no i don't want to normalize
04:11
<devsnek>
the normalization there would basically be OCR
04:12
<rkirsling>
right
04:12
<rkirsling>
just makin' sure
04:12
<devsnek>
different categories in the same string is a good indicator of someone doing that
04:12
<devsnek>
then you normalize it to "dumb nickname"
04:13
<michaelficarra>
devsnek: Unicode contains information on "confusables": http://www.unicode.org/reports/tr39/
04:14
<rickbutton>
neatr
04:14
<devsnek>
oh wow
04:14
<rickbutton>
*neat
04:14
<michaelficarra>
also, there is a concept called "mixed script" (http://www.unicode.org/reports/tr39/#Mixed_Script_Detection) which browsers use when displaying IDNs (or their punycode)
04:14
<michaelficarra>
so if it's mixed-script, it's suspect
04:15
<devsnek>
oh wow `# ( М → M ) CYRILLIC CAPITAL LETTER EM → LATIN CAPITAL LETTER M #`
04:15
<michaelficarra>
people have used this data to make cool confusable string generators: https://www.irongeek.com/homoglyph-attack-generator.php
04:15
<rkirsling>
fascinating
04:16
<michaelficarra>
devsnek: yeah, there's a few Cyrillic characters that use the exact same glyph as their Latin counterparts
04:16
<devsnek>
not in the unicode package though
04:16
<devsnek>
might pr that
04:18
<michaelficarra>
I implemented confusables stuff for PureScript (which is interoperable with JS): https://github.com/michaelficarra/purescript-confusables
04:19
<devsnek>
ohnopurescript
04:20
<rkirsling>
TIL Hanb
04:20
<rkirsling>
does that subsume Hans or Hant or both?
04:21
<michaelficarra>
Hanb is "Han with Bopomofo", I don't know much beyond that
04:21
<rkirsling>
(seems like both, i.e. Hani, which I didn't know either)
04:24
<devsnek>
sent confusables.txt to friend at discord who did mention completion/user search
04:28
<rkirsling>
was that a casual Fiddler reference
04:28
<michaelficarra>
more people should know about Unicode confusables
04:29
<robpalme>
rkirsling: Dan spent a long time considering % of audience who would clock that joke ;-)
04:29
<michaelficarra>
devsnek: they should also strip diacritics and case fold
04:30
<devsnek>
michaelficarra: yeah they already do some stuff
04:30
<devsnek>
i put them on the trail of S.p.normalize a few months ago
04:30
<rkirsling>
robpalme: nice
04:39
<littledan>
can someone click forward on the queue so that it's possible to respond?
04:39
<rickbutton>
they did you can respond
04:42
<devsnek>
brad4d: they can be used in sets/maps, but not weak sets/maps
04:44
<littledan>
akirose: I'm not sure which reply you're referring to
04:54
<littledan>
agree that these are good things to think about; disagree with "must" framing
04:55
<ljharb>
littledan: everybody has their own "must"s, to me this is a must.
04:55
<devsnek>
i feel like people get too caught up in object/primitive categorization
04:55
<littledan>
ljharb: I don't think this is a productive framing
04:55
<ljharb>
it's ok that we disagree on the productivity of the framing.
04:56
<littledan>
well, I think this is a real problem in the committee, as framing goals as "must" can shut down conversations where we could learn more
04:56
<littledan>
"you must not frame things this way" there
04:56
<littledan>
now what happens?
04:56
<ljharb>
that sounds like you're suggesting any hard constraints shut down discussion
04:57
<ljharb>
what happens is that constraints apply to spec changes, not to discussion
04:57
<ljharb>
so i'm allowed to apply "must"s to proposals, nobody's allowed to apply them to discussion.
04:57
<ljharb>
s/i'm/everybody is
04:58
<littledan>
sorry, it was a distracting joke
04:58
<Bakkot>
"allowed" is also kind of a bad framing
04:58
<devsnek>
i feel like people get too caught up in object/primitive categorization
04:59
<ljharb>
Bakkot: fair
04:59
<shu>
ljharb: i think you're misunderstanding identity as a property of "object" or "primitive". identity is a property of "encapsulated structure"
05:00
<ljharb>
pre-es6, the two overlapped. symbols changed that a bit
05:00
<shu>
it so happens there's a primitive/object divide, but that's not the reason for why things have identity
05:00
<devsnek>
symbols, depending on how you view them, are one example of that
05:00
<akirose>
rbuckton: you're up
05:01
<rbuckton>
yep
05:02
<akirose>
ystartsev_: you're on deck
05:02
<ystartsev_>
for process?
05:02
<ystartsev_>
got it
05:02
<ljharb>
shu: what is the reason?
05:02
<ystartsev_>
shu: is your concern re: the primitives version of the proposal?
05:02
<devsnek>
because of their inherent encapsulated structure :P
05:03
<ljharb>
devsnek: what are symbols' encapsulated structure?
05:03
<devsnek>
same as a frozen object
05:03
<shu>
ystartsev_: i have no concern about the path of investigation, i was just responding to jordan
05:03
<devsnek>
they're a unique thing
05:04
<ljharb>
devsnek: how is "unique" a property of strucutre?
05:04
<ljharb>
*structure
05:05
<shu>
ljharb: actually how do Symbols have identity? you're talking about `Symbol() !== Symbol()`?
05:05
<shu>
like, the gensym case?
05:05
<michaelficarra>
so when is the next opportunity to reconsider our 4 short days and possibly go back to 3 longer days?
05:05
<ljharb>
shu: yes, it's the only primitive where you can duplicate the source text, but the result isn't `===`
05:05
<michaelficarra>
or are we stuck with 4 days forever now?
05:06
<devsnek>
i prefer four days when the time goes to 1am
05:06
<msaboff>
michaelficarra What don't you like about 4 days 5 hours each day?
05:06
<shu>
ljharb: my mental model is that Symbols still don't have identity, because what `Symbol()` does is to generate a new unique Symbol, not be a unit value like e.g. Number()
05:07
<rkirsling>
I am interested in the idea of scattering topics across timezones
05:07
<Bakkot>
msaboff I dislike the four day schedule because I basically don't get work done for four days now, instead of three
05:07
<michaelficarra>
msaboff: it's effectively 1/3 longer meetings
05:07
<ljharb>
shu: it's the only primitive that works that way tho
05:07
<msaboff>
Got it
05:07
<devsnek>
ljharb: depends on your definition of primitive
05:07
<shu>
ljharb: but since Symbol.for("foo") === Symbol.for("foo"), i don't consider it having identity
05:07
<ljharb>
devsnek: what's yours?
05:08
<Bakkot>
also, wrt the november meeting, I think I'd prefer three nights of being up almost all night over four nights of being up all night
05:08
<rickbutton>
it depends on what the definition if "is" is
05:08
<Bakkot>
but that might not be true; we'll see when it happens
05:08
<ljharb>
shu: that's just because global symbols are different - ie, memoized in a cross-realm registry
05:08
<michaelficarra>
I'd even prefer 4 longer days over 4 shorter days, just so that my time isn't going to waste
05:08
<devsnek>
ljharb: everything listed in "ECMAScript Language Types"
05:08
<ljharb>
Bakkot: +1 to that one
05:08
<rickbutton>
^ but really, do we have a formal definition of "identity" or it is just inherent from the definition of an object?
05:08
<msaboff>
Bakkot I agree that 3 days is preferably for the Nov meeting.
05:08
<shu>
ljharb: that's not "just because", that's the semantics
05:08
<jridgewell>
Shu, thats like saying `o = {}, o === o` means objects don't have identity.
05:08
<ljharb>
rickbutton: imo "identity" is "if you repeat the source text twice, the two results are !=="
05:08
<rickbutton>
that is not the way I think about identity
05:08
<devsnek>
jridgewell: there is some argument about how Symbol.for is described
05:09
<devsnek>
jridgewell: some people don't think of it in terms of a global map
05:09
<ljharb>
shu: well sure, but symbols still have identity - it's just that Symbol.for memoizes that identity-having symbol
05:09
<shu>
jridgewell: no, identity is always reflexiv?
05:09
<Bakkot>
the word "identity" is doing more harm than good here
05:09
<rkirsling>
^
05:09
<Bakkot>
we should have this debate without using it
05:09
<rkirsling>
it's a weird word for this I think
05:09
<michaelficarra>
ljharb: NaN
05:09
<rkirsling>
we're talking about definitional equality, yeah?
05:09
<ljharb>
michaelficarra: fair
05:09
<ljharb>
what term would you use "symbols and objects" versus "non-symbol primitives"?
05:09
<ljharb>
*use for
05:09
<ljharb>
michaelficarra: NaN is definitely the oddball
05:10
<rickbutton>
* non-Symbol.for symbols and objects vs "the rest"
05:10
<ystartsev_>
+1 to Bakkot
05:10
<Bakkot>
the way I would put it is that strings and numbers compare by their contents, objects and symbols do not
05:10
<ljharb>
michaelficarra: but i could tweak my definition to be `!Object.is()` instead of !== and it'd hold
05:10
<shu>
when i say identity, i mean the thing that values that do not compare by contents use to compare
05:10
<ljharb>
also booleans and null and undefined and bigints?
05:10
<shu>
that is the essence of identity
05:10
<ystartsev_>
yep, and that is the same mechanism we would see at work here
05:10
<shu>
if you compare by contents, you do not have identity
05:10
<ljharb>
shu: i agree with that
05:10
<Bakkot>
ljharb right, those things compare by contents
05:11
<ljharb>
Bakkot: and Symbol.for symbols?
05:11
<shu>
and my mental of Symbols is that they compare by content; it happens it's "implemented" in the spec by a cross-realm registry
05:11
<rickbutton>
^ this is also my mental model
05:11
<ljharb>
hmm
05:11
<ljharb>
what is the content of a symbol?
05:11
<rickbutton>
we just use the word identity as a shortcut
05:11
<devsnek>
my mental of symbols is identical to objects
05:12
<shu>
ljharb: for symbols resulting from Symbol.for, the string content, otherwise, just some sui generis thing
05:12
<ljharb>
i would very much disagree with the claim that symbols are compared by contents, they have no contents
05:12
<Bakkot>
yeah what shu said
05:12
<ljharb>
i didn't give it anything to contain
05:12
<shu>
you do...
05:12
<devsnek>
Symbol.for symbols contain a string
05:12
<rickbutton>
an empty string has contents
05:12
<rkirsling>
a private string
05:12
<Bakkot>
that's ok, 0 doesn't contain anything either but like
05:12
<ljharb>
Symbol('') !== Symbol(''), so the string isn't the contents it's comparing
05:12
<devsnek>
maybe they have a hidden number, a pointer for example
05:13
<devsnek>
:^)
05:13
<jridgewell>
And `Symbol.for('foo') !== Symbol('foo')`
05:13
<ljharb>
obv you can do mental gymnastics to make any mental model work, but i can't observe or provide that hidden number
05:13
<shu>
that's because the "description" isn't the contents?
05:13
<shu>
idk man, y'all have a lot of adherence to surface structure
05:13
<devsnek>
i don't get describing symbols differently from objects
05:13
<ljharb>
symbols are the same as objects. they don't compare by contents.
05:13
<ljharb>
they compare by "bakkot's forbidden term"
05:13
<devsnek>
i mean i understand it
05:14
<devsnek>
but i don't get why you would prefer that model to whatever your model is for objects
05:14
<rickbutton>
the spec uses the wording "the same value" when it needs to compare objects or symbols
05:14
<rickbutton>
for what it is worth
05:15
<littledan>
btw if people have concerns about an all-Igalia review team, then I encourage you to sign on or recruit a third reviewer
05:15
<rkirsling>
rbuckton: I like how you just *apologized* for being efficient with your time
05:15
<michaelficarra>
I hope we're not expected to have read this yet
05:15
<michaelficarra>
I never ended up reading it because there was still so much churn and back-and-forth in the PR
05:16
<rkirsling>
same
05:16
<rbuckton>
;)
05:16
<devsnek>
can we put a requirement on all our official documents to have `max-width: 60em`
05:16
<rkirsling>
I was gonna wait until the battling died down
05:19
<michaelficarra>
… so are we never going to revisit 3 days vs 4 days?
05:19
<ljharb>
michaelficarra: probably best to file a reflector issue
05:20
<michaelficarra>
I was just wondering if we scheduled a date to revisit, but I guess we've made it permanent?
05:20
<ljharb>
i don't think it's permanent, the january meeting doesn't have a timezone picked yet afaik?
05:20
<rkirsling>
not so much permanent as like, we had inertia for one thing and now we have inertia on another thing
05:21
<michaelficarra>
I agree so much about the inability of taking the temperature of the room
05:21
<devsnek>
isn't that kind of antithetical to consensus, e.g. the goal is "is this unworkable" not "does everyone like this"
05:21
<michaelficarra>
someone must have solved this problem with software
05:22
<michaelficarra>
devnsek: it's still informative if we're about to advance something that most people have weak reservations about
05:22
<rkirsling>
michaelficarra: I think it may be that our process has been too dependent on a physical room
05:22
<michaelficarra>
*devsnek
05:23
<Bakkot>
fwiw I am always excited about the intl proposals
05:23
<devsnek>
intl is very cool
05:23
<littledan>
me too
05:23
<michaelficarra>
Intl basically can do no wrong in my book
05:24
<Bakkot>
I don't talk about them because a.) I don't know enough about the space to have opinions and b.) they basically all look good
05:24
<littledan>
What if we required an explicit "second" and "third" for proposal advancements?
05:24
<ljharb>
+1
05:24
<littledan>
like two non-champions voicing explicit support
05:24
<ljharb>
(to Bakkot)
05:24
<ljharb>
but actually i like littledan's idea too
05:24
<littledan>
:)
05:24
<ljharb>
not requiring unanimous enthusiastic consensus, but requiring more than one person being enthusiastic
05:24
<littledan>
(I would like to get a more broad view of the room, too; 2nd/3rd seems like a minimum)
05:25
<ljharb>
and theoretically should be super easy on a good proposal
05:25
<rkirsling>
littledan: I like it
05:25
<rickbutton>
not opposed, but it would be weird if it ended up being the same set of people voicing a +1 for consensus for every proposal
05:26
<rickbutton>
in the same way that some people talk more than others (not a bad thing, but an observation)
05:26
<rkirsling>
hmmmm
05:26
<Bakkot>
<devsnek hat> discord has emoji reactions for this situation! </devsnek hat>
05:26
<rkirsling>
loool. it's true though.
05:26
<Bakkot>
(that is a feature of discord I quite like)
05:26
<rickbutton>
🚀 we also have emojis in discord
05:26
<rickbutton>
*irc
05:27
<devsnek>
i appreciate devsnek hat
05:27
<michaelficarra>
I want like a happiness slider that averages all of our individual happiness sliders
05:27
<rkirsling>
^ nice
05:27
<rickbutton>
michaelficarra: its 2020 lets not quantify our happiness
05:27
<littledan>
I like the emoji reacts idea too
05:27
<michaelficarra>
rickbutton: it doesn't have to apply outside a 30 second window
05:27
<rkirsling>
I agree with the current point in that I would have a really hard time being a sole objector on just about anything, given my personality
05:27
<littledan>
we could also literally just paste our emojis in IRC
05:27
<Bakkot>
true, but discord reacts are a lot... easier... somehow?
05:28
<Bakkot>
they feel less like an interjection and more like smiling
05:28
<devsnek>
everyone steps into a booth where they must win an argument with mark about the feature being at least as good as the equivalent in elang. if every member can do so, the feature passes
05:28
<littledan>
yeah they are
05:28
<rickbutton>
you can click an emoji that someone else already used, is the nice thing
05:28
<littledan>
(Matrix has emoji reacts also...)
05:28
<shu>
michaelficarra: Intl can do no wrong?
05:28
<devsnek>
did you know in discord you can type `+:emoji:` to react to the last message
05:28
<shu>
michaelficarra: what about `Intl.stringRepresentation = 'ebcdic'`
05:29
<rkirsling>
devsnek: or slack
05:29
<michaelficarra>
I am currently feeling (polar bear) about this proposal
05:29
<shu>
what does polar bear mean
05:29
<rickbutton>
if we are going full -live reactons- lets just get an audience clap meter set up
05:29
<shu>
ravenous?
05:29
<michaelficarra>
rickbutton: yes!
05:30
<devsnek>
the real reason -0 is important
05:30
<rkirsling>
live temp gauge
05:30
<rkirsling>
in TCQ
05:30
<rkirsling>
let's do this
05:30
<shu>
ljharb: given how against voting you are this seems like voting?
05:30
<ljharb>
shu: i definitely don't want voting, but i do want a way to measure the room
05:30
<rickbutton>
unfortunately you don't get to put a minus sign next to your ballot choice
05:30
<devsnek>
if you measure the room and no one likes it
05:30
<shu>
(not that i'm against that, i kinda like wasm's voting by a scale of "strongly against" to "strongly for")
05:30
<devsnek>
but no one objects
05:30
<ljharb>
shu: iow, a "-0" wouldn't block advancement, but it might encourage others to speak up about their own -0's
05:31
<ljharb>
shu: i think that if 90% of the room is -0, that's severely important information to surface
05:31
<littledan>
🐸
05:31
<ljharb>
let the record show that dan is "frog" on this proposal
05:31
<shu>
ljharb: well, okay, in practice having a quantified temperature measure approaches voting in practice IME
05:31
<shu>
you can skirt around the formality of it
05:32
<ljharb>
shu: i think a "yes/no/abstain" is voting. I think having the "neutral, but negative/neutral, but positive" options drastically changes the dynamics
05:32
<littledan>
I think it's pretty different; it leaves room for judgement calls
05:32
<ljharb>
^ that
05:32
<devsnek>
if everyone feels meh about it, even though no one objects, that may drive the champion to pull it for a future meeting
05:32
<devsnek>
not an official vote
05:32
<devsnek>
but the effect of one
05:32
<ljharb>
but more importantly it signals to those in the room that might not otherwise be emboldened to endorse or objects
05:32
<shu>
why is that not a vote?
05:32
<ljharb>
*object
05:32
<shu>
other than you didn't call it a vote?
05:32
<ljharb>
shu: because if 90% of the room is -0, someone might decide to be -1
05:32
<littledan>
well, in particular, it'd be very weird to play vote counting schemes in that world
05:32
<ljharb>
shu: if nobody decides to be -1, it can advance
05:32
<littledan>
that's one concrete concern
05:33
<shu>
ljharb: that is a voting system to me
05:33
<littledan>
it also does not put "outvoting someone" on the table
05:33
<ljharb>
hm
05:33
<shu>
but i think i'm missing something
05:33
<Bakkot>
a single -1 feels like it should not block
05:33
<ljharb>
shu: in what way is that different than the current consensus process?
05:33
<Bakkot>
I was -1 on .item
05:33
<Bakkot>
S.p.item, that is
05:33
<shu>
ljharb: the current one is not quantified and tallied across all delegates on tcq
05:33
<shu>
which is what i thought you were proposing
05:33
<devsnek>
Bakkot: but you're +1 on S.p.item
05:33
<littledan>
this is a way to add a bunch of opinion-gathering *within* our consensus system
05:33
<rkirsling>
interesting: https://www.apache.org/foundation/voting.html#expressing-votes-1-0-1-and-fractions
05:33
<ystartsev_>
I feel like the scale should only be about temperature, blocking should still work as it is
05:33
<littledan>
I think that's very useful
05:33
<ljharb>
Bakkot: blocking would be -1, nonblocking icky would be -0, and by not blocking imo you'd be -0 in this system
05:33
<ljharb>
ystartsev_: agreed
05:33
<Bakkot>
ljharb that seems like not enough gradiation
05:34
<ljharb>
shu: i'm not talking about documenting the tallies
05:34
<littledan>
Bakkot: +🐸
05:34
<Bakkot>
there is lots of stuff that I feel like "I don't think this is worth adding"
05:34
<ljharb>
Bakkot: no opinion on that, we can have a -10 to 10 scale as long as it's clear where the "block" threshold lives
05:34
<akirose>
Frank are you on IRC with a username that doesn't start with Frank?
05:34
<Bakkot>
S.p.item was "I feel like adding this with this semantics is actively harmful, but not enough to block"
05:34
<haxjs>
I think I would also -1 on .item because it seems we should use more time to discuss it :) but i don't want to block the whole proposal
05:34
<ystartsev_>
haxjs: thats an interesting take also -- just wanting to take more timee
05:35
<ljharb>
i think that would also have been reasonable to ask for (and it's in ystartsev_'s pr, iirc)
05:35
<ljharb>
but, only if "more time" is something that you could reasonably expect would change things
05:35
<rickbutton>
maybe the additional nuance around "non-blocking but icky" is useful (instead of simply -0)
05:35
<Bakkot>
I think "more time" often gives the rest of the committee a chance to form and express an opinion
05:35
<Bakkot>
even if it doesn't convince any of the major parties to the original discussion
05:36
<ljharb>
👍 if that's likely, that's always a valid reason to delay imo
05:36
<ljharb>
(also fine to err on the side of delay, too)
05:36
<akirose>
whoever has synchronous contact with Frank please let him know i was able to get one of his overflow items on the schedule tomrrow
05:36
<haxjs>
as i stated before ,it have a big pressure to make decision in the meeting in very short time, u need to a big confidence that u understand all things everyone said.
05:36
<ljharb>
but not every champion has "shipping speed" in "not the top place" in the priority list.
05:37
<ljharb>
haxjs: hopefully 10 day review time, plus github discussion, helps with that, but you are also quite correct
05:37
<littledan>
I think "more time" is valid when it's valid, but there are also limits to these days. For example, I think two months is enough time to discuss whether there should be String.prototype.item and come to one conclusion or other. There are other decisions that may make sense to consider for longer amounts of time.
05:37
<littledan>
s/days/delays/
05:37
<haxjs>
yeah, we have time to review , but sometimes there are many new input in the meeting.
05:37
<ljharb>
littledan: +1, haxjs: agreed
05:37
<littledan>
Right, so we have the agenda deadline; we could push that back, or be more strict about it
05:38
<ljharb>
we're pretty strict about it, things miss the deadline yet advance very rarely
05:38
<Bakkot>
things do come up in discussion, though
05:38
<Bakkot>
would be nice if we could more readily revisit discussions
05:38
<littledan>
there are some very large proposals that might take more than a week or two to review. For example, we agreed that Temporal should have at least a full meeting cycle between "stage 2 and frozen" and Stage 3
05:39
<Bakkot>
honestly, I'd be in favor of dedicating the last day to revising stuff from the earlier ones
05:39
<haxjs>
Especially for non-native speakers we heavily rely on reading notes in difficult topics (for example, membrane :)
05:39
<Bakkot>
so that we could ask for a delay without that meaning several more months
05:39
<rickbutton>
that would be neat if it didn't cut into existing time for proposals
05:39
<shu>
Bakkot: i'd be supportive of that idea, yes, a half day even
05:39
<littledan>
membrane stuff is difficult for everyone, not just non-native speakers. There's a lot of background that we haven't clearly presented to the committee
05:39
<rkirsling>
^
05:39
<rkirsling>
membrane is the most difficult IMO
05:39
<Bakkot>
rickbutton I think it is worth it even if it does cut into existing time for proposals
05:39
<littledan>
ideally people can raise the review requests or requests for more information ahead of the meeting.
05:40
<littledan>
I mean, requests to have more review time
05:40
<littledan>
this could help champions provide the needed information
05:40
<Bakkot>
littledan things do come up in discussion, though
05:40
<devsnek>
you have not truly lived until you've seen a presentation on membranes
05:40
<littledan>
yes, for sure
05:40
<rickbutton>
Bakkot, certainly useful, but more useful? maybe
05:40
<rkirsling>
devsnek: steamy membranes?
05:40
<michaelficarra>
devsnek: in person, for the full effect
05:40
<littledan>
if something new comes up, that can be a good reason to think about things for longer, I agree
05:40
<Bakkot>
rickbutton let me put it a different way: I think it would have better outcomes for the language
05:41
<devsnek>
michaelficarra: the pacing is part of the presentation
05:41
<michaelficarra>
the high CO2 content is necessary
05:41
<devsnek>
lol
05:41
<rickbutton>
Bakkot fair
05:41
<Bakkot>
+1 mark
05:42
<rkirsling>
devsnek: lol that one is a fact
05:42
<devsnek>
i'm motivated by both mark's points and ron's points
05:42
<devsnek>
+0, if you like
05:42
<Bakkot>
I bought a CO2 meter to bring to meetings and then we stopped having meetings for which it was relevant
05:42
<littledan>
devsnek: Same
05:43
<rkirsling>
devsnek: ±0 even?
05:43
<rickbutton>
Bakkot: we have CO2 meters in all the Bloomberg meeting rooms, its a fun way to get out of a meeting by checking the meter and claiming that there is no way we are making good decisions any more
05:44
<akirose>
omg that time Brian brought one to TC39 at Google in New York
05:44
<rkirsling>
I am not familiar with this practice lol
05:44
<devsnek>
lmao
05:45
<Bakkot>
rickbutton incredible
05:45
<Bakkot>
I wonder if I get budget for that
05:45
<michaelficarra>
rickbutton: why add CO2 meters and not oxygen?
05:45
<Bakkot>
if there are ever offices
05:45
<rickbutton>
michaelficarra: it does both, they are embedded in the tables
05:45
<devsnek>
michaelficarra: why not windows
05:45
<michaelficarra>
devsnek: oxygen delivery holes?
05:45
<devsnek>
lol
05:46
<rickbutton>
no openable windows in the BB NY offices
05:46
<devsnek>
depends on how you consider openable
05:46
<devsnek>
🔨
05:46
<michaelficarra>
you mean they're not closeable
05:47
<devsnek>
mfw no tape emoji
05:47
<Bakkot>
📼
05:48
<devsnek>
https://i.kym-cdn.com/photos/images/facebook/000/909/991/48c.jpg
05:48
<Bakkot>
wait, this is the wrong channel, sorry
05:48
<michaelficarra>
pipobscure: new.target, they're called meta properties
05:48
<ljharb>
pipobscure: `super.foo`, as well
05:48
<devsnek>
`import.meta`
05:49
<michaelficarra>
hold up, have we already adopted the Apache voting?
05:49
<ystartsev_>
i think we are playing with it to see how it feels
05:49
<ljharb>
people are just saying numbers
05:50
<rkirsling>
-1 is full blocking though
05:50
<michaelficarra>
I am -e on this proposal
05:50
<ystartsev_>
rkirsling: i would disagree, blocking stays the same
05:50
<rkirsling>
if we do Apache-style
05:50
<devsnek>
-Number.EPSILON
05:50
<ljharb>
michaelficarra: that's over twice a block
05:50
<Bakkot>
don't think we should assign numbers to blocking
05:50
<Bakkot>
if you want to block you say so
05:50
<devsnek>
is small `e` epsilon
05:50
<rkirsling>
ah okay
05:50
<ystartsev_>
sorry my irc isn't really working
05:50
<michaelficarra>
ljharb: you're right, I should make it bigger
05:50
<Bakkot>
numbers are for expressing sentiment
05:50
<rkirsling>
that works for me
05:50
<ljharb>
too bad there's no Math.clamp
05:50
<devsnek>
or euler's number
05:50
<ljharb>
devsnek: E is epsilon, iirc?
05:51
<devsnek>
🤷🏻
05:51
<rkirsling>
euler's number
05:51
<michaelficarra>
> The number e, known as Euler's number, is a https://en.wikipedia.org/wiki/Mathematical_constant approximately equal to 2.71828
05:51
<rkirsling>
Math.E vs. Number.EPSILON
05:51
<ljharb>
it's also Math.PI, so obv Math is just shouty
05:51
<Bakkot>
constants are all caps
05:51
<Bakkot>
traditionally
05:52
<ljharb>
Symbol.iterator?
05:52
<michaelficarra>
lol undefined.something
05:52
<michaelficarra>
(legal syntax)
05:52
<Bakkot>
what about symbol.iterator?
05:52
<devsnek>
Symbol.ITERATOR
05:52
<ljharb>
why not Symbol.ITERATOR
05:52
<ljharb>
it's a frozen property
05:52
<Bakkot>
that is not a constant in the sense in which π is a constant
05:52
<ljharb>
more constant than Math.PI, even
05:52
<ljharb>
how so? it's an unchangeable cross-realm value :-p
05:53
<devsnek>
i don't think of Symbol.iterator as a constant
05:53
<devsnek>
i'm not sure how to explain this intuition
05:53
<Bakkot>
π is a constant in the math sense
05:53
<rickbutton>
it doesn't go into .rodata
05:53
<Bakkot>
lol
05:53
<ljharb>
window.Infinity, then
05:53
<devsnek>
rickbutton: i have news for you
05:53
<rickbutton>
:)
05:53
<ljharb>
globalThis.Infinity, sorry
05:53
<ystartsev_>
rkirsling: sorry, to finish --> i think blocking should continue as is, with a reason
05:53
<Bakkot>
infinity I could see a case for
05:53
<ystartsev_>
gosh, why did irc have to poot out on me now
05:54
<ljharb>
also NaN, why not NAN
05:54
<gibson042>
Number.POSITIVE_INFINITY
05:54
<rkirsling>
ystartsev_: yeah Bakkot expressed similarly, that sounds good 👍
05:54
<ljharb>
i stand by Math being shouty
05:54
<Bakkot>
NaN is just precedent from other languages
05:54
<rkirsling>
ystartsev_: I wasn't sure just how Apache-ish we were looking to go
05:54
<michaelficarra>
did Ron just withdraw this proposal? 🙏
05:54
<ystartsev_>
yes, i think so
05:54
<ljharb>
wait what? i didn't hear that
05:54
<ljharb>
rbuckton: ?
05:55
<rkirsling>
I love that we're actually trying these numbers
05:55
<rkirsling>
no joke
05:55
<devsnek>
i've lowkey used them in the past
05:55
<michaelficarra>
rkirsling: I agree, it is already helping me
05:55
<rbuckton>
I didn't withdraw, but its under consideration.
05:55
<ystartsev_>
ah ok
05:55
<ljharb>
rbuckton: ty
05:55
<ystartsev_>
i do like the numbers, it feels nice to get a sense of where people are
05:56
<shu>
i do not fully understand what hax is arguing for, that we should reserve `class.` for future use cases?
05:56
<michaelficarra>
shu: yeah sounds like it
05:56
<devsnek>
i just got kicked out of tcq
05:57
<devsnek>
reloading fixed
05:57
<devsnek>
very odd
05:57
<shu>
michaelficarra: thx
05:57
<ljharb>
how would a decorator function, defined in another file, be able to use special syntax?
05:58
<michaelficarra>
I think this syntax space has the potential to be used for FAR more valuable proposals than this
05:58
<ljharb>
such as?
05:58
<ljharb>
(do you feel the same about `static.`?)
05:58
<rkirsling>
`static.` seems less bad
05:59
<ljharb>
so your concern isn't "this is a bad feature", it's "this syntax should be put to better use"?
05:59
<michaelficarra>
I would feel the same about just about any syntax, since I see this proposal as having just about zero value
05:59
<ljharb>
rbuckton: why wouldn't `class.#x` work? did i miss that slide
05:59
<michaelficarra>
ljharb: why not both?
05:59
<ljharb>
michaelficarra: noted
06:00
<rkirsling>
I think "papercut" is a good metaphor
06:00
<littledan>
haxjs: it's hard for me to understand which sense of metadata you want to be made especially available within the lexical scope of the class
06:00
<rkirsling>
one never _needs_ to use an anonymous class, right?
06:00
<rbuckton>
`static` could be a reserved identifier inside of a class, given that its currently restricted inside of a class...
06:00
<haxjs>
littledan: I just use decorator as example, if there is no usecase, i would think class.xxx is not worth.
06:01
<ljharb>
rkirsling: when decorating an anonymous class, one must produce one, if one wants to be unobservable
06:01
<littledan>
I like the idea of using static.foo for this, if we do add it
06:01
<michaelficarra>
rkirsling: nope: https://github.com/tc39/proposal-class-access-expressions/issues/13
06:01
<rkirsling>
ljharb: oh that's where decorators come in. sorry, I didn't follow this particular thread
06:01
<haxjs>
yeah we have a addition that u can `new static` but not `new class`
06:02
<littledan>
haxjs: Oh, I see. Yeah, I could think of other cases for `class.` Another totally unrelated case is, if we really don't want to use [no LineTerminator here], then we could make value classes declared as `class.value C { }`, etc
06:02
<rbuckton>
IRCCloud keeps failing to send my messages.
06:04
<haxjs>
littledan: yeah `class.value C {}` is great example of keeping the syntax space. thank u!
06:04
<littledan>
or `class.typed`, etc
06:05
<haxjs>
it always make me think whether we can have a convention of use keyword.xxx for new keyword. like await.all .
06:05
<rbuckton>
Can't say I'm a fan of `class.value C {}`. That's using `.` in a completely different way than we've ever used it in the language. I'd rather see `value class C {}` or `struct C {}` than that. Except for numbers and regexp's, `.` should stay in the realm of property access
06:06
<haxjs>
rbuckton: The point is not every case we could have `xxx keyword` or `keyword xxx`. For example `await.all` case.
06:06
<akirose>
by the way THANK YOU SO MUCH NOTE TAKERS
06:07
<robpalme>
the note takers were great today.
06:07
<haxjs>
also `with suffix x = ...` many people don't like overload `with`, but i guess `const.suffix x = ...` could get more acceptence??
06:07
<rbuckton>
Teams has a feature where you can use the auto captions to create a transcript of the meeting. I wonder if that would be helpful for notetaking?
06:08
<Bakkot>
re: notes: I am playing with hooking the google speech-to-text API up to google docs
06:08
<Bakkot>
turns out that API is super cheep
06:08
<Bakkot>
and then note takers would just need to fix its jank
06:08
<Bakkot>
not sure it will be good enough though
06:09
<michaelficarra>
worst case, we can try it in parallel and compare the results
06:09
<rkirsling>
post-editing is infinitely easier than writing so I would bet it'd be good enough
06:09
<rickbutton>
would love to trial it if you get it set up
06:09
<rbuckton>
The main thing I dislike about the transcription in Teams (at least, the last time I used it), is that it doesn't attribute the text to the speaker (which it seems like it should be able to do).
06:09
<littledan>
haxjs: yeah, I could see `const.suffix` but I do think that many people see the `.` as ugly in that sort of case. Anyway the objections were more about namespaces than the surface syntax
06:09
<haxjs>
rbuckton: can't find auto caption in the menu...
06:09
<shu>
good night all
06:10
<Bakkot>
my approach will not do attribution, so we'd need humans for that
06:10
<Bakkot>
rbuckton is the transcript live-editable, or just a document you download after the fact?
06:10
<rickbutton>
good night shu
06:11
<littledan>
Good morning everyone
06:11
<rickbutton>
lmao
06:11
<rbuckton>
It may be a preview feature (which requires opt-in in Settings): https://usercontent.irccloud-cdn.com/file/SEazNmdK/image.png
06:12
<haxjs>
littledan: they may slightly related. i guess programmers see `const.suffix x = ...` and would not expect it could be in the same namespace of `const/let`.
06:13
<rbuckton>
Hmm: https://usercontent.irccloud-cdn.com/file/K9zrsL1i/image.png
06:14
<rbuckton>
It did a fairly good job understanding me, and it looks like it does now have attribution. I don't see a way to export it, however, but it could be useful for note-takers if something is missed.
06:15
<rbuckton>
rather, no way to export other than Copy/Paste, since you *can* select the text of the transcription
06:16
<haxjs>
great! where can i download preview version of team so i can try it tommorow?
06:17
<rbuckton>
IIRC, you can opt into preview features from the settings of the desktop app: https://usercontent.irccloud-cdn.com/file/7X4DmJN4/image.png
06:19
<haxjs>
Get it! Thank u!
17:06
<gibson042>
I just ran across another spatial chat system: https://gather.town/ . It's two-dimensional, which I like, and has a convenient full-space map
17:14
<shu>
gibson042: how's the cpu/gpu consumption on it?
17:15
<ljharb>
my company uses that. i vastly prefer hubs.
17:15
<devsnek>
we used theonline.town once
17:16
<ljharb>
gather.town is basically the same as theonline.town
17:16
<shu>
are there domains on .town that are these spatial chat apps?
17:16
<shu>
that aren't*
17:16
<devsnek>
looks like gather took online and commercialized it
18:00
<gibson042>
cpu/gpu seem to not be excessive, but I'm not sure how they compare to other options