title: The Truth about JavaScript
h1. The Truth about JavaScript
Brendan Eich (Mozilla) @ The Ajax Experience West, July 2007
(Adapted S9 Version From Original S5 Slide Deck)
h1. The Big Picture
* Open Web vs. Light-Silver Flashy Stuff
* News flash from MIX07: C# beats JScript at chess!
* Do users care? Do developers?
* How truly "open" is the Open Web?
* We're finding out right now
** Web Hypertext Application Technology Working Group (WHATWG)-induced W3C work on HTML 5
** ECMA TC39 TG1 work on EcmaScript 4 (aka JavaScript 2)
* Enfranchising Web Developers
h1. JavaScript 2 Update
"The unavoidable price of reliability is simplicity" -- C.A.R. Hoare
* JavaScript 1 oversimplified => complexity tax on developers
* JavaScript 2 goal: cut complexity tax
** Without bloating the core language
** Or small device implementations!
* "@http://ecmascript-lang.org@":http://ecmascript-lang.org
** SML-NJ reference implementation
** public bug (trac) database
** public wiki coming soon
h1. New Since Last Year
* Expression closures: function cube(x) x * x * x
* Program units
* Dictionaries
* ByteArrays, Vectors, Tuples
* Type system evolution
h1. Program Units
{{{
use unit acme.widgets "http://acme.com/widgets";
}}}
{{{
unit acme.widget {
// program unit definition goes here
...
}
}}}
* Server preprocessor can expand use to definition
* Locator could be a p2p hash instead of a URL
* Open question: Why packages *and* program units?
h1. Dictionaries
* class Dict. with key, value type params
* Constructor takes advice to support two styles:
** OOP style calls k1.equals(k2), k.hashcode()
** FP style calls k1 === k2, intrinsic::hashcode(k)
* Converts Object to Dict. for several key types @K@
let d : Dict. = {a: 1, b: 2, c: 3};
* Sensible JSON integration via @toJSONString@
* Name still in flux (@Hash@? @Dictionary@? @HashMap@? Ugh)
h1. ByteArrays, Vectors, Tuples
* @ByteArray@ class, converts from @Array@
** @Array.map@ etc. work on it, albeit generically
* Parameterized type @Vector.@
** Dense, optionally fixed length
** Vector.(length : uint = 0, fixed : boolean = false)
* @ByteArray@ could be subsumed by @Vector.@
** If we are willing to add a @byte@ type
* Structural array type A = [int, string, boolean] is a tuple
** Not a named @Tuple@ type!
** Fixed length with type constraints
** Type-checked compatibility with @Array@
h1. Type System Trade-offs
* We believe untyped objects will abound forever
* But typed APIs, including structural types, will emerge
* Nominal (class) hierarchies (DOM, Flex, etc.) likely too
** But they won't take over the Web
** So we're not turning JavaScript into Java
* Most common case: Untyped code calling Typed API
* Another important case: class matching structural type
h1. Structural Types as Contracts
* Given function f(a : {p: int, q: string}) ...
** Assume it's a structurally typed API method
* What does f({p: 42, q: "hi"}) check, and when?
* Use cases want early and deep checking
** An untyped object could mutate after the check
** Checking every read too costly, yet still incomplete
** See MochiKit's @isArrayLike@, @isDateLike@
* Given a class @C@ with the right instance vars,
** passing @f(new C(42, "hi"))@ can go fast
h1. Performance Trends
* "Fastest browser on the planet" i-bench bragging
* Pure JavaScript performance not critical (yet, for common cases)
* DOM and rendering dominate critical paths, *but*:
** DOM bindings hide JS dynamic typing costs
** Developers are pushing hard at the frontiers
* John Resig wrote and collected some benchmarks
** "@http://ejohn.org/apps/js-speed/results/@":http://ejohn.org/apps/js-speed/results
h1. New Projects - ActionMonkey
* "Merge Tamarin and SpiderMonkey":http://wiki.mozilla.org/JavaScript:ActionMonkey
* Targeting "Mozilla 2":http://wiki.mozilla.org/Mozilla_2 release, beta next year
* First stage integrates Tamarin's Garbage Collector
* Later stages include trace-based JITing
h1. New Projects - IronMonkey
* Map IronPython and IronRuby to Tamarin
** Avoid forking C# source using Mono C# compiler
** Bytecode translation _a la_ IKVM, JaCIL
* Led by Seo Sanxiyn of "FePy":http://fepy.sourceforge.net and PyPy fame
h1. New Projects - ScreamingMonkey
* Goal: support Tamarin in other browsers
* Led by Mark Hammond of Windows Python fame
* First target: IE integration as an ActiveScript engine
* Handle these RFC 4329 content