Breaking changes between v0.12 and next LTS release

Richard Lau edited this page Oct 20, 2015 · 10 revisions

Breaking changes between v0.12 and next LTS release

How is this list compiled?

This document lists breaking changes, or potentially breaking changes, when upgrading from Node.js v0.12 to the next LTS release that will come from the converged repository between Node.js and io.js. It has been compiled from the following sources:

Breaking changes

tls: RC4 disabled from the list of ciphers

RC4 is now considered insecure and has been removed from the list of default ciphers for TLS servers. Use the ciphers option when starting a new TLS server to supply an alternative list or the --tls-cipher-list command line switch to supply an alternative default cipher list.

Pull requests:

tls: SSLv2 and SSLv3 support removed

Both SSLv2 and SSLv3 are now considered too insecure for general use and have been disabled at compile-time.

Pull requests:

Convergence discussion: nodejs/node#20

url: url.resolve() with URLs with trailing '.' or '..'

Pull request: nodejs/node#278

lang: Array.values() has been removed

Array.values() came from an unofficial release of V8 and has since been removed pending further work on conformance with the spec. Instead of continuing to float a patch on top of V8, io.js and the converged repository are currently without support for it.

Convergence discussion: nodejs/node-convergence-archive#52

os: remove trailing slash from os.tmpdir()

Provides consistency across platforms, no call to os.tmpdir() returns a trailing slash.

Pull request: nodejs/node#747

dgram: do not emit error for failed DNS lookups in send()

When send() is supplied with a callback, it will no longer emit the 'error' event when an error occurs and instead pass the error to the callback. Previously the behavior was to do both.

Pull request: nodejs/node#1796

buffer: Buffer.concat() changes

Through 2.x, if Buffer.concat() is invoked with a single element array, then it will simply return the first element from it. But, starting from 3.0.0, irrespective of the number of elements in the array, a new Buffer object will be created and returned.

Pull request: nodejs/node#1937

http: Use 'finish' instead of 'prefinish' when ending a response

The switch to 'finish' is intended to prevent the socket being detached from the response until after the data is actually sent to the other side.

Pull request: nodejs/node#1411

Commit: nodejs/node/6020d2a2fb

assert: check object prototype in assert.deepEqual()

Previously, deepEqual() would not compare prototypes of the two objects, although it would check the prototype properties of the objects if it exists. Now, deepEqual() uses Object.getPrototypeOf() to fetch and compare prototypes, failing the assertion if they are not the same (!==).

Pull request: nodejs/node#621

V8 version upgraded to 4.5

Potentially breaking changes from 3.28 to 3.29

v8::Isolate::New() now returns an initialized Isolate: https://codereview.chromium.org/583153002

Embedders that used methods that influence the Isolate setup, such as V8::SetResourceConstraints, SetFunctionEntryHook, SetJidCodeHandler, or modifying flags need to either pass those constraints to the Isolate::New factory method or modify flags before creating the isolate.

Embedders relying on SetResourceConstraints to modify the stack limit need to use Isolate::SetStackLimit.

Last but not least, if you invoke Isolate::New() on a different thread than you intend to use the Isolate, you need to use v8::Locker to bind it to the thread you will use it on.

Furthermore, V8::Initialize needs to be invoked before Isolate::New is invoked.

Add IsGeneratorFunction and IsGeneratorObject checks to v8::Value: https://codereview.chromium.org/608503002
Rename ascii to one-byte where applicable: https://codereview.chromium.org/559913002

Breaking changes from 3.29 to 3.30

Move functions in v8::V8 that should be on v8::Isolate: https://codereview.chromium.org/652193006
Remove v8stdint.h: https://codereview.chromium.org/670673002
Remove deprecated Ascii-related identifiers from v8.h: https://codereview.chromium.org/665883002
Remove v8::Object::IsDirty(): https://codereview.chromium.org/670703002/
Remove PersistentBase::ClearAndLeak: https://codereview.chromium.org/635513002

Breaking changes from 3.30 to 4.1

Rename v8::Exception::GetMessage to CreateMessage: CL

Breaking changes from 4.1 to 4.2

Remove declarative accessors: https://codereview.chromium.org/834443004

The API was never finished, and we decided to stop working on it. Embedders should use the regular accessors API

Remove support for signatures with arguments: https://codereview.chromium.org/848173002

Embedders need to verify the types of the arguments themselves in the callback.

Remove ForceDelete: https://codereview.chromium.org/854493004
Remove undetectable strings: https://codereview.chromium.org/916753002

Breaking changes from 4.2 to 4.3

Remove v8::Isolate::ClearInterrupt: https://codereview.chromium.org/1032623007
Deprecate v8::Isolate::IdleNotification

Use v8::Isolate::IdleNotificationDeadline instead.

Rename UniquePersistent to Global and give it full move semantics: https://codereview.chromium.org/980173003 and https://codereview.chromium.org/978783002
Convert all APIs that can fail due to exceptions to return Maybe<> or MaybeLocal<> and take a Context argument: https://code.google.com/p/v8/issues/detail?id=3929

Breaking changes from 4.3 to 4.4

TODO

Breaking changes from 4.4 to 4.5

TODO