.

Type system (separate sections below for structural and nominal types)ES4 RITamarin+ESCSpidermonkeyRhinoFutharkMbedthisJSCoreTestsBase documents, tickets, minutesCommentsSpec draftAdobe priMozilla priOpera priGoogle priEmbedthis Ejscript priApple priMicrosoft pri

.

This column will reference the actual spec documents, either speclets that are work in progress or spec parts authored by the Editors.Bright green=essential, light green=useful, white=neutral, red=undesirable, ?=don't understand what feature this is or the polarity of what yes/no would mean

.

Type system (separate sections below for structural and nominal types)

.

Type definitions (type x = )1100010proposals:type_definitions, #247, #39

.

Parameterized type definitions (type x.<T> =)1000000?Iterators

.

Subtyping, type compatibility1000010AS3, #328, #122, #127, #262, Note! more here (Cormac's work, sundry discussion pages in the wiki)? (unclear on what this implies)

.

DontDelete is not the same as fixture1000010#233??? (don't understand implications of this)

.

Type annotations on variables, parameters, and in function return types1000010AS3, #71

.

Type annotations on destructuring patterns1000000?

.

Type annotations on object and array literals1000010?, #126#370 (new on March 7) proposes semantics for nominal types too

.

"is" operator1100010proposals:is_as_to, #309, #103, #73

.

"cast" operator0000010proposals:is_as_to, #309, #103rename it to "as"?

.

"type" operator1000000proposals:syntax_for_type_expressions, #309, #103

.

"wrap" type operator0000000?, #309, #103, #73wrap meta-programming is outside the language (maybe in module system, if there is one)Revised 3/28

.

"like" type operator0000000#258, #309, #103, #73, #244Revised 3/28: Now a predicate and function parameter/result syntactic sugarRevised 3/28

.

Nullability annotations in type expressions1000000proposals:nullability, #229

.

Type conversion between primitive types1100010ES3, proposals:numbers, #246, #345, #346, #113, #38No user-defined conversions

.

Wrapping of primitive types0000010ES3, #281
turn off?

.

Inferred function types1000000#48

.

Reflected type objects implement type meta-object interfaces0000010proposals:meta_objects, #208, #232, #199

.

Structural types

.

Record types1100000proposals:structural_types_and_typing_of_initializers, #219

.

Array types1100010proposals:structural_types_and_typing_of_initializers, #249, #120, #66[...T]Revised 3/28

.

Tuple types1100000proposals:structural_types_and_typing_of_initializers, #249, #120, #66eg, [T] or [T,U,V]Revised 3/28

.

Function type1000010proposals:structural_types_and_typing_of_initializers, #153

.

Union type1000000proposals:switch_class, #218, #308, #300

.

"*" ("Any") type1100000AS3

.

"undefined" type1000010proposals:syntax_for_type_expressions

.

"null" type1000010proposals:syntax_for_type_expressions

.

Nominal types

.

Classes1100010AS3, #166, #208, #247, #289, #6, #88, #139

.

Interfaces1100010AS3, #210, #335, #207if meets DOM use case

.

Inheritance1100010AS3

.

Non-nullable classes1000010proposals:nullability

.

Settings1100010proposals:nullability

.

super() call in settings1000010?

.

Parameterized classes1000000?

.

Parameterized interfaces1000000proposals:type_parameters

.

dynamic class Foo1000010AS3

.

final class Foo1100010AS3

.

<namespace> class Foo1100010AS3not sure what this syntax means)

.

parameterized class C.<T> has statics per instantiation not once for all C.<T>1000010Language overview(no given our vote on parameterized types in general, though if they exist this makes sense)

.

prototype method1000000proposals:builtin_classes, #75

.

get/set method1100010AS3

.

static method1000010AS3, #74

.

Method overriding1000010#9

.

meta::get / meta::set method0000000#214

.

meta::has method0000000#214

.

meta::delete method0000000#214, #157

.

meta::invoke method0000000#214, #173

.

static property1100010AS3

.

Structure

.

Namespaces (namespace foo = ...)1100010AS3, #289

.

Predefined namespaces (__ES4__, intrinsic, iterator, meta, reflect)1000010proposals:intrinsic_namespace, #149, #248, #91, #62, #67(only the ones it makes sense to have in light of other votes)

.

Name lookup algorithm0000010#233, #141, #33, #142? (do not understand this but if it slows down untyped code then no)

.

use namespace foo1100010AS3, proposals:namespace_shadowing

.

use default namespace foo1000010?, #242

.

pragma syntax and restrictions on same0000010proposals:syntax_for_pragmas, #282

.

Blocks {...}1111110AS3This item refers to the ability to have top-level blocks that boil away during parsing, they are useful in expressing eg program units? (unclear on how/whether this differs from ES3)

.

packages, import1100000AS3, #283, #335, #116out of time, needs too much workNeed to solve isolation / inadvertent name capture problems among packagesNo on current design but purely URI-based statically detectable import is essential

.

private package0000000proposals:local_packages

.

internal / public variables1100010AS3, #33, #81

.

private, protected, public: how they can be used0000010#90, #33, #81?

.

Program units0000010proposals:program_units, #271, #333, #272, #273next timeProbably better done in HTML. Also need to solve asynchronous loading problem.No on current design but purely URI-based statically detectable import is essential

.

Declarations

.

const1111110JS1.5, AS3, #112

.

let1011010proposals:block_expressions, #280, #253, #347Revised 3/27

.

let const1000010proposals:block_expressions, #253

.

let function0000000proposals:block_expressions, #253

.

let expressions1000000proposals:block_expressionsRevised 3/28

.

Destructuring Assignment1011100proposals:destructuring_assignment

.

Statements

.

let statements1011010proposals:block_expressions, #240, #85

.

"for each" statement0100010E4X; AS3

.

for .. in order0111010proposals:bug_fixes [FOR.IN.LOOP.CREATION.ORDER]

.

for .. in loops on null, undefined0111010proposals:bug_fixes

.

hide fixtures and namespaced properties in for .. in operations1000010#55hide

.

"switch type" statement0000010proposals:switch_class, #163, #41, #252

.

Typed "try-catch" statement0100010AS3

.

reformed with statement0000000proposals:reformed_with, #252

.

Operators

.

Comparison Order1111010proposals:bug_fixes

.

"eval"0000000ES3, proposals:resurrected_eval, #226, #235, #297intention is good, not done yet?yes to eval operator / function distinction, no to strict mode weirdness or other changes

.

&&=0000010AS3

.

||=0000010AS3

.

"in"0000000#241

.

typeof0000010#251, #250Leaves typeof alone

.

Operator Overloading0000010proposals:generic_functions; proposals:operators, #140No accepted proposalsNext time

.

Iteration

.

interator namespace1000010proposals:iterators_and_generators

.

InterableType0000010proposals:iterators_and_generators

.

iterator::get1000010proposals:iterators_and_generators

.

iterator::next1000010proposals:iterators_and_generators

.

iterator::close0000000proposals:iterators_and_generators

.

iterator::StopIteration1000010proposals:iterators_and_generators

.

ItemizableType0000000proposals:iterators_and_generators

.

iterator::getKeys0000010proposals:iterators_and_generators

.

iterator::getValues0000010proposals:iterators_and_generators

.

iterator::getItems0000010proposals:iterators_and_generators

.

Tail calls1000000proposals:proper_tail_calls, #215, #323deferdefer

.

Generators1010000proposals:iterators_and_generatorsneeds syntactic work

.

Array Comprehensions1010000proposals:iterators_and_generators

.

"this generator"0000000proposals:remove_the_arguments_object

.

Function

.

Nullability0000000proposals:nullability, #73, #71, #1

.

Function.bind1000000proposals:static_generics

.

Function.call1000000proposals:static_generics

.

Function.apply1000000proposals:static_genericsresolve this vs. splat

.

Rest arguments1100010AS3, #96

.

Generic Functions0000000proposals:generic_functions, #245Next time

.

Default argument values1100010AS3, #2

.

"let function"0000000proposals:block_expressions

.

"this function"0000000proposals:remove_the_arguments_object

.

arguments object1000000proposals:bug_fixes, #27, #26

.

avoid propagating the global object as 'this' when functions are not invoked as method1000010proposals:bug_fixes, #348, #276strict mode onlydoes not seem safe for compat

.

type annotations on this1000000proposals:builtin_classesEssential for modeling prototype properties in the language

.

Splat operator1000010#357

.

Function constructor1000000ES3, #172minor syntax issues?

.

toString fixes1000000#174

.

Expression closures1010000proposals:expression_closures

.

Object literals

.

Object literal syntax1000010ES3, proposals:bug_fixes, #164, #165, #219, #319

.

Trailing commas1111110proposals:bug_fixes

.

const before id0000000?Draft circulated on es4-discuss on 20 March, "Object initializers"

.

var before id0000000(Email discussion, analogous with const annotations but just DontDelete, not ReadOnly)Same as for const?

.

get and set special forms0000000JS1.5, #12, #13

.

namespace qualification0000010#30Iterators, catchalls

.

Object

.

Destructuring1011100proposals:destructuring_assignment, #111

.

field names0000000#29, #313namespaces only

.

Global object

.

Constant bound types1000000#123 (Note, versioning implications need to be recorded here)

.

undefined, NaN, Infinity are constant1011010proposals:bug_fixes

.

Math object0000000#220, #171, #8, #83

.

encodeURI/decodeURI fixes0000000#148

.

hashcode0000010proposals:hashcodes, #152, #52

.

global (Global object)0000010proposals:globals, #152, #230

.

parseInt0000000ES3, #274

.

parseFloat0000000ES3, #274

.

isIntegral0000000#161follows isFinite precedent

.

copysign0000000#161in double and decimalput in double classPut it into double classPut it into double class

.

sign0000000#161in double and decimalput in double classPut it into double classPut it into double class

.

__MAX_ECMASCRIPT_VERSION__10000100proposals:versioningProblem needs to get solved somehow

.

RegExp

.

RegExp Reconstruction1000000proposals:bug_fixes [REGEXP.CONSTRUCTION]

.

Readable RegExps (/x)0000000proposals:extend_regexps, #254, #194

.

Comment subpatterns1000000proposals:extend_regexps

.

Lexer RegExp (/y)0000000proposals:extend_regexpsRevised 4/21

.

Named Regexp Submatches (and via backreferences)0000000proposals:extend_regexps, #255, #256, #268

.

RegExp Unicode character classes0000000proposals:extend_regexps, #14

.

RegExp Character Set Subtraction and Intersection0000000proposals:extend_regexps

.

/regexp/('test')0010100proposals:extend_regexpsagainst based on experience

.

typeof /regexp/ == 'object'1100100#251ES3 mandates this

.

match and nCapturingParens0000000#56

.

lastIndex behavior0000000#195

.

More permissive charsets0000000#261

.

String

.

Single-Character Substrings1111110proposals:bug_fixes [STRING.CHARAT.BRACKETS]

.

Triple-quoted strings0000000proposals:triple_quotesBigger fish to fry

.

Backslash-newline in strings1111110proposals:bug_fixes [BACKSLASH.NEWLINE.IN.STRINGS]? (why not just allow multiline strings w/o special delimeter?)

.

Slicing [5:2:-1]0000000proposals:slice_syntax

.

String Generics1010000proposals:static_generics

.

trim method1000010proposals:string.prototype.trim

.

replace named submatches0000000#286

.

Array

.

Destructuring1011100proposals:destructuring_assignment

.

Operations on arrays with structural type0000000#320Slicing a tuple returns an array, but what about the types? Needs a coherent proposal. Probably the most reasonable is to just return an Array, this is really an edge case.

.

Array literal1000010ES3, proposals:bug_fixes, #164, #165, #68

.

Slicing [5:2:-1]0000000proposals:slice_syntax

.

Array Generics1010000proposals:static_genericslibrary.pdf

.

indexOf()1111010proposals:static_genericslibrary.pfd

.

lastIndexOf()1111010proposals:static_genericslibrary.pdf

.

every()1111010proposals:static_genericslibrary.pdf

.

filter()1111010proposals:static_genericslibrary.pdf

.

forEach()1111010proposals:static_genericslibrary.pdf

.

map()1111010proposals:static_genericslibrary.pdf

.

some()1111010proposals:static_genericslibrary.pdf

.

reduce()0010000proposals:static_generics, #156library.pdf

.

reduceRight()0010000proposals:static_generics, #156library.pdf

.

New builtins

.

int1100010AS3; proposals:numbers, #203, #182, #4, #3#371 proposes removallibrary.pdf(with machine int math semantics, not double math semantics)

.

uint1100000AS3; proposals:numbers, #203, #183, #4, #3, #51#371 proposes removallibrary.pdf(with machine uint math semantics, not double math semantics)

.

double1100010proposals:numbers, #203, #3library.pdf

.

decimal1100110proposals:decimal, #222, #203, #187, #3library.pdf

.

Number literal suffixes1000100proposals:numbersm

.

string1100010ES3, #203library.pdf

.

byte1000000#234, #203Not accepted

.

boolean1000010?, #203

.

AnyNumber, AnyString, AnyBoolean1000010proposals:numbers, #181, #223library.pdf

.

DecimalContext0000000#222, #203quantize and round methods instead

.

JSON0000000proposals:json_encoding_and_decoding, #212, #201, #203, #202(not current proposal but JSON API is essential)

.

Map1000000proposals:dictionary, #203, #146library.pdf(but not parametric)

.

Vector1000000proposals:vector, #196, #197, #203, #198library.pdf

.

Name1000000proposals:name_objects, #203library.pdf

.

Namespace0000010?, #204, #203library.pdf

.

NamespaceSet0000000proposals:name_objects, #205, #203

.

NamespaceSetList0000000proposals:name_objects, #205, #203

.

ControlInspector0000000proposals:stack_inspection, #203library.pdfoptional is bad for the Web

.

Type meta-objects0000010proposals:meta_objects, #200, #205

.

Numbers and arithmetic

.

uint32ops (add, sub mul, div, mod, neg, and, or, xor, not, sll, srl, sra, ror, rol)1000000#216

.

Number.parse0000000#275

.

int.parse, uint.parse, double.parse, decimal.parse0000000#317ok if those types are presentok where the type is presentok if those types are presentok if those types are present

.

double.explode, double.implode, decimal.explode, decimal.implode0000000#160double.explode returns pair of unsigned integer values

.

use decimal <context>0000110#222, #221Not as defined in proposals:numbersnot a pragma

.

Date

.

Date ISO-86010000000proposals:date_and_time, #147(prefer web-compatible definition)

.

Date nanoAge method0000000proposals:date_and_time

.

Overridable defaults?0000000#193

.

Date.parse1000000#134, #135, #136

.

(more changes here)0#129, #191?

.

Misc

.

use strict0000010proposals:strict_and_standard_modesonly as "good taste" modemay want more runtime semantic changesconcept ok, details differ(don't like modes or optional features)

.

use standard0000010proposals:strict_and_standard_modesTalking about the specific pragma, not the notion of a standard modeill-defined idea in general

.

do-while semicolon insertion0000010proposals:bug_fixes

.

Keywords in safe contexts0000010proposals:reserved_words

.

Unicode updates0000000proposals:update_unicode, #213, #179, #37, #170Current proposal is unsoundNeed sound proposal

.

Line terminator normalization100000proposals:line_terminator_normalization

.

.

ES4 RITamarinSpidermonkeyRhinoFutharkMbedthis

.

Types1074429211291

.

Classes15700012

.

Structure7511110

.

Declarations513323

.

Statements243307

.

Operators452588348

.

Iteration702008

.

Functions1221004

.

Objects201103

.

RegExp311020

.

String323222

.

Array10711818

.

Builtins400013

.

Misc000004

.

.

.

Tickets that may be important but are unaccounted for above#11, #167