Releases: nanomsg/nng
1.0.0 Release Candidate 1
This is a release candidate. At this point we consider ourselves ready for 1.0.0 final release. This does have some changes in it, so we will wait a little bit before the final release:
Changes since beta.2:
- Honors BUILD_SHARED_LIBS CMake setting (see below)
- Support for Android added
- Instructions for building with Xcode for iOS (no code changes were needed)
- Support for enabling sanitizers (address, thread, memory, undefined) via NNG_SANITIZER
- Fixes for bugs found with sanitizers (use-after-free, leaks)
- Simplified synchronization primitives on POSIX (no fallback needed)
- CMake exported target (easier integration within CMake projects) & demos
- Shared library symbol visibility is reduced by default
- Documentation updates (various) found during editing
Essentially this project should be easier to use, provided you have a sane CMake installation. It attempts to be a well-behaved citizen in CMake-land, so should be easier to nest into other projects.
The one very important change is that we use the platform-specific defaults to decide whether to build shared or static libraries, and only build either shared or static -- not both. The determination of which to build is driven by the BUILD_SHARED_LIBS macro, which is user-accessible via CMake. This is more closely aligned with usual CMake practice.
Also, if you were using our library to access private symbols, that is a no-no, and may not work anymore, as the shared library is now more careful to only export the symbols we have intended for external use. (Build and use a static library if you need to work around that, but you really should only be using the public symbols.) This was already the default behavior for Windows.
Second beta release of 1.0.0
This is the second beta release of NNG 1.0.0.
NNG is now on a functional code freeze. Furthermore, the ABI is now frozen (library version 1.0.0).
We will very carefully evaluate any new bugs found before this is released for GA; only severe bugs will be considered for integration at this time. If such a bug is found and a fix is required, we will release another beta release.
Permitted changes include test programs, demonstration programs, and documentation fixes and improvements. Also, minor changes to improve the release process, packaging, and non-runtime aspects of the library may be permitted, subject to review.
We expect to release one more change, which will be a release candidate (RC1) before final release.
More details about release plans will be posted to the mailing list.
What's changed since 1.0.0-beta.1?
- Library ABI is now 1.0.0
- Websocket transport now honors NNG_OPT_RECVMAXSIZE
- Legacy mode headers are now more compatible with legacy nanomsg
- SUB protocol is more aggressive at dropping undeliverable messages
- Compat mode supports NN_TCP_NODELAY
- NNG_OPT_TCPNODELAY and NNG_OPT_KEEPALIVE defaults are set at socket creation
- Bug fix in the websocket URL parsing (if no path is given to websocket URL)
- SO_REUSEADDR is now set on listening TCP sockets on POSIX systems
- Various improvements and corrections to documentation
Thanks for your continued testing and support!
First beta release of 1.0.0
Good news! NNG 1.0.0 has reached development complete, and is now entering its first beta period.
During this beta period, no new features will be introduced into the this release. Furthermore, changes to the functional code of the library itself will be restricted to bug fixes. Any bugs requiring non-trivial changes to the library will necessitate another beta cycle before entering the release candidate phase.
Permitted changes include test programs, demonstration programs, and documentation fixes and improvements. Also, some changes to improve the release process, packaging, and non-runtime aspects of the library are permissible.
What's new since 0.9.0?
- NNG_TCP_OPT_NODELAY option (and legacy compat)
- Socket, pipe, and similar types are now structural instead of integers
- Pipe notification callbacks. See nng_pipe_notify(3) for details.
- Peer identification option for IPC transport (see nng_ipc(7) for details.)
- Solaris and illumos support, including scalable port event based poller.
- New options to nngcat(1) to control repeat count and message size.
- Significant changes that should reduce lock contention and increase performance and scalability.
- New tcp4://, tcp6://, tls+tcp4://, and tls+tcp6:// scheme support. See nng_tcp(7) and nng_tls(7).
Numerous bugs have been fixed, supported by much more extensive testing and significant improvements to the test suite itself.
Thank you for helping us ensure the highest quality release by testing this out!
Version 0.9.0
The big change for this release is context support used for REQ/REP to SURVEYOR/RESPONDENT. With this change, there is very little reason for raw sockets to be used, except in creation of devices and obscure test and debug scenarios.
A few bugs, some serious, have been fixed -- most notably a serious regression in REQ/REP caused by the original context work -- this turned out to have sweeping ramifications, and small changes were made across the code base to resolve the key issue (which was the need to separate nni_aio_start into two separate functions, which are now nni_aio_begin and nni_aio_schedule. Note that these two functions are for internal use only.)
Additionally, the compatible API is now documented.
At this point we consider nng "feature complete" for a 1.0 release; we will be focusing on performance, bugs, test cases, and demonstration code for the rest of the lead-up to 1.0. (We do have post-1.0 features planned, of course!)
Note that there are still some edge case features missing from nng which are present in nanomsg -- statistics, pipe priorities, certain socket options (TCP_NODELAY for example), and security attributes (named pipes on Windows only). We may still add support for some of these missing things before 1.0 depending on risk assessment. Otherwise we will do them in the following release. (If any of these features are a stopper for you, and you are using them with nanomsg, please let us know!)
Version 0.8.0
This release has what should be the final breaking API changes prior to 1.0. Specifically, the RAW mode sockets are no longer established by NNG_OPT_RAW -- which has become a read-only option, but are instead created by new constructors, such as nng_req0_open_raw().
Additionally, this release introduces a major new capability -- contexts. The details of this are located in the nng_ctx(5) manual page, as well as an example. An example showing the use of contexts with the HTTP server API to create a REST API to REQ/REP gateway exists in the demo/rest directory. At the moment contexts are only available for REQ and REP protocols -- addition of support for contexts with SURVEYOR and RESPONDENT is planned for the next release.
Note that users of the REQ and REP protocols may notice differences in behavior around queueing and flow control -- in particular REQ will probably apply backpressure now, so that attempts to send requests will block if there are no pipes available (and the pollable status will reflect this.)
Significant performance improvements have been made -- users may see up to 20% better performance compared to 0.7.0, depending on numerous factors. More work in this area is still planned.
A number of other issues (bugs) have been fixed as well.
We would be especially grateful for any extra testing, especially of the REQ and REP protocols and the new context facility.
Version 0.7.0 Beta Release
This release has some breaking changes for users of properties such as NNG_OPT_RAW and NNG_OPT_PAIR1_POLY, as well as users of the ZeroTier transport.
Most of the other changes in this release amount to massive documentation improvements.
However, Linux now uses epoll(), thanks to a contribution by Liam Staskawicz, which should lead to greater scalability.
There is a new nng_sleep_aio() API, and a demo/async program that demonstrates using the async AIO features.
Please also note that the documentation on the website and on Leanpub has all been updated to reflect this.
We are getting much closer to a 1.0 release, so I'm really grateful for testing and review feedback!
Thanks!
Version 0.6.0 Beta Release
This release involves primarily bug fixes for the ZeroTier transport, and documentation updates.
Applications using the ZeroTier transport option NNG_ZT_NETWORK_STATUS should be aware that this option has changed; code updates will be required. See the nng_zerotier(7) man page for more details.
Version 0.5.0 Beta Release
This release adds the following:
- nngcat utility
- many manual pages
- kqueue based BSD poller (performance & scalability)
- public HTTP API
- Improvements to the TLS API
- Numerous bug fixes
We believe this release is getting reasonably close to being ready to stabilize for a public API.
Testing and review is requested!
Version 0.2.0 Beta Release
This version adds quite a lot since 0.1.0, but most notable is the addition of websocket (ws://) and websocket secure (wss://) support.
Please be careful and don't use this in production yet, but it is suitable for development and testing. There might still be API breakage in the future, but things are looking more and more stable now.
First pre-release.
This is the first "pre-release" of nng. A lot may still change (even the project name!), but most of the core functionality is now working well enough for us to post this for users to test against.
Please note that 0.1 means what it says -- you should not depend on this for anything, and we will probably break things in future releases -- there are no semantic version guarantees here.