Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

EVOLUTION IS AWESOME

Slide 3

Slide 3 text

photo credits: http://en.wikipedia.org/wiki/French_Revolution

Slide 4

Slide 4 text

1998: Netscape was doomed – and they knew it. Microsoft was likely to kill the Web. The plan: at 10am on March 31, Jamie Zawinski would push Netscape's source code to the Web, creating the open source Mozilla Web browser.

Slide 5

Slide 5 text

http://www.youtube.com/watch?v=mZTJbsUcdeU

Slide 6

Slide 6 text

Well, they simply cannot undo what has been done. The Mozilla code is out there…and nobody can ever take that away from you. Ever. — Jamie Zawinski, 23 Nov. 1999

Slide 7

Slide 7 text

! ! Cause for revolution zomg Web's gonna die ! ! ! ! ! Not so much eugh, JS has warts eugh, HTML has warts eugh, CSS has warts

Slide 8

Slide 8 text

Y U NO bytecode?

Slide 9

Slide 9 text

JavaScript lacks cross-language features. JavaScript is slow. JavaScript is sometimes fast but unpredictable. JIT compilation can be janky.

Slide 10

Slide 10 text

Revolution: new bytecode language! Evolution: • build a native → JS compiler • study and optimize code patterns it generates • close gaps where we aren't generating optimal code • formalize pattern as validator ⇒ AOT

Slide 11

Slide 11 text

All along, asm.js has worked across browsers.

Slide 12

Slide 12 text

1JS

Slide 13

Slide 13 text

  ! ! !

Slide 14

Slide 14 text

     function  gen()  {          yield  42;      }  

Slide 15

Slide 15 text

     function  gen()  {          yield  42;      }   ✘

Slide 16

Slide 16 text

     function  gen()  {          yield  42;      }  

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

     function*  gen()  {          yield  42;      }  

Slide 19

Slide 19 text

Focus: no reinvent-the-universe boondoggles Consistency: keep a unified development model Adoption: gradual adoption (polyfills, compilers)

Slide 20

Slide 20 text

"use  strict";   ! ! ! ! ! ! !

Slide 21

Slide 21 text

"use  strict";   ! if  (foo)  {      function  f()  {      }      ...   }   ! module.exports  =  ...;

Slide 22

Slide 22 text

//  automatically  strict   ! if  (foo)  {      function  f()  {      }      ...   }   ! export  default  ...;

Slide 23

Slide 23 text

features > forks modules > modes

Slide 24

Slide 24 text

Extensible Web

Slide 25

Slide 25 text

Good design is motivated by use cases, workflows. Good design is built from small, orthogonal, and composable primitives.

Slide 26

Slide 26 text

study the text interpret the text study the text interpret the text study the text interpret the text

Slide 27

Slide 27 text

design evaluate design evaluate design evaluate

Slide 28

Slide 28 text

photo credits: http://davidpaulbaker.blogspot.com/2013/02/move-fast-and-break-things.html

Slide 29

Slide 29 text

do  {      product.build();      product.ship();      product.evaluate();   }  while  (!product.isPerfect());

Slide 30

Slide 30 text

do  {      standard.design();      standard.ship();      standard.evaluate();      throw  new  DontBreakTheWeb();   }  while  (!standard.isPerfect());

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

browser vendors devs

Slide 33

Slide 33 text

browser vendors devs

Slide 34

Slide 34 text

browser vendors devs development workflow

Slide 35

Slide 35 text

1. Add the missing primitives. 2. Enable userland polyfills and compilers. 3. Work together to design the future.

Slide 36

Slide 36 text

1. Add the missing primitives. 2. Enable userland polyfills and compilers. 3. Work together to design the future. Thanks!