<!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>