Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Evolution is Awesome

dherman
March 26, 2014

Evolution is Awesome

My EmberConf 2014 keynote, on evolving the Web forward.

dherman

March 26, 2014
Tweet

More Decks by dherman

Other Decks in Programming

Transcript

  1. View Slide

  2. EVOLUTION
    IS
    AWESOME

    View Slide

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

    View Slide

  4. 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.

    View Slide

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

    View Slide

  6. 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

    View Slide

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

    View Slide

  8. Y U NO bytecode?

    View Slide

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

    View Slide

  10. 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

    View Slide

  11. All along, asm.js has worked across browsers.

    View Slide

  12. 1JS

    View Slide

  13.  <br/>!<br/>!<br/>!<br/>

    View Slide

  14.  <br/>    function  gen()  {  <br/>        yield  42;  <br/>    }  <br/>

    View Slide

  15.  <br/>    function  gen()  {  <br/>        yield  42;  <br/>    }  <br/>

    View Slide

  16.  <br/>    function  gen()  {  <br/>        yield  42;  <br/>    }  <br/>

    View Slide

  17. View Slide

  18.  <br/>    function*  gen()  {  <br/>        yield  42;  <br/>    }  <br/>

    View Slide

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

    View Slide

  20. "use  strict";  
    !
    !
    !
    !
    !
    !
    !

    View Slide

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

    View Slide

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

    View Slide

  23. features > forks
    modules > modes

    View Slide

  24. Extensible Web

    View Slide

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

    View Slide

  26. study the text
    interpret the text
    study the text
    interpret the text
    study the text
    interpret the text

    View Slide

  27. design
    evaluate
    design
    evaluate
    design
    evaluate

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  31. View Slide

  32. browser vendors devs

    View Slide

  33. browser vendors devs

    View Slide

  34. browser vendors devs
    development
    workflow

    View Slide

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

    View Slide

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

    View Slide