The future of JavaScript

2e36436c692b2e5fbc172e9fb7563171?s=47 dherman
September 27, 2011

The future of JavaScript

I've seen the future of JavaScript, and it's AMAZING

2e36436c692b2e5fbc172e9fb7563171?s=128

dherman

September 27, 2011
Tweet

Transcript

  1. 4.
  2. 5.
  3. 6.
  4. 8.

    var  Point2D  =  new  StructType({        x:  uint32,

           y:  uint32 }); var  Color  =  new  StructType({        r:  uint8,  g:  uint8,  b:  uint8 });
  5. 9.

    var  Pixel  =  new  StructType({        point:  Point2D,

           color:  Color }); var  Triangle  =  new  ArrayType(Pixel,  3);
  6. 10.

    new  Triangle([        {  point:  {  x:  0,

     y:  0  },            color:  {  r:  255,  g:  255,  b:  255  }  },        {  point:  {  x:  5,  y:  5  },            color:  {  r:  128,  g:  0,  b:  0  }  },        {  point:  {  x:  10,  y:  0  },            color:  {  r:  0,  g:  0,  b:  128  }  } ])
  7. 12.

    function  Container()  {        var  secret  =  3;

           this.service  =  function()  {                if  (secret-­‐-­‐)  {                        ...                }        }; }
  8. 13.

    var  key  =  Name.create("secret"); function  Container()  {  this[key]  =  3

     } Container.prototype  =  {        service:  function()  {                if  (this[key]-­‐-­‐)  {                        ...                }        } };
  9. 14.

    var  markers  =  new  WeakMap(); var  tile  =  new  Tile(...);

    var  results  =  [...]; tiles.set(tile,  results);
  10. 15.

    var  obj  =  Proxy.create({        get:  function(...)  {

     ...  },        set:  function(...)  {  ...  },        delete:  function(...)  {  ...  },        ... },  proto);
  11. 17.

    Pour 1/2 cup water into pan. When you’re done: Bring

    water to boil. When that’s done: Lower heat and add rice. After 15 minutes: Turn off heat and serve.
  12. 18.

    pan.pourWater(function()  {        range.bringToBoil(function()  {      

             range.lowerHeat(function()  {                        pan.addRice(function()  {                                setTimeout(function()  {                                        range.turnOff();                                        serve();                                },  15  *  60  *  1000);                        });                });        }); });
  13. 19.

    pan.pourWater(function()  {        range.bringToBoil(function()  {      

             range.lowerHeat(function()  {                        pan.addRice(function()  {                                setTimeout(function()  {                                        range.turnOff();                                        serve();                                },  15  *  60  *  1000);                        });                });        }); }); pyramid of doom
  14. 21.

    function*  g()  {        yield  1;    

       yield  2; } var  obj  =  g(); obj.next();  //  1 obj.next();  //  2
  15. 22.

    var  task  =  new  Task(function*()  {        var

     text  =  yield  XHR("file.txt");        yield  timeout(1000);        status.innerHTML  =  text; }); task.start();
  16. 24.
  17. 26.

    var  Collections  =  (function()  {        function  Dictionary()

     {  ...  }        return  {                Dictionary:  Dictionary        }; })();
  18. 30.

    import  {  $  }  from  "jquery.js"; import  {  map,  each

     }  from  "underscore.js"; loaded once, before execution
  19. 32.

    Death of a thousand cuts typeof  null  ===  "object"  //

     wtfjs? arguments isn’t an Array #$@?! var hoisting
  20. 36.

    for  (i  =  0;  i  <  a.length;  i++)  {  

         let  x  =  a[i];        x.onclick  =  function()  {  x.toggle()  }; }
  21. 37.

    for  (i  =  0;  i  <  a.length;  i++)  {  

         let  x  =  a[i];        x.onclick  =  function()  {  x.toggle()  }; } block scoped
  22. 38.

    var  {  r,  g,  b  }  =  thing.color; var  [x,

     y]  =  circle.center; [a,  b]  =  [b,  a];
  23. 39.

    var  obj  =  {        foo:  "foo",  

         bar()  {  return  this.foo  },        [getName()]:  17 };
  24. 40.

    for  (x  in  [3,  4,  5])        

     //  0,  1,  2  (d’oh) for  (x  of  [3,  4,  5])          //  3,  4,  5 for  (x  of  keys(o))              //  keys  in  o for  (x  of  values(o))          //  values  of  o for  ([k,  v]  of  items(o))  //  props  of  o
  25. 41.

    import  iterate  from  "@iter"; obj[iterate]  =  function()  {    

       return  {                next:  function()  {  ...  }        } } for  (x  of  obj)  {  ...  }
  26. 47.

    We (Ecma) are working hard and fast on the spec.

    We (vendors) will ship features before the spec is done. Transpilers as language shims: Traceur, Narcissus
  27. 48.