JavaScript is Netscape’s implementation of the ECMAScript standard. The development of JavaScript 2.0 is heavily
coordinated with the ECMA TC39TG1 working group. JavaScript closely matches the ECMAScript Edition 4 standard under development.
The intent is to make JavaScript 2.0 and ECMAScript Edition 4 be the same language, but JavaScript 2.0 will also include a
few features for which more feedback and experience is appropriate before standardizing them.
Date |
Revisions |
Jun 30, 2003 |
|
Jun 4, 2003 |
- Split the super semantic field into super for classes
and archetype for prototype-based objects.
- Implemented simple prototypes on most objects, including class objects themselves, for compatibility with JavaScript
1.5.
- Changed semantics so that the
enumerable attribute now inherits when overriding an instance property.
This was the original intent, although it was ambiguous in the written description of the attribute.
- Put back a very simple package definition/import mechanism. Moved the extended
import directive with
the include /exclude selection mechanism to the rationale.
- Added semantics for the library classes
Object , Void , Null , Boolean ,
GeneralNumber (except for number formatting), Number , float , sbyte ,
byte , short , ushort , int , uint , long ,
ulong , Character , String (except for regular expressions), and Namespace .
- Added numerous semantic utility functions to support the above classes.
- Added
\U escapes to the lexical grammar (but not yet the semantics).
- Removed
include and exclude keywords (except that include remains as a JavaScript
2.0 extension).
- Removed some obsolete text from the description of Types; however, that page
still needs a little work as it’s not as up-to-date as the semantics.
|
May 22, 2003 |
- Renamed uses of the word “member” to “property” in the semantics.
Cleaned up many other names without changing the meaning of the semantics.
- Renamed Character to Char16, as well as related semantic
names. Updated the description of Char16.
- Implemented conversions of strings to numbers in the semantics. Appended
an extra start symbol to the lexical grammar and semantics
to assist with these conversions.
- Eliminated the class
Prototype , merging it with the class Object . This required modifying
the rules on which objects can be used as prototypes — only direct instances of Object or other
prototype-based classes can now be used as prototypes.
- Made
Object be dynamic , which required a slight change to the rules of inheritance of
the dynamic attribute — it is now inherited from any superclass except Object .
- Fixed
instanceof when the second operand is a class such as RegExp and Array .
- Implemented simple prototypes on primitive classes for compatibility with JavaScript 1.5.
- Removed SystemFrame, which wasn’t needed any more.
- Fixed errors in grammar rules for
private .
- Implemented
final and static as attributes instead of syntax.
- Removed obsolete semantic utilities and added a few helpers for constructing the standard classes.
- Defined the global object, namespaces, attributes, and classes.
- Changed the syntax of semantic record constructors to use single angular
braces instead of double angular braces.
|
May 2, 2003 |
- Updated the semantics. Simplified some of the object data structures.
Merged uninitialised with none. Defined class initialization.
Defined getters and setters. Implemented
instanceof .
- Defined error classes and replaced error tags with these classes. Revised which error gets reported in many cases.
- Renamed class semantic variables from names such as objectClass to Object.
- Removed
package , import , and export directives from the ECMAScript grammar,
leaving them only in the JavaScript 2.0 grammar.
- The
return statement cannot return a value from a constructor
or a setter.
- A getter must return a value; it cannot fall off the end of the function.
|
Apr 2, 2003 |
- Removed multiple constructors from the body of the proposal
and moved them to the rationale for future consideration.
- Removed the
constructor attribute.
- Replaced the
invoke superconstructor case with the ...
function call syntax for passing an array of arguments (similar to what apply does) to any function
or constructor.
|
Mar 24, 2003 |
- Updated the semantics. Implemented
is , catch ,
for , and for -in . Implemented instance methods on classes.
- Disallowed initializers on
for -in target variables. These are allowed by the grammar for
convenience but prohibited by the semantics’ validation.
- Fixed a major
const definition design flaw in the semantics
that led to race conditions and the possibility of definitions not being set up properly or initialized several times.
Replaced the design, which relied on error catching to detect non-constant expressions at compile time, with one that
lazily evaluates forward-referenced const expressions.
- The
prototype attribute now applies only to functions
to make them into prototype-based functions/constructors. Removed its usage to make extractable class members.
- Removed the old usage of the word “generic”.
- Changed the enumerability defaults to match JavaScript
1.5.
- Removed the static path analysis from the calling a superconstructor
section.
- Added
invoke case to calling a superconstructor to
allow passing a variable number of arguments to a superconstructor. (invoke is the same as apply
except that it doesn’t take a this parameter.)
- Required initializers for instance members to be compile-time constant
expressions to simplify the semantics and avoid issues about how many times they are evaluated.
- Minor editorial fixes.
|
Feb 17, 2003 |
- Updated the semantics. Reorganized the property read, write, and delete
code and indirected it through six customizable internal methods.
- Merged packages with global objects in the semantics.
- Introduced ilong and iulong notation
in the semantics.
- Introduced ns::id notation in the
semantics.
- Merged the concepts of inaccessible and uninitialized variables in the semantics.
- Fixed the handling of
const variable initializers in the semantics.
- Implemented
with statements and array initializers and updated object initializers in the semantics.
These resulted in slight grammar changes.
|
Jan 29, 2003 |
- Removed named function parameters from the body of the proposal and moved them
to the rationale for future consideration.
- Significantly simplified the semantics by removing named function parameters.
- Class constructors no longer take named parameters to initialize instance members.
- Allowed dynamic properties with namespaces to better integrate with E4X.
- Removed typed arrays from the body of the proposal and moved
them to the rationale for future consideration.
- Removed the
~ and – type
expressions from the body of the proposal and moved them to the rationale.
|
Jan 24, 2003 |
- Updated the semantics.
- Simplified the override logic by introducing the restriction that an instance variable cannot override a getter
or a setter. The reverse is still allowed — a getter may override either a getter or a
virtual
instance variable, and a setter may override either a setter or a virtual instance variable. Also, the
overriding definition may no longer override two different base members or add namespaces not mentioned in the base
member.
- An overriding method definition may no longer change the signature.
- Allowed run-time namespace expressions in qualified identifiers
to harmonize this proposal with E4X.
- Fixed typos and anachronisms.
|
Jan 13, 2003 |
|
Nov 19, 2002 |
- Updated the semantics.
- Reorganized the grammar productions for function definitions and
try statements without materially
changing the language. This helped better factor the semantics for these constructs.
|
Oct 29, 2002 |
- Changed numeric arithmetic contagion rules to try to return a
long
or ulong value when at least one operand is a long or ulong ; if that’s
not possible, the result overflows to a Number . Division will return a Number if that result
would be more precise than a long or ulong .
- Removed floating-point
float arithmetic operations other
than unary negation; these operations will always return a Number (or possibly a long or
ulong if the other operand is a long or ulong ).
- Made
=== ignore differences in numeric types, so 5.0 === 5L will now be true.
- Reduced repetitive semantics: when all actions A on a nonterminal N
merely call A on the nonterminals in N’s grammar
expansions, the actions are now abbreviated.
- Simplified the lexer and stages descriptions.
- Fixed several typos.
|
Sep 25, 2002 |
- Fixed
Number and float functionality.
- Added conversions from numbers to strings.
- Fixed broken links.
|
Sep 20, 2002 |
- Operator overriding has been deferred until a future version of the language.
Removed it from the proposal and moved it to the rationale section.
- Removed the
.() operator again.
- Unit support has been deferred until a future version of the language. Removed
it from the proposal and moved it to the rationale section.
- Added semantics for
float support.
- Added
long , ulong , and float literals.
- Removed the concept of indexable members. All
public members are now accessible via [] .
- Revised the lexical and syntactic
grammar and semantics.
|
Jun 18, 2002 |
- Attributes are now idempotent.
- Removed the
abstract attribute.
- The
enumerable attribute implies public .
- Namespaces and classes defined as members of another class must specify the
static attribute.
- Added requirement that each variable referenced in a
const
initializer be resolvable to a scope.
- Restricted class and namespace definitions to
only global, package, or class scopes or blocks nested inside these scopes.
- Corrected wording discrepancy: the superclass of a class must be a compile-time
constant expression without forward references.
|
May 17, 2002 |
- Removed interfaces from the proposal and added them to the
rationale.
- Removed class extensions from the proposal and added
them to the rationale.
- Since class extensions are now gone, made unit lookup look in
the
unit namespace instead of the Unit class.
- Simplified the discussion of definition scopes, since no scope attributes
remain in the proposal.
- Deleted
wrap pragma for wraparound machine
integer arithmetic.
- Deleted the
compile attribute. Constants defined using const automatically become compile-time
constants when used in compile-time constant expressions.
- Defined explicit coercions for integral machine integers.
- Removed restriction that top-level definitions in a package can only be placed in the namespace
public
or in namespaces defined within that package.
|
Apr 26, 2002 |
|
Apr 22, 2002 |
- Corrected and clarified the rules for when a variable or a constant
may be accessed. Except for type- and attribute-less definitions, constants and variables are accessible only after
being defined. Constants may be written at most once. Type expressions must be compile-time constant expressions.
- A constant and a setter with the same qualified name may not be defined in the same scope.
- Hoisting does not occur into class scope (this possibility is now excluded
by the definition of a regional scope).
explicit is now an attribute instead of a specialized
namespace.
- Corrected the interaction of overriding and namespace defaulting in a definition. Defined the namespace
defaulting and overriding rules.
- Replaced
mayOverride by override(undefined) . Added regular rules for the behavior of overriding
and the override attribute.
- Allowed uninitialized semantic record fields.
- Continuing to write the formal semantics. Added semantics for constant
and variable declarations.
|
Mar 4, 2002 |
- Restricted pragma arguments to be literal booleans, numbers, or strings. Also,
strict
mode changes now affect the semicolon after the pragma.
- Removed class declarations without a body.
- Removed
include /exclude clauses from use
directives. These now apply only to import directives and
now indicate which top-level properties are shared. Simplified the name lookup algorithms to not account for includes/excludes
on individual use directives.
- Made other minor grammar changes to share productions and their semantics without affecting the language.
- Added for each to the list of computation
steps.
- Added abbreviated notation for copying most of the fields from an existing tuple
or record into a newly constructed one.
- Continuing to write the formal semantics. Made major changes and additions
to the formal semantics for evaluation of expressions and statements. Reorganized object layout and unified frames
with container objects. Defined package objects. Added a phase parameter to distinguish compile-time constant expressions
from runtime expressions.
|
Jan 4, 2002 |
- Removed attributes from pragmas. Although somewhat useful, this made parsing dependent
on attribute evaluation, and I'd rather not have such a dependency in the language.
|
Dec 20, 2001 |
- Regularized the grammar of statements and directives. Separated annotated blocks into groups
of either directives or substatements, which eliminated the troublesome situation of a definition being located in
a substatement that happens to be a group. The attributes on a group of substatements are now restricted to only
true
and false .
|
Dec 19, 2001 |
- Removed the
local attribute, which was no longer necessary for anything.
- Added the
compile attribute to explicitly mark which const definitions must be compile-time
constants. This became necessary because the semantics of compile-time const definitions are subtly
different from those of regular const definitions, and it became unwieldy to try to guess which one a
const definition is, based on how it is used.
- Revamped the description of compile-time constant expressions.
Removed the references to dominators. There are now two kinds of compile-time constant expressions: ones that allow
forward references and ones that don’t.
|
Dec 17, 2001 |
- Disallowed nested labels with the same name in the same function in the semantics.
- Renamed GoContinue to Continue, GoBreak
to Break, GoThrow to ThrownValue,
and GoReturn to ReturnedValue in the semantics.
- Pragmas may now take attributes (
true and false only).
- Fixed outdated text in the description of function parameters.
|
Dec 6, 2001 |
- Reverted to the old definition of the
Integer type; it’s
back to being the set of integral IEEE doubles.
- Deleted the
double type and made Number act
as double once again.
- Renamed
Character to char .
- Rewrote the machine types section once again. Renamed
int8 ,
uint8 , int16 , uint16 , int32 , uint32 , int64 ,
and uint64 to sbyte , byte , short , ushort , int ,
uint , long , and ulong respectively. The first six of these are now subtypes
of Integer ; long and ulong are now disjoint from Number .
- Renamed “coercion” to “implicit coercion”
and “cast” to “explicit coercion”.
- Added special case to the
is operator to treat –0.0 as
though it were +0.0.
- Made the
as operator support implicit coercions.
- Added implicit coercions to the concept of a type.
|
Nov 26, 2001 |
- Added support for comments inside functions in the semantics. Removed invariant
and steps and turned them into comments.
- Temporary variables in the semantics can now be declared without assigning a value to them.
- Added more syntactic semantics.
- Removed the
# , -> , .. , and @ tokens.
- Made the
Character type distinct from the set of single-character
String s.
- Made
double be a subtype of Number , which is
now the union of numeric types. Made Integer
distinct from double and accept unlimited-precision integers. Unified the integral machine
types with Integer .
- Made integral conversions that can result in loss of range error-checked by default. Added the
wrap
pragma to convert the behavior to wraparound.
|
Oct 26, 2001 |
|
Oct 18, 2001 |
|
Oct 16, 2001 |
|
Oct 3, 2001 |
- Updated semantic notation to combine action procedures for multiple expansions
of a nonterminal into one action procedure. Also deleted the
notation for simple procedures to reduce confusion.
- Reformatted the formal semantics and incorporated the above notation changes.
- Added indexes to the rtf files.
|
Sep 26, 2001 |
- Added more semantics.
delete now takes a PostfixExpression
instead of a PostfixExpressionOrSuper.
|
Sep 24, 2001 |
|
Aug 22, 2001 |
|
Aug 17, 2001 |
|
Aug 15, 2001 |
|
Aug 10, 2001 |
|
Jul 24, 2001 |
- Removed the
+ t type constructor. It’s now in the rationale.
null is now a valid String value, distinct from
the empty string.
- Removed the
const Array and const t types. Added the StaticArray[ t] ,
DynamicArray[ t] , ConstArray , and ConstArray[ t]
types.
- Removed the t
[] notation. This is now reserved for fixed-size machine array types.
- Removed the
const operator.
- Instance member initializers are re-evaluated each time a new instance
is created.
- Toughened the rules for argument type matching in overrides.
- Changed the variable lookup rules to make a class’s instance
members visible but inaccessible in static methods.
- Removed the empty argument list case from the PragmaExpr
and UseDirective grammars.
- Removed the
* wildcard case from IncludesExcludes.
- Regularized the ImportDirective grammar.
- Enabled
true and false attributes on use
namespace directives. Restricted import directive
attributes to only true and false .
- Simplified various grammar productions and renamed grammar nonterminals without affecting the language. Folded the
Definition production into the Directive
productions.
- Specified extent of pragmas.
|
Jun 29, 2001 |
- Renamed
instanceof to is to allow it to have the
new, more sensible semantics without breaking JavaScript 1.5 programs. instanceof is not part of JavaScript
2.0 but can be supported for legacy programs. is is a new reserved word.
- Removed the [no line break] constraints after
use .
- Updated the compatibility section.
|
Jun 15, 2001 |
- Renamed the machine types
byte , ubyte , short ,
ushort , int , uint , long , ulong to int8 ,
uint8 , int16 , uint16 , int32 , uint32 , int64 ,
and uint64 respectively.
- Renamed
Tuple to const Array .
- Removed the
nonindexable and nonenumerable visibility modifier attributes. Updated the
definitions of the indexable and enumerable
attributes.
- Removed the
indexable attribute keyword, but the indexable concept still exists because it is needed
for compatibility with JavaScript 1.5.
- Changed the default for
public definitions to nonindexable and non-enumerable .
- Forbade conflicting or repeated attributes.
- The default member modifier attribute for
const
definitions is now final instead of static .
- Removed the requirement to use
this. to initialize instance constants
from a constructor.
- Setters can no longer return a value; the result of an assignment expression
is now always the value of its right side.
- Only classes with at least one member with the
prototype
attribute will themselves have a predefined prototype global member.
- Renamed language directives to pragmas and removed the list of JavaScript versions.
- Simplified the syntax of pragmas and changed the syntax of pragmas,
namespace uses, and imports to make them consistent. Eliminated noninsertable
semicolons.
- A parenthesized expression FieldName is now a
JavaScript extension.
- Noted that an implementation does not have to support package circularities but
may do so as an extension.
- Interchanged the names of the Definition and AnnotatedDefinition
nonterminals.
- Renamed the parser grammar to the syntactic
grammar and the lexer grammar to the lexical
grammar for consistency with ECMAScript Edition 3.
|
Apr 11, 2001 |
- Replaced the
@ operator by the as operator,
which is now a new reserved word and has a lower precedence to match instanceof . The as
operator now returns null if the type doesn’t match and but destination type contains null .
as does not do any coercions.
- Removed the
| syntax for indicating named parameters.
All optional parameters are now also named.
- The arguments local variable is now supported only for unchecked
functions.
- Modified the syntax of the semantics to better match the ECMAScript Edition 3 style. Partially updated the notation
page.
- Fixed a bug in the unit semantics.
- Note: Not all of the decisions reached in the last two ECMA TC39TG1 meetings have been integrated into this document
yet.
|
Mar 9, 2001 |
- Added link to the preliminary draft of the specification in PDF format.
- Minor editorial changes.
|
Mar 2, 2001 |
|
Feb 28, 2001 |
- Created the syntactic semantics. It’s still a work in progress.
- Updated the execution stages page.
- Added mutable cells and the associated operators to the semantic notation.
- Renamed the Double semantic type to Float64
(this affects the semantics only, not the JavaScript language).
- Added many Float64 manipulation functions.
- Made minor stylistic changes throughout the document.
|
Feb 22, 2001 |
- Renamed type
None to Never .
- Renamed the empty escape from
\Q to \_ .
|
Feb 8, 2001 |
- Added generic class members.
- Extended the
prototype attribute to allow any value for
the this parameter and cause an instance member to appear in the class’s prototype
global property. This makes prototype methods appear to be "intentionally generic" as per ECMAScript
Edition 3.
|
Feb 6, 2001 |
- Updated the definition extent model as discussed at the January TC39TG1
meeting. Now definitions are local by default but hoist if necessary. Removed
the
regional and global attributes.
- Updated the definition conflict rules: added the rule about
non-interfering local definitions and removed the rule about permitting re-execution of a
const definition,
since that is now impossible.
- Removed the paragraph about JavaScript 2.0 being firmly in the dynamic camp from the introduction,
since the examples given — dynamically defining classes and functions by placing them inside an
if
statement — no longer apply. Some of this can still be done using boolean attributes, but these attributes must
be compile-time expressions.
- Changed the data structures returned by methods of the for-in iteration
protocol to be objects with named properties
value and state rather than arrays or tuples
with numbered properties 0 and 1 . This allows the two properties to be declared using different
types.
- Specified a default superconstructor call if a constructor contains
no other superconstructor calls.
- Specified that object construction follows the Java model rather than
the C++ model — when a constructor calls a virtual method on an object o under construction, it sees
the most derived method even if the class in which that method is located has not yet run its constructor on o.
- Added vector comprehensions [g(a) | a
u] and [g(a) | a
u and c(a)]
to the semantic notation.
|
Jan 31, 2001 |
- Eliminated namespace inheritance to simplify the proposal. This is unnecessary
given the ability to use
const to combine several namespace attributes.
- Removed property lookups using a class before the
::
(x. C:: n and super x. C:: n
where C is a class). This feature did not add much useful functionality.
|
Jan 25, 2001 |
- Minor wording changes.
- Brought back the
.() operator.
- Updated semantic notation — revised description and usage of
and added unique id’s.
|
Jan 11, 2001 |
- In strict mode the default scope is
local everywhere.
- Like in C++,
for statements now form their own scopes. This
affects local definitions only.
catch clauses now form their own scopes.
try statements no longer allow annotations on any of their constituent
blocks.
- Split the notion of statements into statements
and directives. Directives (including most definitions) can only be at
the top level of a block, while statements can be anywhere. This avoids the problem of conditional definitions as
substatements of a compound statement.
- Reorganized the statement grammar around the distinction between statements and directives. Added the Substatement
nonterminal.
- Revised the discussion of annotated blocks.
- Revised the description of scopes.
- Added an optional
const attribute to function parameters,
which makes them read-only.
|
Jan 9, 2001 |
- Made the attribute
weak JS-only.
- Made minor clarifications without affecting the content.
- Added rationale for the types
Object and None .
- Added attribute-style alternative to the type syntax rationale.
Feedback on this style would be appreciated.
- Revamped variable lookup to search for instance members inside
instance methods without the need for the
this. prefix. Also moved the description of the lookup of static
members inside a class’s scope from the class section to the variable
lookup section.
- Simplified the package referencing rules. Also fixed the examples there
to not use a package as a
:: qualifier, since one is not allowed there by the name
lookup rules.
- Changed
explicit from a specialized attribute into a namespace similar to internal . Removed
implicit . This simplified the name lookup rules.
- Greatly simplified
use ’s included and
excluded name possibilities to be either * or a list of identifiers.
- Generalized the iteration protocol to allow its methods to return
objects of any type as long as they have the properties
0 and 1 . Stated that the values
returned by the iteration protocol expire when the next iteration occurs.
- Added rationale for not overriding
! , || ,
^^ , && , and ?: .
|
Dec 21, 2000 |
|
Dec 20, 2000 |
- Made minor wording fixes in the packages section.
- Simplified the grammar by making the
const operator have the same precedence as the other unary operators.
When used as a type constructor, the const operator now applies to the array type instead of the element
type. The const operator can no longer be used to emulate the const
statement.
- Simplified the IncludesExcludes
grammar without changing its behavior in any significant way by merging it with the expression grammar.
|
Dec 18, 2000 |
- Changed the syntax for defining an operator override from
function operator " op"
to operator function " op" . operator is now an attribute
instead of a keyword.
- Renamed operator overloading to operator overriding. Moved the operators
page from the libraries to the core section.
- Removed the
Boolean return type restriction from the < , <= , == ,
=== , and in operators.
- Restricted the
=== operator to take operands of the same class.
- Modified single and double operator dispatch rules so that
null is considered to be a member of only
the types Null and Object . Without this restriction dispatch becomes ambiguous. Note that
ordinary method dispatch already has this restriction built-in.
- Specified the built-in operator definitions.
|
Dec 2, 2000 |
- Revamped the syntax for operator overriding based on
feedback from the last ECMA meeting. There is now a special syntax to do this.
- Modified the syntax for accessing a superclass’s method to conform to the new operator overriding scheme.
The
super:: id syntax is no longer supported. super is now an operator
modifier that alters the behavior of another operator such as . (property lookup) or any of the overridable
operators such as + .
- Updated the property lookup section to accommodate the new
super
syntax.
|
Nov 29, 2000 |
- Revamped property lookup. For an unqualified reference x
. n,
instance name lookup previously found the most derived property. Now it first looks for the least derived property
and picks the most derived overload of that property. The new definition handles private property access correctly
and allows property access to be optimized to a simple offset lookup when the static type of the instance is known.
- For simplicity removed the C
:: n (where C is a class) case of variable
lookup. Use C. n instead.
- Added descriptions of instances, properties,
and property names.
- Stated that the activation frame of a class contains aliases to the superclass’s global members.
- Cleaned up nomenclature: the names defined by a class are members, while the bindings inside an object are
properties. Members cause properties to be constructed when a class instance is created.
|
Nov 20, 2000 |
- Renamed the
s regular expression flag from simple to span .
- Removed the
/ UnitProduct
production from the unit grammar.
- Allowed white space in the unit grammar. White space can now also be
used to indicate implicit multiplication there.
- Fixed the product rule in the unit grammar.
- Renamed
expt to pow in unit expressions.
|
Nov 4, 2000 |
- Added attributes
true and false .
- Replaced the
qualified attribute by the include
and exclude syntax in import and use namespace statements. Added nonreserved
words include and exclude .
- Imported definitions appear in the global scope instead of the scope of the
import statement; however,
the implicit use still applies to scope of the import statement.
- Predefined type names are constants in the global scope instead of a scope enclosing
the global scope.
- Defined activation frames and qualified
names.
- Blocks with attributes are not scopes.
- Eliminated the notion of the static and dynamic extent of a definition. Rewrote and corrected the definition
extent and name lookup rules in terms of scopes
and activation frames only.
- Simplified name lookup rules, making them independent of the order
in which namespaces are
use d.
- Relaxed the compile-time constant rules to permit expressions
that either return a known value or signal an error. Without this change packages and namespaces cannot work.
- A class can be used instead of a namespace before the
:: during name
lookup. This limits the search to members of that class or its superclasses.
- Eliminated the a
:: b:: c syntactic sugar. In the rare cases
where it’s still needed, use ( a. b):: c.
- Defining b
:: n when there
is already a definition a:: n in the same scope causes an error if both namespaces
a and b are use d at the point of the definition of b:: n.
- Renamed
scope to regional . scope blocks can now be either local
or regional blocks. Defined the notion of a regional scope.
- Changed unit lookup to look in the
Unit class instead
of prefixing unit_ to each unit name and looking for a global symbol. Added the unit attribute.
- In strict mode the default scope is
local only inside functions.
- Strict mode is optional (ECMAScript only).
|
Oct 27, 2000 |
- Expanded the
qualified attribute to optionally take a list of symbols to exclude.
- Definitions of top-level entities in a package can only
be placed in the namespace
public or in namespaces defined within that package.
- Extensively modified and updated the description of units. Allowed
multiple unit on the same expression in order to support combining number class units (such as "decimal") with units
of measure. Defined the grammar and semantics of unit expressions.
|
Oct 10, 2000 |
- Removed the
primitive attribute.
- Defined methods for overriding the for-in operator.
- Added the
s (simple ) flag to regular expressions. This flag makes . match
every character.
|
Oct 9, 2000 |
- Made
classof , eval , and include no longer be reserved words.
- Combined the
import statement with an automatic use namespace
of selected namespaces.
- Made the
include statement take string literals only.
- Changed
classof x to x.class .
- Fixed minor editing errors.
|
Sep 23, 2000 |
- Defined coercions of
undefined to any type except None .
- Renamed the
none and void types to None and Void . Now all predefined
type names start with upper case letters.
- Removed the
singleton type.
- Resurrected the ECMAScript Edition 3
void operator and added the classof operator.
- Made default constructors accept named arguments.
- Modified the syntax of class extensions and moved their
description to the definitions page.
- Changed the meaning of a
:: b:: c to be ( a. b):: c
rather than the intersection of the a:: c and b:: c
sets. This means that an identifier may be qualified by only one namespace.
- Updated the compatibility, namespace, operator
overloading, and versioning pages.
|
Sep 22, 2000 |
|
Sep 21, 2000 |
- Updated list of reserved words.
- Updated concept page.
- Renamed
volatile to virtual , keeping volatile ’s old semantics.
- Revamped list and descriptions of attributes. Added a number of new
attributes.
- Disallowed qualifiers in names of literal object fields and names of arguments. Allowed parenthesized indirect expressions
that evaluate to strings in those cases.
- Added
const operator, array types, and const array types.
- Added
include statement.
- Changed the handling of the rest parameter to only accept named arguments
if it’s preceded by a
| .
|
Sep 18, 2000 |
Integrated many changes based on recent discussions with Herman and others:
- Renamed
any to Object .
- Added notion of live and dead
statements.
- Required attributes to be compile-time constants.
- Reinstated parenthesized expressions before
:: (except in attributes).
- Changed package names in
package definitions to be identifiers or dotted identifier lists. This required
renaming the package attribute to internal in order to keep the grammar LR(1)-parsable.
- Renamed
import to qualified import and use import to import .
- Allowed
super.foo as an abbreviation for this.super::foo .
- Removed obj
.( expr) member access syntax.
- Removed definitions that define qualified identifiers.
- Required
const declarations to have initializers.
- Each block is its own scope in strict mode.
- Specified the means of defining parameters that take named arguments.
Rewrote description of argument passing.
- Cleaned up significant portions of the grammar.
|
Aug 21, 2000 |
- Significantly reworked syntax of attributes and expressions to allow attributes to take arguments. This required
making
constructor , namespace , and use into reserved words.
- Required parentheses after
eval .
- Removed the syntaxes for placing a parenthesized expression before
:: and for unquoted package names
due to grammar conflicts.
- Removed the
attribute keyword; attributes are now defined using the const syntax.
- Removed
compile blocks.
- Added the
\Q escape, which turns into nothing and is useful for using identifiers that would otherwise
be reserved words.
|
Aug 17, 2000 |
Split off ECMAScript Edition 4 proposal. |
Aug 11, 2000 |
Reformatted site for compatibility with Navigator 6 and Internet Explorer. Archived third
draft. |
Jun 6, 2000 |
Added discussion of constant expressions and related restrictions on the expressions
page. Defined the [] operator. Added visibility modifier
attributes. |
May 26, 2000 |
Minor grammar changes and cleanups. Allowed attributes in var and const declarations in for
statements. Added [no line break] assertions in various rules to prevent changing the meaning of JavaScript
1.5 programs. Simplified switch and block grammars without changing their meanings. |
May 8, 2000 |
Changed the name of a default constructor from new to the same
name as its class. This eliminated the various syntactic special cases of new in places where a member name
was expected. Also allowed qualified identifiers as literal field names. |
May 1, 2000 |
Rewrote packages page. |
Apr 30, 2000 |
Made significant syntax changes (Parser Grammar and other pages): revised identifier
qualifiers, primary expressions, and definition
attributes; added attribute , namespace , interface , import , export ,
and use statements; changed package naming. Updated definition of scopes and namespaces on Concepts
page. Updated list of keywords on Lexer page. Revised definition
extent rules. Allowed multiple const , class , and interface declarations as
long as only one is a definition. Rewrote variables, functions,
definitions, and classes pages. |
Feb 16, 2000 |
Updated machine type and operator
overloading pages. |
Feb 15, 2000 |
Updated grammar and discussions of concepts,
types, expressions, statements,
definitions, and variables, as well as the syntax
rationale. |
Dec 7, 1999 |
Removed field , method , and constructor from the semantics and replaced with creative
uses of the static prefix. |
Nov 11, 1999 |
Continuing major reorganization of this document.... |
Nov 5, 1999 |
Reorganized the document’s structure into chapters. Structured the core language chapter more in the bottom-up
style of the ECMAScript standard than in the previous issue-oriented style. Combined and moved rationales and issues into
an appendix. Added introduction page. Removed or reworded many obsolete paragraphs
throughout the document. |
Nov 2, 1999 |
Modified the parser grammar: added [no line break] constraints, removed version
lists after public keywords, added box and user-defined visibility keywords, and added named
function arguments. |
Oct 29, 1999 |
Revised the execution model based on recent ECMA modularity group discussions.
JavaScript 2.0 now has a hybrid execution model instead of a pure dynamic one, which allows for better compatibility with
JavaScript 1.5. |
Oct 20, 1999 |
Added throw and try-catch
semantic operators to semantic notation and used them to signal syntax errors detected
by the semantics that would be impossible or too messy to detect in the grammars. Updated formal
description pages to match recent ECMA TC39 subcommittee decisions: eliminated octal numbers and escapes (both in
strings and in regular expressions) to match ECMAScript Edition 3, switched to using the Identifier : TypeExpression
syntax for type declarations, and added local blocks and the local visibility specifier. Also
simplified the parser grammar for definitions and removed the « and » syntax for
regular expression literals. |
Jul 26, 1999 |
Wrote description of semantic notation. Updated grammar
notation page to describe lookahead constraints. Updated regular expression
semantics to match ECMA working group decisions for ECMAScript Edition 3; one of these included changing the behavior
of (?= to not backtrack. |
Jun 7, 1999 |
Revised all grammars and semantics to simplify the grammars. Fixed several errors and omissions in the regular expression
grammar and semantics. Added support
for (?= and (?! . |
May 16, 1999 |
Added regular expression grammar and semantics. |
May 12, 1999 |
Added preliminary Formal Description chapter. |
Mar 25, 1999 |
Added Member Lookup page. Released second
draft. |
Mar 24, 1999 |
Added many clarifications, discussion sections, and small changes throughout the pages. |
Mar 23, 1999 |
Rewrote Execution Model page and split it off from the Definitions
page. Added discussion of float to Machine Types. |
Mar 22, 1999 |
Removed numbered versions from the Versions page; added motivation, discussion,
and version aliasing using = . Removed angle brackets < and > from VersionsAndRenames. |
Mar 16, 1999 |
Rewrote Types page. Split off byte , ubyte , short ,
ushort , int , uint , long , ulong into an optional Machine
Types library. |
Feb 18, 1999 |
Released first draft. |