ECMAScript is a
scripting language, standardized by
Ecma International in the
ECMA-262 specification and ISO/IEC
16262. The language is widely used on the
web, especially in the form of its three
best-known dialects,
JavaScript,
ActionScript, and
JScript.
History
JavaScript was originally developed by
Brendan Eich of
Netscape under the name
Mocha, later LiveScript, and finally renamed to JavaScript. In
December 1995,
Sun Microsystems and
Netscape announced JavaScript in a press release. In March 1996
Netscape Navigator 2.0 was out,
featuring support for JavaScript.
Due to the widespread success of JavaScript as a client-side
scripting language for web pages,
Microsoft developed a compatible dialect of the
language, naming it
JScript to avoid
trademark issues. JScript added new date methods to fix the
non-
Y2K-friendly methods in
JavaScript, which were based on
java.util.Date. JScript was included in
Internet Explorer 3.0, released in
August 1996.
Netscape submitted JavaScript to
Ecma
International for standardization; the work on the
specification, ECMA-262, began in November 1996. The first edition
of ECMA-262 was adopted by the ECMA General Assembly of June
1997.
ECMAScript is the name of the scripting language standardized in
ECMA-262. Both JavaScript and JScript aim to be compatible with
ECMAScript, while providing additional features not described in
the ECMA specification.
The name "ECMAScript" was a compromise between the organizations
involved in standardizing the language, especially Netscape and
Microsoft, whose disputes dominated the early standards sessions.
Brendan Eich, the creator of JavaScript, is on record as saying
that "ECMAScript was always an unwanted trade name that sounds like
a skin disease."
Versions
There are three editions of ECMA-262 published. Work on an update
to the third edition known provisionally as "ECMAScript, Fifth
Edition", and on a future edition codenamed "Harmony", is in
progress.
| Edition |
Date published |
Differences to the previous edition |
Editor |
| 1 |
June 1997 |
First edition |
Guy L. Steele, Jr. |
| 2 |
June 1998 |
Editorial changes to keep the specification fully aligned with
ISO/IEC 16262 international standard |
Mike Cowlishaw |
| 3 |
December 1999 |
Added regular expressions, better string handling, new control
statements, try/catch exception handling, tighter definition of
errors, formatting for numeric output and other enhancements |
Mike Cowlishaw |
| 4 |
Abandoned |
Fourth Edition was abandoned, due to political differences
concerning language complexity, with some of the work forming the
basis of Fifth Edition and some forming the basis of ECMAScript
Harmony. |
|
| 5 |
Candidate Recommendation (Work in progress) |
Adds "strict mode", a subset intended to provide more thorough
error checking and avoid error-prone constructs. Clarifies many
ambiguities in the 3rd edition specification, and accommodates
behaviour of real-world implementations that differed consistently
from that specification. Adds some new features, such as getters
and setters, library support for JSON, and more
complete reflection on
object properties. ECMAScript 5 is likely to be published as
"ECMAScript 5th edition" towards the end of 2009. |
Allen Wirfs-Brock |
| Harmony |
Work in progress |
Multiple new concepts and language features — see the section
"Future development" below. |
|
In June 2004 Ecma International published ECMA-357 standard,
defining an extension to ECMAScript, known as
E4X (ECMAScript for XML).
ECMA also defined a "Compact Profile" for ECMAScript — known as
ES-CP, or ECMA 327 — which is designed for resource-constrained
devices. Several of the dynamic features of ECMAScript (such as the
"eval" function) are made optional, thus allowing the runtime to
make more assumptions about the behaviour of programs and therefore
make more performance trade-offs when running the code. The
HD DVD standard was one place where the
ECMAScript Compact Profile was used in favour of full ECMAScript in
order to reduce processing and memory requirements on a
device.
Features
The ECMAScript language includes
structured,
dynamic,
functional, and
prototype-based features.
Syntax
Dialects
ECMAScript is supported in many applications, especially
web browsers, where it is commonly called
JavaScript. Dialects sometimes include extensions to the language,
or to the
standard library and
related
API such
as the
W3C-specified
DOM. This means that
applications written in one dialect may be incompatible with
another, unless they are written to use only a common subset of
supported features and APIs.
Note that there is a distinction between a dialect and an
implementation. A dialect of a language is significant variation of
the language, while an implementation of a language/dialect
executes a program written in that dialect.
| Application/Implementation |
Dialect and latest version |
ECMAScript edition |
| Mozilla Firefox, the Gecko layout engine, SpiderMonkey, and Rhino |
JavaScript 1.8.1 |
ECMA-262, edition 3 |
| Google Chrome, the V8 engine |
JavaScript |
ECMA-262, edition 3 |
| Internet Explorer, the
Trident layout engine |
JScript 5.8 |
ECMA-262, edition 3 |
| Opera |
ECMAScript |
ECMA-262, edition 3 |
| KHTML layout engine, KDE's Konqueror, and Apple's Safari |
JavaScript |
ECMA-262, edition 3 |
| Appweb Web Server, Samba 4 |
Ejscript 0.9.9 |
ECMA-262, edition 3 |
| Microsoft .NET Framework |
JScript .NET 8.0 |
ECMA-262, edition 3 |
| Adobe Flash and Adobe Flex |
ActionScript 3 |
ECMA-262, edition 3 |
| Adobe Acrobat |
JavaScript 1.7 |
ECMA-262, edition 3 |
| General purpose scripting language |
DMDScript 1.15 |
ECMA-262 |
| OpenLaszlo Platform |
JavaScript |
ECMA-262, edition 3 |
| CriScript, JScript for game
platforms |
CriScript 0.91.0 |
ECMA-262, edition 3 |
| iCab |
InScript 3.22 |
ECMA-262, edition 3 |
| Max/MSP |
JavaScript 1.5 |
ECMA-262, edition 3 |
| ANT Galio 3 |
JavaScript 1.5 |
ECMA-262, edition 3 |
| KDE |
QtScript |
ECMA-262, edition 3 |
|
Caja |
ECMA-262, edition 3 |
|
Objective-J |
ECMA-262, edition 3 |
|
JavaScript OSA |
ECMA-262, edition 3 |
|
WMLScript |
ECMA-262, edition 3 |
Version correspondence
The following table is based on
[27810] and
[27811]; items on the same line are
approximately the same language.
| JavaScript |
JScript |
ECMAScript |
| 1.0 (Netscape 2.0, March 1996) |
1.0 (IE 3.0 - early versions, August 1996) |
|
| 1.1 (Netscape 3.0, August 1996) |
2.0 (IE 3.0 - later versions, January 1997) |
|
| 1.2 (Netscape 4.0-4.05, June 1997) |
|
|
| 1.3 (Netscape 4.06-4.7x, October 1998) |
3.0 (IE 4.0, Oct 1997) |
Edition 1 (June 1997) / Edition 2 (June 1998) |
| 1.4 (Netscape Server only) |
4.0 (Visual Studio 6, no IE release) |
|
|
5.0 (IE 5.0, March 1999) |
|
|
5.1 (IE 5.01) |
|
1.5 (Netscape 6.0, Nov 2000; also
later Netscape and Mozilla releases) |
5.5 (IE 5.5, July 2000) |
Edition 3 (December 1999) |
|
5.6 (IE 6.0, October 2001) |
|
| 1.6 (Gecko 1.8, Firefox 1.5, November 2005) |
|
Edition 3, with some compliant enhancements: E4X, Array extras (e.g.
Array.prototype.forEach), Array and
String generics ( New in JavaScript 1.6) |
| 1.7 (Gecko 1.8.1, Firefox 2, October 2006) |
|
Edition 3 plus all JavaScript 1.6 enhancements, plus Pythonic generators and
array comprehensions ([a*a
for (a in iter)]), block scope with let,
destructuring assignment (var [a,b]=[1,2]) ( New in JavaScript 1.7) |
| 1.8 (Gecko 1.9, Firefox 3, June 2008) |
|
Edition 3 plus all JavaScript 1.7 enhancements, plus expression
closures (function(x) x * x), generator expressions,
and more ( New in JavaScript 1.8) |
|
JScript .NET (ASP.NET; no IE release) |
(JScript .NET is said to be designed with the participation of
other ECMA members ) |
| JavaScript 2.0 (Work in progress) |
|
Harmony (Work in progress; see the section "ECMAScript Harmony" below). |
Future development
The proposed fourth edition of ECMA-262 (
ECMAScript
4 or
ES4) would have been the first major
update to ECMAScript since the third edition was published in 1999.
The specification (along with a reference implementation) was
originally targeted for completion by October 2008. An
overview of the language was released by the working
group on October 22, 2007.
As of August 2008, the ECMAScript 4th edition proposal has been
scaled back into a project codenamed
ECMAScript Harmony.
Features
Features under discussion for a future edition (originally
"ECMAScript 4"; now ECMAScript Harmony) include:
The intent of these features is partly to better support "
programming in the large", and to
let programmers sacrifice some of the script's ability to be
dynamic for performance. For example,
Tamarin — the virtual machine for ActionScript
developed and open sourced by Adobe — has
JIT compilation support for certain
classes of scripts.
Bug fixes and backwards compatibility
In addition to introducing new features, some ES3 bugs were
proposed to be fixed in edition 4. . These fixes and others, and
support for
JSON encoding/decoding, have now
been folded into the ECMAScript, 5th Edition specification.
History
Work started on Edition 4 after the ES-CP (Compact Profile)
specification was completed, and continued for approximately 18
months where slow progress was made balancing the theory of
Netscape's JavaScript 2 specification with the implementation
experience of Microsoft's JScript .NET. After some time, the focus
shifted to the
E4X standard.
The update has not been without controversy.
In late 2007, a debate
between Eich, now the Mozilla Foundation
's CTO, and Chris Wilson, Microsoft's platform architect for Internet Explorer, became public on a
number of blogs. Wilson cautioned that
because the proposed changes to ECMAScript made it backwards
incompatible in some respects to earlier versions of the language,
the update amounted to "breaking the Web," and that stakeholders
who opposed the changes were being "hidden from view". Eich
responded by stating that Wilson seemed to be "repeating falsehoods
in blogs" and denied that there was attempt to suppress dissent and
challenging critics to give specific examples of incompatibility.
He also pointed out that
Microsoft
Silverlight and
Adobe AIR rely on
C# and
ActionScript 3 respectively, both of which are
larger and more complex than ECMAScript Edition 3.
ECMAScript, 5th Edition
Microsoft, Yahoo, and other 4th edition dissenters formed their own
subcommittee to design a less ambitious update of ECMAScript 3,
tentatively named ECMAScript 3.1. This edition would focus on
security and library updates with a large emphasis on
compatibility. After the aforementioned public sparring, the
ECMAScript 3.1 and ECMAScript 4 teams agreed on a compromise: the
two editions would be worked on in parallel, with coordination
between the teams to ensure that ECMAScript 3.1 remains a strict
subset of ECMAScript 4 in both semantics and syntax.
However, the differing philosophies in each team resulted in
repeated breakages of the subset rule, and it remained doubtful
that the ECMAScript 4 dissenters would ever support or implement
ECMAScript 4 in the future. After over a year since the
disagreement over the future of ECMAScript within the ECMA
Technical Committee 39, the two teams reached a new compromise in
August 2008: ECMA TC39 announced it would focus work on the
ECMAScript 3.1 (later renamed to ECMAScript, 5th Edition) project
with full collaboration of all parties, and it would target two
interoperable implementations by early 2009. The "final" draft of
the 5th edition (still subject to change reflecting the outcome of
compatibility testing) was published April 2009. At that time Ecma
announced testing of interoperable implementations was expected to
be completed by mid-July, although in fact it is still in progress.
The standards track is expected to be finished by the end of
2009.
ECMAScript Harmony
In the same announcement, ECMA TC39 also stated that the ECMAScript
4 proposal would be superseded by a new project, code-named
ECMAScript Harmony. ECMAScript Harmony will include syntactic
extensions, but the changes will be more modest than ECMAScript 4
in both semantic and syntactic innovation. Packages, namespaces and
early binding from ECMAScript 4 are no longer included for planned
releases. In addition, other goals and ideas from ECMAScript 4 are
being rephrased to keep consensus in the committee; these include a
notion of classes based on ECMAScript, 5th Edition (being an update
to ECMAScript, 3rd edition) As of
August
2009, there is no publicly announced release date for
ECMAScript Harmony. Depending on ECMA, Harmony may end up being
called ECMAScript, 6th edition.
See also
References
- InfoWorld: JavaScript creator ponders past,
future
- JavaScript Press Release
- Brendan's Roadmap Updates: Popularity
- JavaScript Standardization Press Release
- ECMAScript 3rd Edition specification
- es4-discuss: Will there be a suggested file suffix
for es4?
- Changes to JavaScript, Part 1: EcmaScript 5
-
http://www.ecma-international.org/news/PressReleases/PR_Ecma_finalises_major_revision_of_ECMAScript.htm
- The Mozilla implementations, (SpiderMonkey in the
C programming language and
Rhino in the Java programming language), are
used in several third-party programs,
including the Yahoo! Widget Engine (Konfabulator) and
the Macintosh system-level scripting language JavaScript OSA.
- Mozilla manages the official version of JavaScript. Most
non-Mozilla implementations claiming JavaScript "compliance" do not
actually support most JavaScript extensions; rather, they target
ECMA-262, edition 3.
- V8 implements ECMAScript as specified in ECMA-262, 3rd edition:
V8
JavaScript Engine.
- Opera's implementation includes some JavaScript and JScript
extensions: ECMAScript support in Opera Presto 2.3
- Apple's Safari uses JavaScriptCore which is based on the
KDE KJS
library.
- This implementation asserts to support some extensions proposed
in drafts of ECMAScript edition 4 (and now ECMAScript Harmony):
Ejscript Overview.
- Microsoft asserts that JScript 8.0 supports "almost all of the
features of the ECMAScript Edition 3 Language Specification" but
does not list the unsupported features.
- In addition to supporting ECMA-262 edition 3, ActionScript 3
also included support for extensions proposed in drafts of
ECMAScript edition 4: The Kiwi Project: AS3 language 101 for C/C++
coders.
- Adobe Acrobat 9.0 uses the SpiderMonkey 1.7 engine: JavaScript for Acrobat API Reference
- OpenLaszlo both uses an ECMAScript dialect as noted in the
Developer's Guide: Appendix B: ECMAScript and
can compile down to JavaScript targeted for the browser (the
DHTML target).
- As of version 4, OpenLaszlo implements standard ECMAScript
edition 3 with some extensions proposed in drafts of ECMAScript
edition 4: OpenLaszlo 4.
- ANT Galio Browser claims support for JavaScript
1.5.
- Caja emulates strict mode as specified in the ECMAScript
edition 5 draft.
- es4-discuss: ES4 overview paper released
- John Resig - Bug Fixes in JavaScript 2
- Incompatibilities between ES3 and ES4
-
http://www.ecma-international.org/publications/files/drafts/tc39-2009-025.pdf
- IEBlog: ECMAScript 3 and Beyond
- Albatross!: What I think about ES4
- Brendan's Roadmap Updates: Open letter to Chris
Wilson
- Brendan's Roadmap Updates: My @media Ajax
Keynote
- ECMAScript Harmony announcement
- John Resig: ECMAScript Harmony
External links