Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

repl: Assignment of _ allowed with warning #5535

Closed
wants to merge 6 commits into
base: master
from

Conversation

Projects
None yet
9 participants
@lance
Copy link
Contributor

lance commented Mar 2, 2016

Pull Request check-list

  • Does make -j8 test (UNIX) or vcbuild test nosign (Windows) pass with
    this change (including linting)?
  • Is the commit message formatted according to CONTRIBUTING.md?
  • If this change fixes a bug (or a performance problem), is a regression
    test (or a benchmark) included?
  • Is a documentation update included (if this change modifies
    existing APIs, or introduces new ones)?

If acceptable, I can add a PR for the REPL documentation.

Affected core subsystem(s)

repl

Description of change

This commit addresses #5431 by
changing the way that the repl handles assignment to the global _
variable.

Prior to this commit, node sets the result of the last expression
evaluated in the repl to _. This causes problems for users of
underscore, lodash and other packages where it is common to assign
_ to the package, e.g. _ = require('lodash');.

Changes in this commit now result in the following behavior.

  • If unassigned on the repl, _ continues to refer to the last
    evaluated expression.
  • If assigned, the default behavior of assigning _ to the last
    evaluated expression is disabled, and _ now references whatever
    value was explicitly set. A warning is issued on the repl -
    'expression assignment to _ now disabled'.
  • If _ is assigned multiple times, the warning is only displayed once.
  • When .clear is executed in the repl, _ continues to refer to its
    most recent value, whatever that is (this is per existing behavior).
    If _ had been explicitly set prior to .clear it will not change
    again with the evaluation of the next expression.

@mscdex mscdex added the repl label Mar 2, 2016

@cjihrig

View changes

lib/repl.js Outdated
@@ -471,7 +473,7 @@ function REPLServer(prompt,
// the second argument to this function is there, print it.
arguments.length === 2 &&
(!self.ignoreUndefined || ret !== undefined)) {
self.context._ = ret;
if (self.setLast) self.last = ret;

This comment has been minimized.

@cjihrig

cjihrig Mar 2, 2016

Contributor

Can you split this across two lines please.

@cjihrig

View changes

test/parallel/test-repl-underscore.js Outdated
output: outputStream
});

r.write('_;\n');

This comment has been minimized.

@cjihrig

cjihrig Mar 2, 2016

Contributor

It would be useful to mix some let variables into this test.

@cjihrig

View changes

test/parallel/test-repl-underscore.js Outdated
r.write('_;\n');
r.write('_ = 40;\n');
r.write('_;\n');
r.resetContext();

This comment has been minimized.

@cjihrig

cjihrig Mar 2, 2016

Contributor

Shouldn't resetContext() reset this behavior?

This comment has been minimized.

@lance

lance Mar 2, 2016

Author Contributor

I was not sure if it should or not, which is why I noted it in my commit message. On master, the current behavior is that _ is unmodified when the context is reset. With this commit, the value is still unmodified as before, but the behavioral change remains as well. It's not clear to me whether the behavior should be reset.

This comment has been minimized.

@cjihrig

cjihrig Mar 2, 2016

Contributor

I think that behavior depends on the value of the useGlobal setting.

This comment has been minimized.

@lance

lance Mar 2, 2016

Author Contributor

OK, I will address this.

@silverwind

View changes

lib/repl.js Outdated
@@ -545,6 +547,8 @@ REPLServer.prototype.createContext = function() {
context.module = module;
context.require = require;

const repl = this;

This comment has been minimized.

@silverwind

silverwind Mar 2, 2016

Contributor

Maybe get rid of this and use arrow functions below? (Three in total)

@silverwind

View changes

lib/repl.js Outdated
@@ -205,6 +205,8 @@ function REPLServer(prompt,
self.useGlobal = !!useGlobal;
self.ignoreUndefined = !!ignoreUndefined;
self.replMode = replMode || exports.REPL_MODE_SLOPPY;
self.setLast = true;
self.last = undefined;

This comment has been minimized.

@silverwind

silverwind Mar 2, 2016

Contributor

setLast isn't immediately obvious to me. Maybe use self.underscoreAssigned = false? Maybe it's even possible to do with a single added property.

@silverwind

This comment has been minimized.

Copy link
Contributor

silverwind commented Mar 2, 2016

Thanks for doing this!

@jasnell jasnell added the semver-major label Mar 3, 2016

@jasnell

This comment has been minimized.

Copy link
Member

jasnell commented Mar 3, 2016

hmmm... I'm not yet convinced that this is a good idea. Perhaps what we ultimately need is an alternative to _ for holding the result of the last expression and deprecate the use of _ for this purpose? Not sure what else would work tho.

@lance

This comment has been minimized.

Copy link
Contributor Author

lance commented Mar 3, 2016

Added a commit to address @silverwind and @cjihrig comments.

@lance

This comment has been minimized.

Copy link
Contributor Author

lance commented Mar 3, 2016

@jasnell I think the existing behavior definitely needs to change. Or at a minimum the documentation needs to clearly reflect how it currently works, since underscore and lodash are so widely used and the defacto naming convention for these packages is _. In any case, I think there's pretty widespread agreement that the combination of existing behavior and documentation now is not ideal.

An alternative to this implementation would be to allow for environment variables or other initializing values to determine the behavior. E.g.

var repl = require('repl');
var r = repl.start( { assignUnderscore: false } );

Or on the command line:

$ NODE_REPL_ASSIGN_UNDERSCORE=false node

When not set to false, if _ is explicitly set by assignment, then throw an exception.

Wrt an alternative to _ for holding the result of the last expression, I think @bnoordhuis summed it up well: #5431 (comment). In my opinion, the default behavior of assigning _ to the last evaluated expression is time-honored and shouldn't change as a default, but there does need to be a way to set _ and have the repl behave reasonably.

@jasnell

This comment has been minimized.

Copy link
Member

jasnell commented Mar 3, 2016

I think I'd be far more comfortable with the approach of disallowing assignment to _ unless a command line flag or option was set explicitly. Doing so would discourage overloading _ even if it does run counter to the lodash/underscore usage conventions.

@rvagg

This comment has been minimized.

Copy link
Member

rvagg commented Mar 3, 2016

I don't really have much of an opinion on this cause I've never had a use for _, but my very uninformed guess is that even those few people who know what _, not many of them actually care about it or actively use it. I'm testing that here: https://twitter.com/NodeSource/status/705514998341226496 (I'm not suggesting that the outcome of a Twitter poll should determine the path forward here at all, it should be very interesting though!).

@lance

This comment has been minimized.

Copy link
Contributor Author

lance commented Mar 4, 2016

@jasnell by "disallowing", do you mean just roll with the existing behavior (no warning, overwritten on next expression)? Or do you mean throwing an exception, or displaying a warning?

@lance

This comment has been minimized.

Copy link
Contributor Author

lance commented Mar 4, 2016

@jasnell after giving this more thought, I have to disagree with you. Look at this from a usability perspective. Adding an option that is off by default doesn't help people who get bit by this - underscore/lodash users. They'll spend at least a little bit of time before they discover the option. Issuing a warning in the REPL and telling the user to start over and set the option is one approach to eliminating this pain. But I think another, better, approach is to let users set it, but warn them it won't be further set by the REPL.

I can submit an alternative PR that handles it with an option/env, but I can't see the justification for doing it that way. Assuming the majority of people don't know the option exists, how many people will helped with this PR vs. how many people will be inconvenienced by adding it as an option. Sure, twitter polls shouldn't be the reason for a change, but @rvagg's poll definitely supports this PR.

Can you explain what problems you see with this approach? Users who already know about _ behavior, whether they use it or not, won't be affected because they already are not in the habit of setting it. Users who don't know about _ behavior expect it to be available for lodash or whatever, and will have a better/smoother experience.

@jasnell

This comment has been minimized.

Copy link
Member

jasnell commented Mar 4, 2016

I can live with this. I simply tend to take a conservative approach to
changing existing behaviors.
On Mar 4, 2016 3:24 PM, "Lance Ball" notifications@github.com wrote:

@jasnell https://github.com/jasnell after giving this more thought, I
have to disagree with you. Look at this from a usability perspective.
Adding an option that is off by default doesn't help people who get bit by
this - underscore/lodash users. They'll spend at least a little bit of time
before they discover the option. Issuing a warning in the REPL and telling
the user to start over and set the option is one approach to eliminating
this pain. But I think another, better, approach is to let users set it,
but warn them it won't be further set by the REPL.

I can submit an alternative PR that handles it with an option/env, but I
can't see the justification for doing it that way. Assuming the majority of
people don't know the option exists, how many people will helped with this
PR vs. how many people will be inconvenienced by adding it as an option.
Sure, twitter polls shouldn't be the reason for a change, but @rvagg
https://github.com/rvagg's poll definitely supports this PR.

Can you explain what problems you see with this approach? Users who
already know about _ behavior, whether they use it or not, won't be
affected because they already are not in the habit of setting it. Users who
don't know about _ behavior expect it to be available for lodash or
whatever, and will have a better/smoother experience.


Reply to this email directly or view it on GitHub
#5535 (comment).

@lance

This comment has been minimized.

Copy link
Contributor Author

lance commented Mar 5, 2016

Totally understand. Thanks for hearing me out.

@silverwind

This comment has been minimized.

Copy link
Contributor

silverwind commented Mar 7, 2016

LGTM

CI seems currently down, will start one once it's up again.

@Fishrock123

This comment has been minimized.

Copy link
Member

Fishrock123 commented Mar 7, 2016

Haven't there been like 3 PRs for this? What is the status of the others?

@lance

This comment has been minimized.

Copy link
Contributor Author

lance commented Mar 7, 2016

@Fishrock123 I have seen this #5438 which was closed. It did not handle assignment, really, other than a warning. And this #5438 which addresses assigning _ as a const, and the behavior is a subset of this PR. If there are others, I am unaware of them.

@tuures

This comment has been minimized.

Copy link

tuures commented Mar 10, 2016

Hello! Lodash is the most depended upon npm package and I'd love to see the current behaviour change. Either by making the variable name configurable or by making it more compatible like this PR. 👍

@silverwind

This comment has been minimized.

Copy link
Contributor

silverwind commented Mar 10, 2016

CI is still giving me 504 Gateway Time-out. @nodejs/build anyone know what's up?

@rvagg

This comment has been minimized.

Copy link
Member

rvagg commented Mar 10, 2016

@silverwind that's a Jenkins thing .. I think it happens on active jobs that have lots of history. Keep trying and it should load. I'm not sure what we can do about it though.

java-javascript sm

@silverwind

This comment has been minimized.

Copy link
Contributor

silverwind commented Mar 10, 2016

@rvagg indeed, suddenly it loaded instantly. Here we go:

https://ci.nodejs.org/job/node-test-pull-request/1894/

@jbergstroem

This comment has been minimized.

Copy link
Member

jbergstroem commented Mar 10, 2016

I'll have a housecleaning at jenkins hq done within the week.

@silverwind

This comment has been minimized.

Copy link
Contributor

silverwind commented Mar 10, 2016

CI is green, @jasnell @cjihrig can you sign this off too?

@jasnell

This comment has been minimized.

Copy link
Member

jasnell commented Mar 10, 2016

LGTM

@cjihrig

View changes

doc/api/repl.markdown Outdated
@@ -86,6 +86,9 @@ The special variable `_` (underscore) contains the result of the last expression
4
```

Explicitly setting `_` will disable this behavior. To re-enable auto-assigning
`_`, you will need to reset the context. To do this, type `.clear`.

This comment has been minimized.

@cjihrig

cjihrig Mar 11, 2016

Contributor

Can you phrase this as:

Explicitly setting _ will disable this behavior until the context is reset.

@cjihrig

View changes

test/parallel/test-repl-underscore.js Outdated
testResetContext
];

tests.forEach(function(test) {

This comment has been minimized.

@cjihrig

cjihrig Mar 11, 2016

Contributor

This seems unnecessary. Couldn't you just call the three test cases.

This comment has been minimized.

@lance

lance Mar 11, 2016

Author Contributor

Sure - I was just modeling this on other tests in the repo.

@cjihrig

This comment has been minimized.

Copy link
Contributor

cjihrig commented Mar 11, 2016

A test of magic mode that mixes let and var together would be good to have.

lance added some commits Mar 2, 2016

repl: Assignment of _ allowed with warning
This commit addresses #5431 by
changing the way that the repl handles assignment to the global _
variable.

Prior to this commit, node sets the result of the last expression
evaluated in the repl to `_`. This causes problems for users of
underscore, lodash and other packages where it is common to assign
`_` to the package, e.g. `_ = require('lodash');`.

Changes in this commit now result in the following behavior.

- If unassigned on the repl, `_` continues to refer to the last
  evaluated expression.
- If assigned, the default behavior of assigning `_` to the last
  evaluated expression is disabled, and `_` now references whatever
  value was explicitly set. A warning is issued on the repl -
  'expression assignment to _ now disabled'.
- If `_` is assigned multiple times, the warning is only displayed once.
- When `.clear` is executed in the repl, `_` continues to refer to its
  most recent value, whatever that is (this is per existing behavior).
  If `_` had been explicitly set prior to `.clear` it will not change
  again with the evaluation of the next expression.
repl: Reset underscore assignment on .clear
Ensures that, when invoking `.clear` in a repl, the underscore
assignment behavior is reset, so that its value is again set to the most
recently evaluated expression.

Additional tests have been added for the behavior of `let` when underscore
assignment has been disabled.
doc: Document `_` behavior in REPL.
Adds a line of text about the behavior of `_` in the REPL.
repl: Test `_` behavior in `REPL_MODE_MAGIC` mode.
Add a test based on feedback from @cjihrig. Ensures that when used
in 'magic' mode, the behavior of `_` assignment is consistent with
other modes and user expectations.
repl: Change warning text to a complete sentence.
When a REPL user explicitly assigns `_` the warning text now reads,
"Expression assignment to _ now disabled.".

Also removed an unnecessary parameter from a test helper function.
@silverwind

This comment has been minimized.

@silverwind

This comment has been minimized.

Copy link
Contributor

silverwind commented Mar 18, 2016

Landed in ad8257f, thanks!

@silverwind silverwind closed this Mar 18, 2016

silverwind added a commit that referenced this pull request Mar 18, 2016

repl: Assignment of _ allowed with warning
This commit addresses #5431 by
changing the way that the repl handles assignment to the global _
variable.

Prior to this commit, node sets the result of the last expression
evaluated in the repl to `_`. This causes problems for users of
underscore, lodash and other packages where it is common to assign
`_` to the package, e.g. `_ = require('lodash');`.

Changes in this commit now result in the following behavior.

- If unassigned on the repl, `_` continues to refer to the last
  evaluated expression.
- If assigned, the default behavior of assigning `_` to the last
  evaluated expression is disabled, and `_` now references whatever
  value was explicitly set. A warning is issued on the repl -
  'expression assignment to _ now disabled'.
- If `_` is assigned multiple times, the warning is only displayed once.
- When `.clear` is executed in the repl, `_` continues to refer to its
  most recent value, whatever that is (this is per existing behavior).
  If `_` had been explicitly set prior to `.clear` it will not change
  again with the evaluation of the next expression.

PR-URL: #5535
Fixes: #5431
Reviewed-By: Roman Reiss <me@silverwind.io>
Reviewed-By: James M Snell <jasnell@gmail.com>

@jasnell jasnell referenced this pull request Apr 19, 2016

Closed

What is new in v6? #6264

jasnell added a commit that referenced this pull request Apr 26, 2016

2016-04-26, Version 6.0.0 (Current) Release
The following significant (semver-major) changes have been made since the
previous Node v5.0.0 release.

* Buffer
  * New Buffer constructors have been added
    [#4682](#4682)
  * Previously deprecated Buffer APIs are removed
    [#5048](#5048),
    [#4594](#4594)
  * Improved error handling [#4514](#4514)
* Cluster
  * Worker emitted as first argument in 'message' event
    [#5361](#5361).
* Crypto
  * Improved error handling [#3100](#3100),
    [#5611](#5611)
  * Simplified Certificate class bindings
    [#5382](#5382)
  * Improved control over FIPS mode
    [#5181](#5181)
  * pbkdf2 digest overloading is deprecated
    [#4047](#4047)
* Dependencies
  * Reintroduce shared c-ares build support
    [#5775](#5775).
  * V8 updated to 5.0.71.31 [#6111](#6111).
* DNS
  * Add resolvePtr API to query plain DNS PTR records
    [#4921](#4921).
* Domains
  * Clear stack when no error handler
  [#4659](#4659).
* File System
  * The `fs.realpath()` and `fs.realpathSync()` methods have been updated
    to use a more efficient libuv implementation. This change includes the
    removal of the `cache` argument and the method can throw new errors
    [#3594](#3594)
  * FS apis can now accept and return paths as Buffers
    [#5616](#5616).
  * Error handling and type checking improvements
    [#5616](#5616),
    [#5590](#5590),
    [#4518](#4518),
    [#3917](#3917).
  * fs.read's string interface is deprecated
    [#4525](#4525)
* HTTP
  * 'clientError' can now be used to return custom errors from an
    HTTP server [#4557](#4557).
* Modules
  * Current directory is now prioritized for local lookups
    [#5689](#5689)
  * Symbolic links are preserved when requiring modules
    [#5950](#5950)
* Net
  * DNS hints no longer implicitly set
    [#6021](#6021).
  * Improved error handling and type checking
    [#5981](#5981),
    [#5733](#5733),
    [#2904](#2904)
* Path
  * Improved type checking [#5348](#5348).
* Process
  * Introduce process warnings API
    [#4782](#4782).
  * Throw exception when non-function passed to nextTick
    [#3860](#3860).
* Readline
  * Emit key info unconditionally
    [#6024](#6024)
* REPL
  * Assignment to `_` will emit a warning.
    [#5535](#5535)
* Timers
  * Fail early when callback is not a function
    [#4362](#4362)
* TLS
  * Rename 'clientError' to 'tlsClientError'
    [#4557](#4557)
  * SHA1 used for sessionIdContext
    [#3866](#3866)
* TTY
  * Previously deprecated setRawMode wrapper is removed
    [#2528](#2528).
* Util
  * Changes to Error object formatting
    [#4582](#4582).
* Windows
  * Windows XP and Vista are no longer supported
    [#5167](#5167),
    [#5167](#5167).

jasnell added a commit that referenced this pull request Apr 26, 2016

2016-04-26, Version 6.0.0 (Current) Release
The following significant (semver-major) changes have been made since the
previous Node v5.0.0 release.

* Buffer
  * New Buffer constructors have been added
    [#4682](#4682)
  * Previously deprecated Buffer APIs are removed
    [#5048](#5048),
    [#4594](#4594)
  * Improved error handling [#4514](#4514)
* Cluster
  * Worker emitted as first argument in 'message' event
    [#5361](#5361).
* Crypto
  * Improved error handling [#3100](#3100),
    [#5611](#5611)
  * Simplified Certificate class bindings
    [#5382](#5382)
  * Improved control over FIPS mode
    [#5181](#5181)
  * pbkdf2 digest overloading is deprecated
    [#4047](#4047)
* Dependencies
  * Reintroduce shared c-ares build support
    [#5775](#5775).
  * V8 updated to 5.0.71.31 [#6111](#6111).
* DNS
  * Add resolvePtr API to query plain DNS PTR records
    [#4921](#4921).
* Domains
  * Clear stack when no error handler
  [#4659](#4659).
* File System
  * The `fs.realpath()` and `fs.realpathSync()` methods have been updated
    to use a more efficient libuv implementation. This change includes the
    removal of the `cache` argument and the method can throw new errors
    [#3594](#3594)
  * FS apis can now accept and return paths as Buffers
    [#5616](#5616).
  * Error handling and type checking improvements
    [#5616](#5616),
    [#5590](#5590),
    [#4518](#4518),
    [#3917](#3917).
  * fs.read's string interface is deprecated
    [#4525](#4525)
* HTTP
  * 'clientError' can now be used to return custom errors from an
    HTTP server [#4557](#4557).
* Modules
  * Current directory is now prioritized for local lookups
    [#5689](#5689)
  * Symbolic links are preserved when requiring modules
    [#5950](#5950)
* Net
  * DNS hints no longer implicitly set
    [#6021](#6021).
  * Improved error handling and type checking
    [#5981](#5981),
    [#5733](#5733),
    [#2904](#2904)
* Path
  * Improved type checking [#5348](#5348).
* Process
  * Introduce process warnings API
    [#4782](#4782).
  * Throw exception when non-function passed to nextTick
    [#3860](#3860).
* Readline
  * Emit key info unconditionally
    [#6024](#6024)
* REPL
  * Assignment to `_` will emit a warning.
    [#5535](#5535)
* Timers
  * Fail early when callback is not a function
    [#4362](#4362)
* TLS
  * Rename 'clientError' to 'tlsClientError'
    [#4557](#4557)
  * SHA1 used for sessionIdContext
    [#3866](#3866)
* TTY
  * Previously deprecated setRawMode wrapper is removed
    [#2528](#2528).
* Util
  * Changes to Error object formatting
    [#4582](#4582).
* Windows
  * Windows XP and Vista are no longer supported
    [#5167](#5167),
    [#5167](#5167).

jasnell added a commit that referenced this pull request Apr 26, 2016

2016-04-26, Version 6.0.0 (Current) Release
The following significant (semver-major) changes have been made since the
previous Node v5.0.0 release.

* Buffer
  * New Buffer constructors have been added
    [#4682](#4682)
  * Previously deprecated Buffer APIs are removed
    [#5048](#5048),
    [#4594](#4594)
  * Improved error handling [#4514](#4514)
* Cluster
  * Worker emitted as first argument in 'message' event
    [#5361](#5361).
* Crypto
  * Improved error handling [#3100](#3100),
    [#5611](#5611)
  * Simplified Certificate class bindings
    [#5382](#5382)
  * Improved control over FIPS mode
    [#5181](#5181)
  * pbkdf2 digest overloading is deprecated
    [#4047](#4047)
* Dependencies
  * Reintroduce shared c-ares build support
    [#5775](#5775).
  * V8 updated to 5.0.71.31 [#6111](#6111).
* DNS
  * Add resolvePtr API to query plain DNS PTR records
    [#4921](#4921).
* Domains
  * Clear stack when no error handler
  [#4659](#4659).
* File System
  * The `fs.realpath()` and `fs.realpathSync()` methods have been updated
    to use a more efficient libuv implementation. This change includes the
    removal of the `cache` argument and the method can throw new errors
    [#3594](#3594)
  * FS apis can now accept and return paths as Buffers
    [#5616](#5616).
  * Error handling and type checking improvements
    [#5616](#5616),
    [#5590](#5590),
    [#4518](#4518),
    [#3917](#3917).
  * fs.read's string interface is deprecated
    [#4525](#4525)
* HTTP
  * 'clientError' can now be used to return custom errors from an
    HTTP server [#4557](#4557).
* Modules
  * Current directory is now prioritized for local lookups
    [#5689](#5689)
  * Symbolic links are preserved when requiring modules
    [#5950](#5950)
* Net
  * DNS hints no longer implicitly set
    [#6021](#6021).
  * Improved error handling and type checking
    [#5981](#5981),
    [#5733](#5733),
    [#2904](#2904)
* OS X
  * MACOSX_DEPLOYMENT_TARGET has been bumped up to 10.7
    [#6402](#6402).
* Path
  * Improved type checking [#5348](#5348).
* Process
  * Introduce process warnings API
    [#4782](#4782).
  * Throw exception when non-function passed to nextTick
    [#3860](#3860).
* Readline
  * Emit key info unconditionally
    [#6024](#6024)
* REPL
  * Assignment to `_` will emit a warning.
    [#5535](#5535)
* Timers
  * Fail early when callback is not a function
    [#4362](#4362)
* TLS
  * Rename 'clientError' to 'tlsClientError'
    [#4557](#4557)
  * SHA1 used for sessionIdContext
    [#3866](#3866)
* TTY
  * Previously deprecated setRawMode wrapper is removed
    [#2528](#2528).
* Util
  * Changes to Error object formatting
    [#4582](#4582).
* Windows
  * Windows XP and Vista are no longer supported
    [#5167](#5167),
    [#5167](#5167).

jasnell added a commit that referenced this pull request Apr 26, 2016

2016-04-26, Version 6.0.0 (Current) Release
The following significant (semver-major) changes have been made since the
previous Node v5.0.0 release.

* Buffer
  * New Buffer constructors have been added
    [#4682](#4682)
  * Previously deprecated Buffer APIs are removed
    [#5048](#5048),
    [#4594](#4594)
  * Improved error handling [#4514](#4514)
* Cluster
  * Worker emitted as first argument in 'message' event
    [#5361](#5361).
* Crypto
  * Improved error handling [#3100](#3100),
    [#5611](#5611)
  * Simplified Certificate class bindings
    [#5382](#5382)
  * Improved control over FIPS mode
    [#5181](#5181)
  * pbkdf2 digest overloading is deprecated
    [#4047](#4047)
* Dependencies
  * Reintroduce shared c-ares build support
    [#5775](#5775).
  * V8 updated to 5.0.71.31 [#6111](#6111).
* DNS
  * Add resolvePtr API to query plain DNS PTR records
    [#4921](#4921).
* Domains
  * Clear stack when no error handler
  [#4659](#4659).
* File System
  * The `fs.realpath()` and `fs.realpathSync()` methods have been updated
    to use a more efficient libuv implementation. This change includes the
    removal of the `cache` argument and the method can throw new errors
    [#3594](#3594)
  * FS apis can now accept and return paths as Buffers
    [#5616](#5616).
  * Error handling and type checking improvements
    [#5616](#5616),
    [#5590](#5590),
    [#4518](#4518),
    [#3917](#3917).
  * fs.read's string interface is deprecated
    [#4525](#4525)
* HTTP
  * 'clientError' can now be used to return custom errors from an
    HTTP server [#4557](#4557).
* Modules
  * Current directory is now prioritized for local lookups
    [#5689](#5689)
  * Symbolic links are preserved when requiring modules
    [#5950](#5950)
* Net
  * DNS hints no longer implicitly set
    [#6021](#6021).
  * Improved error handling and type checking
    [#5981](#5981),
    [#5733](#5733),
    [#2904](#2904)
* OS X
  * MACOSX_DEPLOYMENT_TARGET has been bumped up to 10.7
    [#6402](#6402).
* Path
  * Improved type checking [#5348](#5348).
* Process
  * Introduce process warnings API
    [#4782](#4782).
  * Throw exception when non-function passed to nextTick
    [#3860](#3860).
* Readline
  * Emit key info unconditionally
    [#6024](#6024)
* REPL
  * Assignment to `_` will emit a warning.
    [#5535](#5535)
* Timers
  * Fail early when callback is not a function
    [#4362](#4362)
* TLS
  * Rename 'clientError' to 'tlsClientError'
    [#4557](#4557)
  * SHA1 used for sessionIdContext
    [#3866](#3866)
* TTY
  * Previously deprecated setRawMode wrapper is removed
    [#2528](#2528).
* Util
  * Changes to Error object formatting
    [#4582](#4582).
* Windows
  * Windows XP and Vista are no longer supported
    [#5167](#5167),
    [#5167](#5167).

jasnell added a commit that referenced this pull request Apr 26, 2016

2016-04-26, Version 6.0.0 (Current) Release
The following significant (semver-major) changes have been made since the
previous Node v5.0.0 release.

* Buffer
  * New Buffer constructors have been added
    [#4682](#4682)
  * Previously deprecated Buffer APIs are removed
    [#5048](#5048),
    [#4594](#4594)
  * Improved error handling [#4514](#4514)
* Cluster
  * Worker emitted as first argument in 'message' event
    [#5361](#5361).
* Crypto
  * Improved error handling [#3100](#3100),
    [#5611](#5611)
  * Simplified Certificate class bindings
    [#5382](#5382)
  * Improved control over FIPS mode
    [#5181](#5181)
  * pbkdf2 digest overloading is deprecated
    [#4047](#4047)
* Dependencies
  * Reintroduce shared c-ares build support
    [#5775](#5775).
  * V8 updated to 5.0.71.31 [#6111](#6111).
* DNS
  * Add resolvePtr API to query plain DNS PTR records
    [#4921](#4921).
* Domains
  * Clear stack when no error handler
  [#4659](#4659).
* File System
  * The `fs.realpath()` and `fs.realpathSync()` methods have been updated
    to use a more efficient libuv implementation. This change includes the
    removal of the `cache` argument and the method can throw new errors
    [#3594](#3594)
  * FS apis can now accept and return paths as Buffers
    [#5616](#5616).
  * Error handling and type checking improvements
    [#5616](#5616),
    [#5590](#5590),
    [#4518](#4518),
    [#3917](#3917).
  * fs.read's string interface is deprecated
    [#4525](#4525)
* HTTP
  * 'clientError' can now be used to return custom errors from an
    HTTP server [#4557](#4557).
* Modules
  * Current directory is now prioritized for local lookups
    [#5689](#5689)
  * Symbolic links are preserved when requiring modules
    [#5950](#5950)
* Net
  * DNS hints no longer implicitly set
    [#6021](#6021).
  * Improved error handling and type checking
    [#5981](#5981),
    [#5733](#5733),
    [#2904](#2904)
* OS X
  * MACOSX_DEPLOYMENT_TARGET has been bumped up to 10.7
    [#6402](#6402).
* Path
  * Improved type checking [#5348](#5348).
* Process
  * Introduce process warnings API
    [#4782](#4782).
  * Throw exception when non-function passed to nextTick
    [#3860](#3860).
* Readline
  * Emit key info unconditionally
    [#6024](#6024)
* REPL
  * Assignment to `_` will emit a warning.
    [#5535](#5535)
* Timers
  * Fail early when callback is not a function
    [#4362](#4362)
* TLS
  * Rename 'clientError' to 'tlsClientError'
    [#4557](#4557)
  * SHA1 used for sessionIdContext
    [#3866](#3866)
* TTY
  * Previously deprecated setRawMode wrapper is removed
    [#2528](#2528).
* Util
  * Changes to Error object formatting
    [#4582](#4582).
* Windows
  * Windows XP and Vista are no longer supported
    [#5167](#5167),
    [#5167](#5167).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.