vibe.d 0.7.27 release
vibe.d 0.7.27 release

Note that the integration code for std.concurrency
has been re-enabled with this release. This means that you can use std.concurrency
without worrying about blocking the event loop now. However, there are a few imcompatibilities between std.concurrency
and vibe.d's own version in vibe.core.concurrency
, such as std.concurrency
not supporting certain shared(T)
or Isolated!T
to be passed to spawned tasks. If you hit any issues that cannot be easily resolved, the usual vibe.d behavior is available in the form of "Compat" suffixed functions (i.e. sendCompat
, receiveCompat
etc.). But note that these functions operate on separate message queue structures, so mixing the "Compat" functions with non-"Compat" versions will not work.
Features and improvements
- Compiles on DMD frontend versions 2.066.0 up to 2.070.0
- Split up the library into sub packages - this prepares for a deeper split that is going to happen in the next release
- A lot of performance tuning went into the network and HTTP code, leading to a 50% increase in single-core HTTP performance and a lot more in the multi-threaded case over 0.7.26
- Marked more of the API
@safe
andnothrow
- Re-enabled the
std.concurrency
integration that went MIA a while ago -std.concurrency
can now be used transparently in vibe.d applications - issue #1343, pull #1345 - REST interface generator changes
- Added support for REST collections with natural D syntax using the new
Collection!I
type - pull #1268 - Implemented CORS support for the REST interface server (by Sebastian Koppe) - pull #1299
- Conversion errors for path parameters (e.g.
@path("/foo/:someparam")
) in REST interfaces now result in a 404 error instead of 500 - HTTP server/client changes
- The
URLRouter
now adds a"routerRootDir"
entry with the relative path to the router base directory toHTTPServerRequest.params
(by Steven Dwy) - pull #1301 - Added a WebSocket client implementation (by Kemonozume) - pull #1332
- Added the possibility to access cookie contents as a raw string
- The HTTP client now retries a request if a keep-alive connection gets closed before the response gets read
- Added
HTTPServerResponse.finalize
to manually force sending and finalization of the response - issue #1347 - Added
scope
callback based overloads ofswitchProtocol
inHTTPServerResponse
andHTTPClientResponse
- Added
ChunkedOutputStream.chunkExtensionCallback
to control HTTP chunk-extensions (by Manuel Frischknecht and Yannick Koechlin) - pull #1340 - Passing an empty string to
HTTPClientResponse.switchProtocol
now skips the "Upgrade" header validation - Enabled TCP no-delay in the HTTP server
- Redundant calls to
HTTPServerResponse.terminateSession
are now ignored instead of triggering an assertion - issue #472 - Added log output for newly registered HTTP virtual hosts - issue #1271
- The Markdown compiler now adds "id" attributes to headers to enable cross-referencing
- Added
getMarkdownOutline
, which returns a tree of sections in a Markdown document - Added
Path.relativeToWeb
, a version ofrelativeTo
with web semantics - Added
vibe.core.core.setupWorkerThreads
to customize the number of worker threads on startup (by Jens K. Mueller) - pull #1350 - Added support for parsing IPv6 URLs (by Mathias L. Baumann aka Marenz) - pull #1341
- Enabled TCP no-delay in the Redis client (by Etienne Cimon) - pull #1361
- Switch the
:javascript
Diet filter to use "application/json" as the content type - issue #717 NetworkAddress
now acceptsstd.socket.AddressFamily
constants in addition to theAF_
ones - issue #925- Added support for X509 authentication in the MongoDB client (by machindertech) - pull #1235
- Added
TCPListenOptions.reusePort
to enable port reuse as an OS supported means for load-balancing (by Soar Qin) - pull #1379
Bug fixes
- Fixed behavior of
ZlibInputStream
in case of premature end of input - issue #1116 - Fixed a memory leak in
ZlibInputStream
(by Etienne Cimon) - pull #1116 - Fixed a regression in the OpenSSL certificate validation code - issue #1325
- Fixed the behavior of
TCPConnection.waitForData
in all drivers - issue #1326 - Fixed a memory leak in
Libevent2Driver.connectTCP
on connection failure (by Etienne Cimon) - pull #1322, issue #1321 - Fixed concatenation of static and dynamic class attributes in Diet templates - issue #1312
- Fixed resource leaks in
connectTCP
for libevent when the task gets interrupted - issue #1331 - Fixed
ZlibInputStream
in case of the target buffer matching up exactly with the uncompressed data (by Ilya Lyubimov aka villytiger) - pull #1339 - Fixed some issues with triggering assertions on yielded tasks
- Fixed TLS SNI functionality in the HTTP server
- Fixed excessive CPU usage in the libasync driver (by Etienne Cimon) - pull #1348
- Fixed exiting multi-thread event loops for the libasync driver (by Etienne Cimon) - pull #1349
- Fixed the default number of worker threads to equal all logical cores in the system
- Fixed an assertion failure in the WebSocket server (by Ilya Yaroshenko aka 9il) - pull #1356, issue #1354
- Fixed a range violation error in
InotifyDirectoryWatcher
- issue #1364 - Fixed
readUntil
to not use the buffer returned byInputStream.peek()
after a call toInputStream.read()
- issue #960 - Disabled the case randomization feature of libevent's DNS resolver to work around issues with certain servers - pull #1366
- Fixed the behavior of multiple
runEventLoop
/exitEventLoop
calls in sequence for the win32 driver - Fixed reading response bodies for "Connection: close" connections without a "Content-Length" in the HTTP client - issue #604
- Fixed indentation of
:javascript
blocks in Diet templates - issue #837 - Fixed assertion failure in the win32 driver when sending files over TCP - issue #932
- Fixed
exitEventLoop
having no effect if called while the event loop is in the idle handler - Fixed an assertion failure in the libevent driver when actively closing a connection that is currently being read from - issue #1376
- Fixed a null-pointer dereference when
waitForData
gets called on a fully closed TCP connection - issue #1384 - Fixed a crash at exit caused by a bad module destructor call sequence when
std.parallelism.TaskPool
is used - issue #1374
Download
http://code.dlang.org/packages/vibe-d/0.7.27
http://vibed.org/download?file=vibed-0.7.27.zip
https://github.com/rejectedsoftware/vibe.d/tree/5415eeb60973eec78a70c37e0633798a0a085539
Comments for the post are currently disabled.
1 comments
Love it, thanks Sönke.