Skip to content

Instantly share code, notes, and snippets.

@jorendorff
Created February 4, 2014 20:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jorendorff/8811785 to your computer and use it in GitHub Desktop.
Save jorendorff/8811785 to your computer and use it in GitHub Desktop.

Summary of high-level feature work for ES6

symbols

  • new value tag
  • sling throug hthe property sites
  • audit tag examiners
  • teach the jits
  • ensure TI sanity with new jsids

tail calls

  • strict mode only
  • only function calls (including template strings), not member-expressions a.b or identifiers x that trigger getters
  • calling through a proxy is the hard part
  • coalescing AutoCompartments (to reduce to a bounded amount of memory the number of AutoCompartments we need to have for an unbounded number of tail-calls across compartment boundaries)

classes - syntactic sugar, frontend only

method shorthand

  • frontend only (except super)

template strings

  • frontend only, pretty much desugars to a function call
  • String.raw

update let/const

  • behavior in global scope ("lexical tier")

  • for(let x in/of y) loop variable scoping (bug 449811); ditto in array comprehensions (bug 469402)

  • temporal dead zone When you declare { alert(x); // TypeError let x = 2; } it's a TypeError to get x before it is assigned. { function f() {...} function g() {...x...} f(); let x = 2; } { let x = y, y; // TypeError even though we didn't try to do anything to y }

    • new opcode for "get let/const variable and check for undefined"
    • analysis (frontend? TI?) to determine, for any given access, whether it could be undefined.
  • test262 for compliance

update destructuring

update Proxy

  • audit minor spec changes
  • audit getPrototypeOf sites for JS callbacks
  • write new ScriptedProxyHandler hooks

modules

  • frontend support
  • module instance objects
  • new import bindings, new opcodes, jit support
  • debugger interactions
  • linking
  • Loader API

Realm API

  • spec isn't done
  • existing compartment infrastructure should make this pretty easy

WeakSet

  • can self-host, or clone MapObject.cpp

super

  • has a lot more new syntax than it "feels" like to users (just feels like a single new keyword, but many productions)
  • interacts with classes, method shorthand, tail calls
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment