SlideShare a Scribd company logo
@littledan
What TC39 is doing
and how you can help
Daniel Ehrenberg
Igalia, in partnership with Bloomberg
dotJS 2019
@littledan
About me
● Daniel Ehrenberg
● @littledan
● Live outside of Barcelona
● Work for Igalia
-- cooperative consultancy
● Mostly work on TC39
@littledan
Recap: TC39 stages
TC39 stages
● Stage 1: An idea under discussion
● Stage 2: We're doing this and have a first draft
● Stage 3: Basically final draft; ready to go
● Stage 4: 2+ implementations, tests ⇒ standard
@littledan
Stage 4 features
2+ implementations, tests ⇒ standard
@littledan
BigInt: Stage 4!
What is BigInt?
➔ New primitive numeric type to do arbitrary length computations.
◆ New literal: 9128192832918293812823821n
◆ Operator overloading:
● 9007199254740991n + 2n === 9007199254740993n
➔ 64-bits TypedArray (BigInt64Array and BigUInt64Array).
➔ Standard Library to support type casts:
◆ BigInt() and Number() Constructors
➔ No implicit conversion between numbers and BigInt.
const x = 2 ** 53;
⇒ x === 9007199254740992
const y = x + 1;
⇒ y === 9007199254740992
const x = 2n ** 53n;
⇒ x === 9007199254740992n
const y = x + 1n;
⇒ y === 9007199254740993n
const x = 2n ** 53n;
⇒ x === 9007199254740992n
const y = x + 1n;
⇒ y === 9007199254740993n
nstands for BigInt
@littledan
Dynamic import():
Stage 4
Domenic Denicola
@littledan
@littledan
Intl.RelativeTimeFormat:
Stage 4
Zibi Braniecki
Intl.RelativeTimeFormat
● Shipped in Chrome and Firefox
let rtf = new Intl.RelativeTimeFormat("en");
rtf.format(100, "day");
// "in 100 days"
@littledan
Optional chaining:
Stage 4
Daniel Rosenwasser
Claude Pache
Gabriel Isenberg
Dustin Savery
Optional
Property
Access
let x = foo?.bar;
// Equivalent to...
let x = (foo !== null && foo !== undefined) ?
foo.bar :
undefined;
@littledan
Nullish coalescing:
Stage 4
Daniel Rosenwasser
Gabriel Isenberg
Nullish
Coalescing
let x = foo() ?? bar();
// Equivalent to...
let tmp = foo();
let x = (tmp !== null && tmp !== undefined) ?
tmp :
bar();
@littledan
Stage 3 features
Basically final draft; ready to go
@littledan
WeakRefs:
Stage 3
Sathya Gunasekaran
Till Schneidereit
Mark Miller
Dean Tribble
Read consistency
const w = new WeakRef(someObject);
...
if (w.deref()) {
w.deref().foo(); // w.deref() here can not fail
}
@littledan
Private fields and
methods:
Stage 3
Why?
● Private methods encapsulate
behavior
● You can access private fields inside
private methods
class Counter extends HTMLElement {
#x = 0;
connectedCallback() {
this.#render();
}
#render() {
this.textContent =
this.#x.toString();
}
}
# is the new _
for strong encapsulation
class PrivateCounter {
#x = 0;
}
let p = new PrivateCounter();
console.log(p.#x); // SyntaxError
class PublicCounter {
_x = 0;
}
let c = new PublicCounter();
console.log(c._x); // 0
Stage 3
@littledan
Stage 2 features
We're doing this and have a first draft
@littledan
Decorators: Stage 2
Yehuda Katz
Ron Buckton
// Salesforce abstraction
import { api } from '@salesforce';
class InputAddress extends HTMLElement {
@api address = '';
}
Using decorators to track mutations and rehydrate
a web component when needed.
Syntax abstraction for attrs/props in Web Components
// Polymer abstraction
class XCustom extends PolymerElement {
@property({ type: String, reflect: true
})
address = '';
}
Example of using decorators to improve ergonomics.
@littledan
Temporal: Stage 2
Maggie Pint
Philipp Dunkel
@littledan
Stage 1 features
An idea under discussion
@littledan
Pipeline operator: Stage 1
Gilbert Garza
J.S. Choi
James DiGioia
library.js
export function doubleSay(str) {
return str + ", " + str;
}
export function capitalize(str) {
return str[0].toUpperCase() +
str.substring(1);
}
export function exclaim(str) {
return str + "!";
}
with-pipeline.js
import { doubleSay, capitalize, exclaim }
from "./library.js";
let result = "hello"
|> doubleSay
|> capitalize
|> exclaim;
// ===> "Hello, hello!"
ordinary.js
import { doubleSay, capitalize, exclaim }
from "./library.js";
let result =
exclaim(capitalize(doubleSay("hello")));
// ===> "Hello, hello!"
@littledan
Records and Tuples:
Stage 1
Robin Ricard
Richard Button
const marketData = #[
#{ ticker: "AAPL", lastPrice: 195.855 },
#{ ticker: "SPY", lastPrice: 286.53 },
];
@littledan
Operator overloading:
Stage 1
Vector overloading: Usage
// Usage example
import { Vector } from "./vector.mjs";
with operators from Vector;
new Vector([1, 2, 3]) + new Vector([4, 5, 6]) // ==> new Vector([5, 7, 9])
3 * new Vector([1, 2, 3]) // ==> new Vector([3, 6, 9])
new Vector([1, 2, 3]) == new Vector([1, 2, 3]) // ==> true
(new Vector([1, 2, 3]))[1] // ==> 2
@littledan
Stage 0 features
Not even really at a stage!
@littledan
BigDecimal: Stage 0
Andrew Paprocki
“Why are Numbers
broken in JS?”
Problem and solution (?)
// Number (binary 64-bit floating point)
js> 0.1 + 0.2
=> 0.30000000000000004
// BigDecimal (???)
js> 0.1d + 0.2d
=> 0.3d
Transparency, diversity and
inclusion in TC39
We have not been great in the past
Old process:
● Specification: Big MS Word doc
● Communication: Meetings and es-discuss list
● Committee not nearly as diverse as JS programmers
● First-principles theorizing pushing out experience
TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)
TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)
TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)
Invited experts
TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)
TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)
TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)
TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)
TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)
TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)
@littledan
Cultural evolution: The hardest part
● Newer values:
○ Accessibility to newer programmers
○ Integration into the existing JavaScript ecosystem
○ Incremental prototyping and iteration
○ Practicality over perfection (?)
● How to make tradeoffs?
Integrate with other value systems?
○ To be continued...
@littledan
Help wanted!
Any/all of the following appreciated
@littledan
Refine proposals in
GitHub issues
TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)
@littledan
Write test262
conformance tests
TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)
@littledan
Implement tooling,
e.g., Babel, or
JS engines, e.g.,
browsers
TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)
@littledan
Prototype them in
your code and tell us
how it went
@littledan
Write documentation
and educational
materials
TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)
@littledan
Join Ecma and attend
TC39 meetings
@littledan
Conclusion
● Lots of things coming to JavaScript
● Stage process clarifies progress
● We could use your help!
● We are working on making a
friendly, open environment
● Daniel Ehrenberg
● @littledan
● https://tc39.es
@littledan
What really matters: Human and ecological needs
● The climate emergency:
Power structures are destroying the world
● Inclusive, collective action to save us!
@littledan
What really matters: Human and ecological needs
● The climate emergency:
Power structures are destroying the world
● Inclusive, collective action to save us!
like TC39 and free software are trying to build (???)
@littledan
What really matters: Human and ecological needs
● Let's solve important problems together
● JS is fun!

More Related Content

PDF
(not= DSL macros)
PDF
Software Developer Training
PDF
Implementation of RSA Algorithm with Chinese Remainder Theorem for Modulus N ...
PDF
A Comparison of Loss Function on Deep Embedding
PDF
Java OO Revisited
KEY
Object-Centric Debugging
PPTX
Classes in c++ (OOP Presentation)
PDF
Big Decimal: Avoid Rounding Errors on Decimals in JavaScript
(not= DSL macros)
Software Developer Training
Implementation of RSA Algorithm with Chinese Remainder Theorem for Modulus N ...
A Comparison of Loss Function on Deep Embedding
Java OO Revisited
Object-Centric Debugging
Classes in c++ (OOP Presentation)
Big Decimal: Avoid Rounding Errors on Decimals in JavaScript

Similar to TC39: How we work, what we are working on, and how you can get involved (dotJS 2019) (20)

PDF
BigDecimal: Avoid rounding errors on decimals in JavaScript (Node.TLV 2020)
PDF
Metrics ekon 14_2_kleiner
PPTX
12. MODULE 1.pptx
PDF
Standardizing JavaScript Decorators in TC39 (Full Stack Fest 2019)
PPT
C#, What Is Next?
PDF
Hidden in Plain Sight: DUAL_EC_DRBG 'n stuff
PDF
Clean Code 2
PDF
BigInts In JavaScript: A Case Study In TC39 (JSConf EU 2018)
PDF
Test Driven Development
PPTX
TDD: seriously, try it! 
PPTX
Intro-OOP-PPT- an introduction to the su
PPTX
OOP PPT 1.pptx
PPT
BP206 - Let's Give Your LotusScript a Tune-Up
PDF
Balancing Infrastructure with Optimization and Problem Formulation
PDF
Reduction
PDF
EKON 23 Code_review_checklist
PDF
Eugene Burmako
PDF
Bdd and-testing
PDF
Behaviour Driven Development and Thinking About Testing
 
PDF
Eye deep
BigDecimal: Avoid rounding errors on decimals in JavaScript (Node.TLV 2020)
Metrics ekon 14_2_kleiner
12. MODULE 1.pptx
Standardizing JavaScript Decorators in TC39 (Full Stack Fest 2019)
C#, What Is Next?
Hidden in Plain Sight: DUAL_EC_DRBG 'n stuff
Clean Code 2
BigInts In JavaScript: A Case Study In TC39 (JSConf EU 2018)
Test Driven Development
TDD: seriously, try it! 
Intro-OOP-PPT- an introduction to the su
OOP PPT 1.pptx
BP206 - Let's Give Your LotusScript a Tune-Up
Balancing Infrastructure with Optimization and Problem Formulation
Reduction
EKON 23 Code_review_checklist
Eugene Burmako
Bdd and-testing
Behaviour Driven Development and Thinking About Testing
 
Eye deep
Ad

More from Igalia (20)

PDF
Life of a Kernel Bug Fix
PDF
Unlocking the Full Potential of WPE to Build a Successful Embedded Product
PDF
Advancing WebDriver BiDi support in WebKit
PDF
Jumping Over the Garden Wall - WPE WebKit on Android
PDF
Collective Funding, Governance and Prioritiation of Browser Engine Projects
PDF
Don't let your motivation go, save time with kworkflow
PDF
Solving the world’s (localization) problems
PDF
The Whippet Embeddable Garbage Collection Library
PDF
Nobody asks "How is JavaScript?"
PDF
Getting more juice out from your Raspberry Pi GPU
PDF
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
PDF
Demystifying Temporal: A Deep Dive into JavaScript New Temporal API
PDF
CSS :has() Unlimited Power
PDF
Device-Generated Commands in Vulkan
PDF
Current state of Lavapipe: Mesa's software renderer for Vulkan
PDF
Vulkan Video is Open: Application showcase
PDF
Scheme on WebAssembly: It is happening!
PDF
EBC - A new backend compiler for etnaviv
PDF
RISC-V LLVM State of the Union
PDF
Device-Generated Commands in Vulkan
Life of a Kernel Bug Fix
Unlocking the Full Potential of WPE to Build a Successful Embedded Product
Advancing WebDriver BiDi support in WebKit
Jumping Over the Garden Wall - WPE WebKit on Android
Collective Funding, Governance and Prioritiation of Browser Engine Projects
Don't let your motivation go, save time with kworkflow
Solving the world’s (localization) problems
The Whippet Embeddable Garbage Collection Library
Nobody asks "How is JavaScript?"
Getting more juice out from your Raspberry Pi GPU
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
Demystifying Temporal: A Deep Dive into JavaScript New Temporal API
CSS :has() Unlimited Power
Device-Generated Commands in Vulkan
Current state of Lavapipe: Mesa's software renderer for Vulkan
Vulkan Video is Open: Application showcase
Scheme on WebAssembly: It is happening!
EBC - A new backend compiler for etnaviv
RISC-V LLVM State of the Union
Device-Generated Commands in Vulkan
Ad

Recently uploaded (20)

PDF
Approach and Philosophy of On baking technology
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPT
Teaching material agriculture food technology
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
Approach and Philosophy of On baking technology
Spectral efficient network and resource selection model in 5G networks
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
Mobile App Security Testing_ A Comprehensive Guide.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
20250228 LYD VKU AI Blended-Learning.pptx
Programs and apps: productivity, graphics, security and other tools
Assigned Numbers - 2025 - Bluetooth® Document
The Rise and Fall of 3GPP – Time for a Sabbatical?
Teaching material agriculture food technology
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Network Security Unit 5.pdf for BCA BBA.
“AI and Expert System Decision Support & Business Intelligence Systems”
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
A comparative analysis of optical character recognition models for extracting...
Reach Out and Touch Someone: Haptics and Empathic Computing

TC39: How we work, what we are working on, and how you can get involved (dotJS 2019)