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.