blob: 7d68376bcdca908037d90745e5676872c2a4f9dc [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
ul {
padding: 0;
margin: 0;
}
</style>
<link type="image/x-icon" rel="icon" href="favicon.ico" />
<link type="image/x-icon" rel="shortcut icon" href="favicon.ico" />
<link type="text/css" rel="stylesheet" href="pipe.css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>node v0.4 announcement</title>
</head>
<body>
<h2>Second Stable Branch of Node released</h2>
<p>
<a
href="https://github.com/ry/node/wiki/Migrating-from-v0.2-to-v0.3">Wiki
page detailing API changes between v0.4 and v0.2</a>
<p>
Major changes since v0.2:
<ul>
<li> Major overhaul of TLS/SSL system. Previously the binding to
OpenSSL was heavily interwoven into the socket code. This binding was
reworked to present each connection as a pair of "streams" instead: a
duplex encrypted stream and a duplex cleartext stream. The encrypted
stream is piped to a raw TCP socket using the general purpose
<code>Stream.prototype.pipe()</code> method. Functionality was
enhanced and API simplified.
<li>Simpler HTTP client API with connection pools.
<li> Cheaper <code>Buffer</code> allocation. Node uses
<code>Buffer</code> objects in many places - it was noticed that they
were relatively slow to allocate and difficult to garbage collect. The
implementation changed to use pure javascript objects instead of
an <code>ObjectWrap</code> which improved performance.
<li> With a good amount of experience now, some modifications to the
module loading system were made to better support package managers.
In particular, npm was forced to resort to deep symlinks and "shim"
modules to work around missing features in <code>require()</code>. The main
changes are:
<ol>
<li><code>require()</code> calls realpath. That is,
it resolves symbolic links. This allows symlinked modules to make
relative requires.
<li><code>require()</code> now has a primitive understanding of
<code>package.json</code>. It looks for the <code>main</code>
script. This allows <code>require()</code> to work on package
directories directly.
<li>A specially named directory, <code>node_modules/</code>, is
searched in the current directory for any modules. This will
hopefully encourage programmers to bundle modules rather than
rely on a global namespace.
</ol>
Read more about these features in <a
href="https://github.com/ry/node/blob/01a864a29d64119054401784cd9255c3a813bdbc/doc/api/modules.markdown">the
module documentation</a>.
<li> A half-complete but good start a native windows build with MinGW
is underway by Bert Builder. Build instructions can be found <a
href="https://github.com/ry/node/wiki/Building-node.js-on-mingw">on
the wiki</a>.
<li> Node upgraded to the latest version of V8, <code>v3.1.2</code>.
This includes much work including V8's new compilation infrastructure
and a GDB plugin on Linux.
Read <a
href="https://github.com/ry/node/blob/583f2e599962f2664dbaafa0ae98a8d6c1242441/deps/v8/ChangeLog">the
full V8 ChangeLog</a>.
<li>A new built-in client for V8's debugger was added to Node. It is
still very primitive but usable for simple task. There is a <a
href="http://vimeo.com/19465332">small introduction video</a> and
some <a
href="https://github.com/ry/node/blob/01a864a29d64119054401784cd9255c3a813bdbc/doc/api/debugger.markdown">documentation</a>.
<li>An <code>os</code> module was added by Brian White which exposes
a lot of basic but useful system information: <code>os.cpus(),
os.freemem(), os.totalmem(), os.loadavg()</code>
<li> And, of course, many of bug fixes. See the
<a
href="https://github.com/ry/node/blob/01a864a29d64119054401784cd9255c3a813bdbc/ChangeLog">full
changelog</a>.
</ul>
</body>
</html>