blob: 56960c787a6a404bcfc5e31c8a4596bc4943eb71 [file] [log] [blame]
<?php
$title = "JavaScript";
include("../../header.inc");
?>
<h2>JavaScript</h2>
<h3>Overview</h3>
<p>This is the project page for WebKit's JavaScript implementation.
JavaScript is the primary programming language used on web pages. Originally named LiveScript and now also known as ECMAScript,
it's a safe, dynamic language that's arguably one of the most well-known programming languages in the world.
There's a <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">JavaScript standard</a>, created by ECMA.
WebKit's JavaScript engine, JavaScriptCore, based on KJS, is a framework separate from WebCore and WebKit, and is used
on Mac OS X for applications other than web page JavaScript.</p>
<h3>Get Involved!</h3>
<a href="http://bugs.webkit.org/buglist.cgi?product=WebKit&amp;component=JavaScriptCore&amp;resolution=---">
View bugs in the JavaScriptCore component in Bugzilla.
</a>
<p>Here are some of the tasks that you can get involved with in JavaScript.</p>
<dl>
<dt>Bytecode Interpreter</dt>
<dd>JavaScriptCore currently creates a syntax tree and then uses that syntax tree when executing JavaScript.
We'd like to use a bytecode interpreter instead, and if it's done right it will make JavaScript run faster and use less memory.</dd>
<dt>Generational Garbage Collector</dt>
<dd>The garbage collector in JavaScriptCore has been improved quite a bit from the earliest versions.
But much greater efficiency can be achieved with a garbage collector that uses a generational algorithm,
so we don't have to mark all the objects every time we garbage collect. This should make JavaScript
run significantly faster.</dd>
<dt>Elminate Smart Pointer Wrappers</dt>
<dd>The KJS programming interface for JavaScript involves smart pointers that wrap the actual JavaScript objects. For example,
<tt>KJS::Object</tt> is used to wrap <tt>KJS::ObjectImp</tt>. Since JavaScriptCore now uses conservative garbage collection, the smart pointers
aren't needed any more. Our plan is to eliminate <tt>KJS::Object</tt> and rename <tt>KJS::ObjectImp</tt> to <tt>KJS::JSObject</tt>,
and do similar things for the other JavaScript value types. Removing this extra
struct wrapper should result in better code generation, making the library smaller and JavaScript execution faster.</dd>
<dt>Mozilla JavaScript Test Suite</dt>
<dd>JavaScriptCore has an implementation of the Mozilla JavaScript Test Suite, and there are currently many failures.
Fixing any of those failures would help our JavaScript engine be more compliant with the specification, and more
compatible with real-world web sites as well.</dd>
<dt>ECMAScript for XML</dt>
<dd>The <a href="http://www.ecma-international.org/publications/standards/Ecma-357.htm">E4X standard</a> adds some XML-related
features to the JavaScript language. We should consider adding these to the JavaScriptCore engine.</dd>
<dt>Language Extensions</dt>
<dd>The Mozilla project has begun adding some
<a href="http://www.mozilla.org/projects/deerpark/new-web-dev-features.html">extensions to JavaScript</a>.
Someone needs to evaluate these and decide which of them we should implement. We should also consider extensions of our own driven by
demand in contexts like Dashboard widgets.</dd>
<dt>C Language Binding</dt>
<dd>JavaScriptCore currently has the original C++ method of binding native code to JavaScript, an Objective-C binding that's exported from WebKit
as WebScriptObject, and a browser plug-in oriented C binding. We'd like to create a generic C language binding suitable for use by
any project that wants to take advantage of the JavaScript engine, but which is easier to maintain compatibly than a C++ binding.</dd>
</dl>
<?php
include("../../footer.inc");
?>