From frontend developers to data scientists; from hobbyists to researchers, the
JavaScript programming language offers something to everyone. Still, while
everybody asks "what is JavaScript?" nobody asks "how is JavaScript?".
It might therefore be interesting to dig a bit deeper...
From frontend developers to data scientists; from hobbyists to researchers, the
JavaScript programming language offers something to everyone. Still, while
everybody asks "what is JavaScript?" nobody asks "how is JavaScript?".
It might therefore be interesting to dig a bit deeper into this complex and
versatile programming language: Where is it going? How has it evolved over the
years? How does language design and evolution happen in the first place? What
are the rules put in place to ensure that it evolves in the right direction and
continue to serve its ever-evolving set of users and other stakeholders?
Join me in this overview of the TC39 standards committee, its processes and
initiatives as we learn just how much work goes into reshaping the most popular
programming language for the future.
(c) FOSDEM 2025
1 & 2 February 2025
https://fosdem.org/2025/schedule/event/fosdem-2025-4276-nobody-asks-how-is-javascript-/
Size: 3.34 MB
Language: en
Added: Mar 11, 2025
Slides: 62 pages
Slide Content
Bienvenue
Welkom
Welcome
About Me
Ujjwal Sharma (ryzokuken)
from New Delhi, India
based out of A Coruña, Galiza
OSS zealot, open web maximalist
love dogs, (masochistic) videogames
work at Igalia
About
An open-source consultancy
A worker-owned cooperative
Extensive work across major open source projects and ecosystems
Linux kernel, userspace and multimedia
Major contributor in the web platform and browser projects
Compilers (JS engines, LLVM) and PL design (WASM, JS)
@ryzokuken
@ryzokuken
Everybody asks
"What is JavaScript?"
Nobody asks
"How is JavaScript?"
@ryzokuken
Did you know that JavaScript
is standardized?
@ryzokuken
Consensus-based decisions
Diverse set of people in the committee
Implementers, Practitioners, Community Experts, Academics
Objections and concerns to satisfy everyone
No stakeholder has more power than others, concerns must be rational
@ryzokuken
STAGES
Steps where proposal evolves and receives
feedback
4 stages of maturity ← more on this later! ??????
@ryzokuken
TASK GROUPS
TC39 charters sub-groups to work on focus areas:
?????? TG1: The core ECMAScript specification
?????? TG2: Internationalisation
?????? TG3: Security
?????? TG4: Sourcemaps ??????
?????? TG5: Research on Language Standardization ??????
@ryzokuken
Where
Where
When
6 Plenary Meetings a year
Online or In person
Focus Groups and Incubator
Calls
Monthly or Biweekly
TG2 / Editors / Outreach /
Proposals / Educators / Tools
Monthly or Biweekly
@ryzokuken
The Process
3
Stage-by-stage
2.7 &
@ryzokuken
STAGE 0 ??????
Strawperson
Just an Idea
Explainer, idea under discussion
Oversimplified proposal
STAGE 1
Describe the shape of a solution it’s an idea
under discussion
Proposal ??????
Devote time and have a “Champion”
Demos / Polyfills
Major changes
STAGE 1
Signals
Daniel Ehrenberg, Yehuda Katz, Jatin Ramanathan,
Shay Lewis, Kristen Hewell Garrett, Dominic
Gannaway, Preston Sego, Milo M, Rob Eisenberg
// A VanillaJS Counter
let counter = 0;
const setCounter = (value) => {
counter = value;
render();
};
// This fetches but does NOT evaluate "mod"
import defer * as ns from "mod";
function rarelyUsed () {
// "mod" is lazily evaluated on first use of `ns`
console.log(ns.prop);
}
...
New!
STAGE 2.7 ShadowRealm
Dave Herman, Mark Miller, Caridy Patiño, Leo
Balter, Rick Waldron, Chengzhong Wu
const shadowRealm = new ShadowRealm();
// pluginFramework and pluginScript become available in the ShadowRealm
const [ init, ready ] = await Promise.all([
shadowRealm.importValue('./pluginFramework.js' , 'init'),
shadowRealm.importValue('./pluginScript.js', 'ready'),
]);
// The Plugin Script will execute within the ShadowRealm
init(ready);
STAGE 3
Recommended for
implementation??????
Implementation and validation phase
(feedback from implementers, web-compatibility)
Tests have been created for test262
We will only change things if implementation reveals new information
Engines will begin implementing
Browsers may start shipping with or without a flag
STAGE 3 Temporal
Philipp Dunkel , Maggie Johnson-Pint,
Matt Johnson-Pint, Brian Terlson,
Shane Carr, Ujjwal Sharma, Philip Chimento,
Jason Williams, Justin Grant
class C {
message = "hello!";
@bound
m() {
console.log(this.message);
}
}
let { m } = new C();
m(); // hello!
STAGE 4 Finished??????
About to be include in the upcoming edition
of ECMAScript®
We have two implementations that pass the acceptance tests
We have real-life experience of shipping the feature
We have merged the feature into the Spec
It might not yet be shipping in all mainstream engines
The feature will be included in the next yearly edition, e.g. ES2024
STAGE 4 ArrayBuffer transfer
Shu-yu Guo, Jordan Harband, Yagiz Nizipli
function validateAndWriteSafeAndFast (arrayBuffer) {
// Transfer to take ownership, which implementations can choose to
// implement as a zero-copy move.
const owned = arrayBuffer.transfer();
// arrayBuffer is detached after this point.
assert(arrayBuffer.detached);