Quo Vadis JavaScript?

During the presentation we're gonna answer questions like "What is TC39, what is its role and why you should care?", "What's ECMAScript?", "What's ECMA262 or 402?", "What's coming in ES2020?" and hopefully many more!

Speaker

Łukasz Rybka

"Quo Vadis JavaScript" [EN]

2020-04-08

@Smoczysko

whoami

  1. Łukasz Rybka
  2. CTO & co-founder @ Cloud Corridor (www.cloudcorridor.com)
  3. Trainer @ infoShare Academy bootcamp (infoshareacademy.com)
  4. Full-stack developer with a bit of DevOps to it

Agenda

  1. What's ECMA International?
  2. What's ECMAScript?
  3. What is TC39 and why you should care?
  4. What's coming in ES2020?
  5. Q&A

ECMA International

ECMAScript

ECMAScript editions

ECMAScript editions

ECMAScript editions

ECMA International structure

Technical work is carried out by Technical Committees (TCs) and Task Groups (TGs). A Technical Committee or a Task Group addresses a particular area or topic. Ecma members are encouraged to participate in the work of TCs and TGs.

https://www.ecma-international.org/memento/TCs&TGs.htm

Technical Committees and Task Groups

TC39 ECMAScript

  1. Royalty Free Task Group
  2. To maintain and update the standard for the ECMAScript™ programming language.
  3. To identify, develop and maintain standards for libraries that extend the capabilities of ECMAScript™.
  4. To develop test suites that may be used to verify correct implementation of these standards.
  5. To contribute selected standards to ISO/IEC JTC 1.
  6. To evaluate and consider proposals for complementary or additional technologies.

ECMA-262

TC39 Process

Stage 0 - Strawperson

deprecated

deprecated

            
                function deprecatedFunction() {
                  deprecated;
                  // do stuff
                }
                // or
                function deprecatedFunction() {
                  'deprecated';
                  // do stuff
                }
            
        

Stage 1 - Proposal

Stage 1 Entrance Criteria

Decimal

Decimal

            
                let items = [
                    { price: 1.25m, count: 5},
                    {price: 5m, count: 1}
                ];

                let tax = .0735m;
            
        

Stage 2 - Draft

New Set methods

            
                Set.prototype.intersection(iterable)
                Set.prototype.union(iterable)
                Set.prototype.difference(iterable)
                Set.prototype.symmetricDifference(iterable)
                Set.prototype.isSubsetOf(iterable)
                Set.prototype.isDisjointFrom(iterable)
                Set.prototype.isSupersetOf(iterable)
            
        

Stage 3 - Candidate

Object Rest/Spread Properties

            
                // Rest
                let { x, ...y } = { x: 1, a: 3, b: 4 };

                // Spread
                let n = { x, y, ...z };
            
        

Top-level await (ECMAScript modules)

            
                import { process } from "./some-module.mjs";
                let output;
                async function main() {
                  const dynamic = await import(specifier);
                  const data = await fetch(url);
                  output = process(dynamic.default, data);
                }
                main();
                export { output };
            
        

Stage 4 - Finished

Optional catch binding

            
                try {
                  // ...
                } catch {
                  // ...
                }
            
        

Object.fromEntries

            
                Object.fromEntries([['a', 0], ['b', 1]]);
                // { a: 0, b: 1 }
            
        

Nullish Coalescing

            
                const response = {
                    duration: 0
                };

                const duration = response.duration || 300;
                const duration = response.duration ?? 300;
            
        

How to use it?

ECMA-402

Q&A