WEBVTT

00:00.000 --> 00:07.880
All right, all right, people were going to get started with

00:07.880 --> 00:12.560
usual, usual is a dear friend of mine and a T.C. 39 coacher, so please give

00:12.560 --> 00:14.320
them a round of applause to get them started.

00:14.320 --> 00:27.280
Okay, hi, welcome everyone to this talk, it's pretty early for me, but I hope

00:27.280 --> 00:31.280
you're excited and energized for this talk.

00:31.280 --> 00:37.200
Luca told me stole my team, but whatever, like yellow slides, that's kind of my

00:37.200 --> 00:38.200
technique.

00:38.200 --> 00:44.040
No, but yeah, thank you for being here, before we get into the actual subject matter,

00:44.040 --> 00:48.480
I want to go over what's probably the most important thing here, a little bit about

00:48.480 --> 00:53.960
me, here's me with the first G.S. spec, I don't know, something like that, I'm

00:53.960 --> 00:58.480
usual, on the internet, you might find me at Ryzo Kuchen, whichever is easier to

00:58.480 --> 01:07.480
pronounce, you might go with that in person, I am from India, from New Delhi, and I live in

01:07.480 --> 01:14.120
Akorunia in Spain, it's one of the fun places, so check it out.

01:14.120 --> 01:20.840
I love open source software, the open web, it has taught me everything that I know, and also

01:20.840 --> 01:29.000
a badly designed video games that hurt my mental health permanently, but I work at EGALIA,

01:29.000 --> 01:35.640
quick show of hands, how many of you know about EGALIA, wow, it's the best conference,

01:35.640 --> 01:42.440
but for the rest of you, I'll go over what EGALIA is just a little bit, so we are an open

01:42.440 --> 01:48.920
source consulting, that means that we work on open source software, exclusively as long

01:49.000 --> 01:56.600
as we can at least, we are also a worker on cooperative, and we work across different projects

01:57.640 --> 02:04.440
and various different ecosystems, these are anywhere from really low-level, Linux kernel stuff,

02:04.440 --> 02:13.400
stuff in the Linux user space, G.S. streamer, multimedia, all the way to browsers, as you might

02:13.480 --> 02:20.440
know, most important browser engines are entirely open source, so we work on Chromium and VETKit

02:20.440 --> 02:30.280
primarily, and also on Compilers, so that includes JavaScript engines, LVM, and that brings me

02:30.280 --> 02:36.120
to my area of work, which is programming language design that includes the assembly and JavaScript,

02:36.120 --> 02:43.080
but I hope that's what we're interested in. So JavaScript, right? It's a weird language,

02:43.160 --> 02:49.160
but hopefully the one that we love, even though it's not that easy to love, but

02:51.000 --> 02:56.360
we have a lot of great talks today about different subjects about JavaScript, how to do x, y, and z

02:56.360 --> 03:06.280
about JavaScript, but that sort of irks me a little bit because, you know, nobody asks how is

03:06.280 --> 03:17.320
JavaScript, but okay, y, I mean, if we tried to dig a bit deeper into how is JavaScript,

03:17.320 --> 03:23.640
maybe we wouldn't be where we are now, and it'd be a language that serves its core users

03:23.640 --> 03:34.760
rather than hurt them mentally, but to get into like, why it is like that, I think we should

03:34.840 --> 03:40.520
focus on like, what makes it evolve, right? Did you know that JavaScript is a standardized programming

03:40.520 --> 03:49.640
language like C or C++, and unlike Rust? It's a good programming language that is standard,

03:49.640 --> 03:55.160
that means that various different stakeholders come together to evolve it, but how does this happen,

03:55.160 --> 04:00.680
even? So first of all, what is even a standard spotty? Have any of you ever participated in any

04:00.760 --> 04:08.840
standard spotty? What's whoever? No, okay, a few people, but you know, do you remember this whole

04:08.840 --> 04:19.240
fiasco about emojis? So why does like the Google emoji have cheese on the bottom? Like,

04:20.120 --> 04:27.800
it's just cheese on the bun, but that sort of is the issue with standardization, right? Unicode

04:27.800 --> 04:33.720
can standardize that you have to make a burger, but they can't make you make good burgers. So it might

04:33.720 --> 04:39.960
be a very useless burger, but it is a burger, I guess I mean it's obvious that all of these are

04:39.960 --> 04:46.360
burgers, but sometimes the lines can be a bit blurry, but this is how standardization works.

04:46.360 --> 04:50.440
So we have all of these various standards organizations. You might know about what

04:50.600 --> 04:58.280
we're doing about W3C, that standardized a lot of the web as we know it. Iso, which does things

04:58.280 --> 05:05.800
like how tall your ceiling should be, and everything else, I mean it's very important, and that brings

05:05.800 --> 05:12.600
us to Ekma. Ekma sounds difficult, I think it was like brand-night who said that it sounds like

05:12.600 --> 05:19.960
a skin disease, but I promise you that it's less painful than that because Ekma is important actually.

05:20.760 --> 05:25.880
But Unicode, we already talked about that, that's a standard organization that does useful work as

05:25.880 --> 05:33.640
well, and so many other things, IFF might be popular among foster attendees, for instance. But

05:34.840 --> 05:41.880
all of them strive to do basically the same thing, which is bring different people, different parties,

05:41.880 --> 05:48.200
stakeholders, together to unify on a certain vision, and make things easier for everyone,

05:48.280 --> 05:55.800
hopefully better as well. TC39 also is one of the more descriptive names that we have.

05:57.000 --> 06:02.360
TC39 is the technical committee that defines the JavaScript language.

06:04.520 --> 06:11.240
Quick question, does anyone know why it's TC39, like why 39? Why?

06:11.320 --> 06:21.880
Yeah, the first 31 failed, this is a 38 failed, no. But it's the 39th, so that's why

06:21.880 --> 06:27.400
there's TC39. But who is TC39? Like what makes up this abstract sounding entity,

06:28.680 --> 06:35.000
you might realize that there's a few people that you like in there, there's regular delegates in

06:35.000 --> 06:40.920
TC39, so these are different stakeholders, for example, implementers, these are people who build

06:41.000 --> 06:45.480
different implementations that one JavaScript, so it could be your Apple, Google,

06:45.480 --> 06:52.840
Mozilla, Microsoft, delegates, then there's different companies that build big JavaScript code bases,

06:52.840 --> 06:59.400
it could be big web applications, it could be something more interesting than that, that includes

06:59.400 --> 07:07.800
players like Sony and Bloomberg, then there's student bodies and non-profits, so various universities,

07:07.960 --> 07:14.840
I don't know if ULB actually is a part of TC39, but definitely, yeah, no. So there's a few

07:14.840 --> 07:20.280
different universities that we work with, students who are excited about JavaScript or professors

07:20.280 --> 07:27.720
who have to tease the slangwage and want to make it better or bodies like the OpenJS Foundation

07:27.720 --> 07:34.440
that represents different open source projects in the JavaScript space. Then there's invited experts,

07:34.440 --> 07:40.920
now these are individual people who are invited to the committee for their expertise or, you know,

07:40.920 --> 07:46.520
some area that they could help us standardize things in a way that fits the needs of users,

07:46.520 --> 07:51.880
so usually it includes subject matter experts, let's say for example, that we're building a library

07:51.880 --> 07:58.520
that does time zone handling, none of us know how to do time zone, so might as well include somebody

07:58.600 --> 08:06.680
who has some idea of how time zones work. It's hard to find that person, but if we can, time zones,

08:06.680 --> 08:12.040
but there could be community representatives, there's people who either are very influential

08:12.040 --> 08:18.280
in certain parts of the community or are, you know, very aware of the needs of certain communities,

08:18.280 --> 08:25.480
and it's very important to invite them so that we can get their perspective, and there's the

08:25.480 --> 08:32.840
cast of everybody else, there's contributors who help us basically do everything editors who

08:32.840 --> 08:39.080
look after the editorial health of these different specs that we publish, there's people who

08:39.080 --> 08:44.280
review different things, and the community at large, I would like to believe that they're

08:44.280 --> 08:51.240
apart of TC39, that said as we will go through the rest of my presentation, you'll realize that

08:51.320 --> 08:57.480
it's basically my bit to get you all excited about TC39, so hopefully the community will play

08:58.520 --> 09:05.160
better or bigger role in things moving forward, but let's see how that happens.

09:05.960 --> 09:13.800
First of all, how does TC39 work? It might be boring if you already know, but this is very important

09:13.880 --> 09:22.040
because unless you know at least vaguely how things progress, it's very hard to just go in

09:22.040 --> 09:26.920
and try to contribute, because somebody else might have completely different context than you,

09:26.920 --> 09:35.480
they might say, hey, thank you for your review, but this is very badly time, so how can you

09:36.280 --> 09:40.840
optimize for you know, best engagement whenever you want to contribute with TC39?

09:41.240 --> 09:46.680
First of all, if you take away one thing from this old talk, this would be it.

09:47.640 --> 09:56.440
No decision in TC39 is ever voted on, we also don't force people to do certain things certain

09:56.440 --> 10:06.040
way or go on sort of some technical criteria for doing certain things, rather we build consensus.

10:06.120 --> 10:12.680
So everything that happens in the JS language needs to have consensus from the various stakeholders

10:12.680 --> 10:18.600
that are there. So this is very important and this only works if you have these two things.

10:18.920 --> 10:23.160
First of all, we need to have a diverse set of people in the committee. If the committee is just

10:23.560 --> 10:28.520
you know people with essentially the same interest, there's no point of consensus, I mean they're

10:28.520 --> 10:34.920
virtually aligned on everything. So it's very important to take these different sides of every argument,

10:35.560 --> 10:41.000
the perspective of somebody who is an implementer, who is very focused on the technical details in

10:41.000 --> 10:45.880
some aspects, then there's practitioners, people who actually write JavaScript and get a lot about

10:45.880 --> 10:54.120
the ergonomics, there's people who are academics, for example, who are more interested in how

10:54.120 --> 11:01.880
do I even teach my students, how do I do any of this? Secondly, it's important that any

11:01.960 --> 11:08.200
objections that are made to anything is done in a way that is respectful to other people's work.

11:08.200 --> 11:15.000
You can't just come in and say, I hate your work. Please stop doing this. Instead, you must

11:15.000 --> 11:21.160
elaborate your concerns. You might have to say what would make you change your mind, for example.

11:21.880 --> 11:27.240
And this is important because at the end of the day, no stakeholders should have more power than others.

11:27.320 --> 11:34.840
Right? If your, you know, not in control of say an implementation, that doesn't mean that

11:34.840 --> 11:42.360
your opinion on certain things matters less, it could mean that it, you know, is more important than,

11:42.360 --> 11:49.080
you know, people who are so immersed in a certain area of work that they don't have the perspective

11:49.080 --> 11:54.360
that you do. Most importantly, though, all the concerns must be rationed. You cannot just say,

11:54.440 --> 12:01.400
I hate this feature because it looks weird. Like, you know, you might have, you might have to explain

12:01.400 --> 12:07.880
your reasoning for why you object to certain things. So, yeah, that's how we build consensus.

12:08.600 --> 12:14.200
This consensus is built in stages. So, we have a stage process. We'll go into this later,

12:14.200 --> 12:19.480
but there's basically four different stages of maturity for everything that we do, which means that

12:19.640 --> 12:25.800
at a certain stage, a certain kind of decision making might be more important than the other.

12:27.000 --> 12:34.760
So, yeah, we'll go into that a bit more. But these are basically different steps in the evolution

12:34.760 --> 12:42.280
of any proposal. So, we go from something very theoretical to something that exists out there on the web.

12:42.280 --> 12:49.240
And, you know, I'll explain how that sort of materializes. We have different task groups that do

12:49.320 --> 12:55.880
certain tasks. Now, obviously, T.C. 39 as a whole is responsible for certain things,

12:55.880 --> 13:04.840
but a lot of like the technical dirty even responsibilities lie in individual task groups,

13:05.480 --> 13:12.280
which tend to meet more often, more, you know, and discuss basically more technical matters.

13:13.000 --> 13:20.360
These are T.C. 1, which is the sort of core, etymotry of specification that's virtually everyone

13:20.360 --> 13:27.640
in T.C. 39, although maybe not, because certain people are only interested in a single task group

13:27.640 --> 13:35.160
and not JavaScript writ large. So, you know, T.C. 32 is about internationalization. This is where

13:35.880 --> 13:42.440
I've spent most of the last couple of years working T.C. 3 is all about security, security,

13:42.440 --> 13:49.720
in certain special context where maybe you need something special compared to like regular browser.

13:49.720 --> 13:55.160
Security model is, if you know, a lot of the security model of the browsers is very specific

13:55.160 --> 14:03.400
towards browsers, then there's source maps, which is relatively new. We have an editor of the source

14:03.480 --> 14:11.880
map spec, but there's already a source map spec right now. So, yeah, I hope you're excited about

14:11.880 --> 14:17.880
that. And then finally, we have another new task group, which is for research on language

14:17.880 --> 14:23.400
standardization. This is quite a bit more academic and if any of you are into that, then I

14:23.400 --> 14:29.800
would implore you to check it out. There does all of this activity happen, you may ask,

14:30.440 --> 14:36.440
primarily on GitHub, right? So, we have a GitHub T.C. 39 organization where there's a bunch of

14:36.440 --> 14:42.440
these repositories, and as you might notice, one of our repositories is ECMA-262, which is

14:42.440 --> 14:49.160
the JavaScript spec. So, everything that is the JavaScript language standardized and specified

14:49.160 --> 14:55.880
is entirely in this repository. You can go and check out the different issues, you can maybe

14:55.960 --> 15:02.120
fix a bug or just like, you know, open an issue and let people know what you think about certain

15:02.120 --> 15:08.280
things, but be respectful. Then there is different like meta repositories, as you might see,

15:08.280 --> 15:13.720
there's things for tracking different proposals, there's things for notes, but basically,

15:13.720 --> 15:19.880
every single TC39 proposal that is ongoing at the moment is the repository here. So,

15:20.680 --> 15:27.240
anything that you might want to express yourself about or get involved into is going to be on this

15:27.240 --> 15:33.640
single organization. So, I hope that this is like, you know, the funnel that brings you into anything

15:33.640 --> 15:40.520
you're interested in. Then we also have literally the ECMA-Script spec. It's on a website.

15:42.680 --> 15:47.720
Here's the website, but, you know, if you search around, you'll find it. You can read through it,

15:47.800 --> 15:54.760
if you'd like, and if you don't care about your sanity, but most importantly, there's different

15:54.760 --> 16:04.120
parts of the spec where, you know, you can see exactly how the language has these different

16:04.120 --> 16:11.640
semantics that actually play out when you write your code. So, that's the spec. When do we meet?

16:12.040 --> 16:18.680
We have these big plenary meetings where everybody comes together and all the big movement happens.

16:18.680 --> 16:24.200
So, this is the only place, for example, where a proposal may advance a stage that we talked about,

16:24.200 --> 16:30.840
these stages, and these six meetings per year are either online or in person. Right now,

16:30.840 --> 16:36.920
we have reached a fun cadence of three and three. So, three meetings are entirely online and three

16:37.000 --> 16:45.000
meetings are in person with online participation, with each of them being in one of the continents,

16:45.000 --> 16:53.320
either in the Americas, in Europe or in Asia. Then we have these more focused calls or different

16:53.320 --> 16:59.080
groups that can meet more often. They talk about some specific areas that they're interested in,

16:59.080 --> 17:05.400
and then there's more like administrative calls like the TG2 call like that does everything about

17:05.400 --> 17:12.280
in nationalization. There is the editors group that meets every week or so to talk about their work.

17:12.280 --> 17:17.480
There's outreach calls, every proposal might have their own poll. There's a call for educators,

17:17.480 --> 17:25.080
for two makers. Basically, anyone who might have some important feedback to bring to us or,

17:26.840 --> 17:33.240
some bone to pick can be found in one of these calls. And some of these are open to public

17:33.240 --> 17:39.160
participation. So, if you're interested, then here's a way to get involved quite easily.

17:40.120 --> 17:53.080
Now, let's talk about the next stage by stage process. So, first stage is stage 0. We start with

17:53.080 --> 18:01.160
0 because we have to, we're programmers. The first stage is Stroperson, and I represent it with the

18:01.160 --> 18:06.200
light bulb because it's just an idea. It could be something that you've struggled on a piece of paper.

18:06.200 --> 18:12.360
It might be something that purely exists in your head. Most likely, it's an explainer document.

18:12.360 --> 18:17.720
And an explainer document is basically a document preferably marked down that

18:18.120 --> 18:25.080
explains kind of your idea, the motivation, something that exists sort of prior art, and

18:25.080 --> 18:29.960
you know, how you're going to achieve something. But most importantly, it's an idea under

18:29.960 --> 18:37.960
discussion and consideration, but it is not yet a proposal. It's at best heavily oversimplified proposal,

18:37.960 --> 18:43.080
but it's not something that has actually been accepted at any level by the committee as, you know,

18:43.160 --> 18:48.360
something legitimate. It might be just too early for that, or it might be a very unpopular idea,

18:49.400 --> 18:55.000
or none of those, but like, that's what stage 0 is essentially. There's a lot of stage 0 proposals.

18:55.000 --> 19:02.440
As you might see, some of them are just abandoned. Some of them are fun. I don't know.

19:02.440 --> 19:09.480
If you're interested in any of these, I don't know. Maybe not the most productive set of proposals,

19:09.480 --> 19:17.720
but we have do feel free to sort of put your effort behind these. Then we have stage 1,

19:17.720 --> 19:24.360
which is a proposal. You might say they're all proposals. Yes, but this is where the proposal gets

19:24.360 --> 19:31.480
real, right? Like, essentially what happened is you had a stage 0 proposal, you brought it to committee,

19:31.480 --> 19:37.480
and the committee, by consensus, agreed that this is a problem, right? And this is the important

19:38.440 --> 19:44.920
part here. By this stage, we are not talking about solutions yet, because it's probably unproductive

19:44.920 --> 19:51.000
to talk about solutions at this point. The more important thing at this stage is the problem,

19:51.000 --> 19:57.720
you know, the first thing that we have to agree upon is a problem statement that there is indeed an issue

19:57.720 --> 20:05.400
in the language, and it needs to be changed somehow. And the solution is very much up to, you know,

20:05.400 --> 20:12.440
where things sort of go after this. But finally things are starting to get serious. So,

20:12.440 --> 20:18.360
this is where we start to devote actual time, either in committee or outside, but probably both,

20:19.160 --> 20:24.200
and you also get a champion. Now, what is the champion? Is it somebody who takes a great

20:24.200 --> 20:32.200
sword and fights people, kinder, online? But mostly it's like, you know, somebody who is on the

20:32.200 --> 20:40.280
committee and is basically responsible for managing the lifetime of a proposal, right? It's somebody

20:40.280 --> 20:46.600
who brings the proposal to the committee and says, hey, like, we need to get some work done here.

20:47.720 --> 20:53.240
This is also where we start dealing with some demos, some polyfills, and where all the major

20:54.200 --> 21:01.720
changes happen in any proposal. An example of this is signals, and if you use signals in your

21:02.040 --> 21:08.840
applications or excited about signals, no, okay, a few of you. Like, signals is one of the ideal

21:08.840 --> 21:13.320
stage one proposals, in my opinion, it's something that is vitally popular from what I understand

21:13.320 --> 21:18.440
in the front end ecosystem at the very least, and it's something that we are starting to investigate

21:19.320 --> 21:26.040
more recently in the committee. So, this is kind of how it looks not very important yet,

21:26.040 --> 21:31.720
because as I told you, stage one means everything could change. So, don't get too attached,

21:31.720 --> 21:39.960
is what I mean. Then there's another stage one proposal that's decimal. I don't have to explain

21:40.040 --> 21:50.120
a lot about this proposal, and yeah, I mean, stage one proposals for the PLDR, there's a few of

21:50.120 --> 21:55.640
these that we're working on type annotations might be popular, but basically are all of these things

21:55.640 --> 22:00.440
that we're working on that we're actively exploring the problem space in trying to figure out

22:00.440 --> 22:07.160
what works best. Then we come to stage two. I have a construction emerging for this, but we call it a

22:07.160 --> 22:14.440
draft. This is where certain precise like syntactic and semantic details are starting to like,

22:14.440 --> 22:19.880
you know, basically come into place. It's like a puzzle that is starting to come together.

22:21.080 --> 22:27.240
This is the part where we lay down the actual spectacles. So, we start specifying things,

22:27.240 --> 22:32.440
and as you might have realized this is where, you know, we have to define certain semantics

22:32.520 --> 22:41.080
and API. These are not completed at this stage, but it is certainly something that starts

22:41.080 --> 22:48.520
getting fleshed out. An important thing here is that TC39 expects at this stage that certain things

22:48.520 --> 22:54.680
would be developed in the future. Now, there might be cases where things still fall apart,

22:54.680 --> 23:01.080
after stage two, but it's not by design. Also, things at this stage are highly experimental.

23:01.160 --> 23:06.600
It's not stage one, but still, a lot of the problem space is still getting explored. People are

23:07.160 --> 23:13.560
on their computers typing seriously and trying to figure out what's the best solution for anything.

23:13.560 --> 23:19.320
But most importantly, from what I said, this is the area where we're actually in solution territory.

23:19.320 --> 23:25.960
Now, the only issue is that we still haven't unified on a single solution, and we're probably

23:25.960 --> 23:32.280
exploring a bunch of different ideas to see what works best. An example of stage two proposal is

23:32.280 --> 23:39.560
a syncontext. I have some examples for how a syncontext works, but that's not very important,

23:39.560 --> 23:47.240
and I'm running behind on time. So, let's be quick, but a syncontext. And there's a stage

23:47.240 --> 23:53.960
two proposal for extractors. So, you know, something you might be familiar from Rust, I believe.

23:54.600 --> 24:06.920
N, after stage two comes, drum roll, stage 2.7. So, we have a stage 2.7. Why 2.7? I don't know,

24:06.920 --> 24:12.760
because we're nerds, but why introduce a new stage? Because we realize that there's something

24:12.760 --> 24:19.960
wrong with the life cycle of a proposal, which is that you are constantly working on these different

24:19.960 --> 24:27.960
details in stage two, and then on stage three, as you will hear from me in a bit, you're supposed

24:27.960 --> 24:35.160
to start implementing things, which means that there's a small window of time between those two

24:35.160 --> 24:41.400
things happening, where the feature might be done, like whatever we were working on, but there's no

24:41.400 --> 24:47.080
test. So, you can't actually start implementing it, and we started to be more mindful about these

24:47.080 --> 24:51.960
things. So, we decided to put in a separate stage that hopefully doesn't take a lot of time,

24:51.960 --> 24:57.480
but this is the stage where you literally stop making changes and start writing tests.

24:59.320 --> 25:07.160
So, we call it the candidate stage, but essentially idea is that the details that we have done so far

25:07.160 --> 25:13.880
are proved in principle, but still needs feedback from testers. So, we start writing extensive tests,

25:14.120 --> 25:23.960
and yeah, make way for implementations. There's these different areas where you might feel like

25:23.960 --> 25:28.920
getting involved. There's the test two six two repository. It's literally the conformance test

25:28.920 --> 25:36.600
suite for this standard, the pre-white, and it's one of the more fun JavaScript projects in my opinion,

25:37.160 --> 25:41.880
and yeah, do contribute, and you might feel like you know a little bit more about the weird

25:41.880 --> 25:47.880
porcupine details of our language. And there's also this dashboard by our friend Canada Hong

25:49.400 --> 25:54.200
about, you know, test two six two coverage in different engines and so on.

25:55.640 --> 26:03.720
An example of stage 2.7 is a different evaluation. So, you can differ evaluating the proposal

26:03.720 --> 26:10.920
until it's actually used. Another one is shadow realms. This has nothing to do with ugeo,

26:10.920 --> 26:17.800
I think, but you know, I told you were nerds, but things are getting out of hand, but

26:18.760 --> 26:25.400
there with me. So, yeah, shadow realms is real like it's a real object that's called shadow realms,

26:25.400 --> 26:31.880
and I think that's the most interesting detail about it. Then there's math dot some precise.

26:32.520 --> 26:39.080
We might not be able to get decimals, or at least quickly, but we can actually at least

26:39.160 --> 26:46.680
precise the add numbers. So, that's the first. But yeah, so basically it allows you to do

26:47.320 --> 26:53.240
better addition without losing some precision. Then there's stage 3. This is where things are

26:53.240 --> 26:58.520
actually recommended. It recommended sorry for implementation, and we start getting feedback from

26:58.520 --> 27:03.880
implementers and from actual developers. The most important thing though is that this is the point

27:03.880 --> 27:10.440
where we stop, we take off our opinion hats, and try to listen to more feedback from people.

27:11.480 --> 27:18.440
And yeah, things are tested. You can implement them in your engine, and things might be shipping

27:18.440 --> 27:23.960
at this point, with or without a flag. I hope that this is a popular proposal. It's something that

27:23.960 --> 27:29.960
I personally worked on, but one of our better stage 3 proposals is temporal. From what I hear,

27:29.960 --> 27:36.600
it's now in Firefox nightly, so do check it out. And we have a talk later today about it.

27:38.280 --> 27:44.920
I don't have to say much about temporal. I think this statistics says it all. It's

27:44.920 --> 27:51.320
by far the most popular proposal in JavaScript. And yeah, I hope it really helps developers as much

27:51.400 --> 28:00.360
as we want it to. But yeah, quick, example about temporal, you can do fun, sort of daytime

28:00.360 --> 28:06.920
math things with it that were not really, I wouldn't say possible, but easy to do so far in

28:06.920 --> 28:14.520
JavaScript, and all of these different operations, time zones, somehow work. Wow. And then there's

28:14.520 --> 28:19.320
decorators. This way, we also something that you use in your code base already without even noticing

28:19.320 --> 28:26.680
that this isn't yet, well, it is now, but it hasn't been for last 20 years or so, something that

28:26.680 --> 28:34.600
was implemented in the language itself. But yeah, you can have, it's not exactly what people use

28:34.600 --> 28:42.200
in their applications, but it's a bit more restrictive version of decorators. And then finally,

28:42.200 --> 28:47.480
we have the final stage, which is stage 4. Everything is done. We have process all the feedback

28:47.560 --> 28:56.920
that we got and we need to call the project finished. It might not be shipping everywhere yet,

28:57.880 --> 29:04.840
but this is kind of the moment where we keep down our pens, add the version to the next addition

29:05.800 --> 29:12.520
version of the spec and call it a day. An example of this is a rainbow for transfer, which allows

29:12.520 --> 29:22.200
you to write code that could be optimized by the engine. Set methods, I have no idea why these

29:22.200 --> 29:29.880
never existed so far, but now you can do actual stuff with sets. Wow, they're useful. Now,

29:30.680 --> 29:36.920
and a bunch of different proposals that are, you know, by this time you might have noticed that

29:37.240 --> 29:43.960
the proposals are getting continuously filtered down to the point where everything that ends up here

29:43.960 --> 29:50.920
is more or less, you know, something that we all find useful in one way or another.

29:52.760 --> 30:00.360
And then we have, you know, all these different tools, like Babylon's WC or TypeScript,

30:00.440 --> 30:06.840
that implement even newer features in like every year, we introduce a new version to the spec.

30:07.400 --> 30:14.840
So, yeah, the next addition will come out in June. Finally, I would like to help you get involved here.

30:14.840 --> 30:20.840
I hope you were excited by what I talked about, but there's a few different ways that you can

30:20.840 --> 30:28.440
contribute, even if you have no experience in standardization. Really, anyone who is somewhat

30:28.520 --> 30:35.560
vaguely excited about JavaScript should be able to do any or all of these tasks. So, please

30:35.560 --> 30:40.520
help out in any way you can and do reach out. Thanks.

