vibe.d 0.7.18 release
vibe.d 0.7.18 release

Tue, 26 Nov 2013The new release adds support for DMD 2.064 and contains an impressive number of almost 90 additions and bug fixes. Some notable improvements are a better serialization system, reworked WebSocket support, native MongoDB query sorting support and vastly improved stability of the HTTP client and other parts of the system.
Features and improvements
- Compiles using DMD 2.064 (and DMD 2.063.2)
- Added
vibe.data.serialization
with support for annotations to control serialization (replaces/extends the serialization code invibe.data.json
andvibe.data.bson
) - Added range based allocation free (de-)serialization for JSON strings and more efficient BSON serialization
- Added
File.isOpen
- Added a
ConnectionStream
interface from whichTCPConnection
andTaskPipe
now derive - Added
BsonDate.fromStdTime
and improve documentation to avoid time zone related bugs - Added a
TaskMutex.this(Object)
constructor to be able to use them as object monitors - Added a non-blocking (infinitely buffering) mode for
TaskPipe
- Added (de)serialization support for AAs with string serializable key types (with
toString
/fromString
methods) (by Daniel Davidson) - pull #333 - Added (de)serialization support for scalar types as associative array keys
- Added
setLogFormat
as a more flexible replacement forsetPlainLogging
- Added
MongoCollection.aggregate()
(by Jack Applegame) - pull #348 - Added
WebSocket.request
to enable access to the original HTTP request and add scoped web socket callbacks for avoiding GC allocations - Added
HTTPServerRequest.clientAddress
to get the full remote address including the port - issue #357 - Added
vibe.stream.wrapper.ProxyStream
to enable dynamically switching the underlying stream - Added
vibe.stream.wrapper.StreamInputRange
to provide a buffered input range interface for anInputStream
- Added
vibe.stream.wrapper.ConnectionProxyStream
that allows wrapping aConnectionStream
along with aStream
to allow forwarding connection specific functionality together with a wrapped stream - Added
URL
based overloads forHTTPServerResponse.redirect
andstaticRedirect
- Added
RedisClient.hset
(by Martin Mauchauffée aka moechofe) - pull #386 - Added a WebSockets example project
- Added
MongoCursor.sort
to allow sorted queries using the same syntax as other MongoDB drivers (by Jack Applegame) - pull #353 - Added random number generators suited for cryptographic applications, which is now used for session ID generation (by Ilya Shipunov) - pull #352, pull #364, issue #350
- Added parameter and return value modifier user attributes for the REST interface generator and refactor meta programming facilities (by Михаил Страшун aka Dicebot) - pull #340, pull #344, pull #349
- Added
vibe.stream.operations.pipeRealtime
for piping stream data with a defined maximum latency OutgoingWebSocketMessage
is now automatically finalizedHTTPServerResponse.switchProtocol
now returns aConnectionStream
to allow controlling the underlying TCP connectionHTTPServerResponse.startSession
now sets the "HttpOnly" attribute by default to better prevent session theft (by Ilya Shipunov) - issue #368, pull #373HTTPServerResponse.startSession
now automatically sets the "Secure" attribute by default when a HTTPS connection was used to initiate the session - issue #368- Implemented Scalate whitespace stripping syntax for Diet templates (by Jack Applegame) - pull #362
htmlAttribEscape
and friends now also escape single quotes (') - issue #377vibe.stream.operations.readAll()
now preallocates if possible- Optimized HTML escaping performance (by Martin Nowak) - pull #327
- Adjusted naming of
Bson.Type
andJson.Type
members for naming conventions render!()
for rendering Diet templates is assumed to be safe starting with DMD 2.064- Improved
Json
usability by enabling~=
and some more use cases for~
- Added a workaround for excessive compile times for large static arrays (by Martin Nowak) - pull #341
- Improved the HTTP reverse proxy by handling HEAD requests correctly, avoiding GC allocations and optionally disabling transfer compression
HashMap
now moves elements when resizing instead of copying- Added a new mode for
parseRFC5322Header
that outputs multiple fields with the same value as separate fields instead of concatenating them as per RFC 822 and use the new behavior for the HTTP server - issue #380 ThreadedFileStream
now usesyield()
to avoid stalling the event loop- Improved the performance of
yield()
by using a singly linked list instead of a dynamic array to store yielded tasks (incl. bugfix by Martin Nowak, see pull #402 and issue #401)
Bug fixes
- Fixed wrongly triggering assertions on Windows when
INVALID_SOCKET
is returned - Fixed issues with
vibe.stream.zlib
by reimplementing everything using zlib directly instead ofstd.zlib
- Fixed an exception in the HTTP file server when downloading a compressed file with no content transfer encoding requested
- Fixed compilation in release and unit test modes
- Fixed a data corruption bug caused by changed alignment in memory returned by
GC.realloc
- Fixed the libevent driver to avoid infinite buffering of output data - issue #191
- Fixed (de)serialization of BSON/JSON with (to/from)(String/Json) methods (by Jack Applegame) - pull #309
- Fixed possible finalization errors and possible interleaved requests in
HTTPClient.request
- Fixed a possible access violation in
Libevent2TCPConnection
when the connection was closed by the remote peer - issue #321 - Fixed
Win32TCPConnection.connect
to wait for the connection to be established (and throw proper exceptions on failure) - Fixed HTTP client requests for URLs with an empty path component (ending directly with the host name)
- Fixed out-of-range errors when parsing JSON with malformed keywords
- Fixed an exception when disconnecting HTTP client connections where the remote has already disconnected
- Fixed
vibe.core.args.getOption
to return true when an option was found (by Martin Nowak) - pull #331 - Fixed command line options to have precedence over configuration settings for
getOption
- Fixed
Cookie.maxAge
having no effect (by Jack Applegame) - pull #334, issue #330 - Fixed request/response delays in
Libevent2TCPConnection
(by Martin Nowak) - issue #338 - Fixed conditional use of
std.net.isemail
to validate emails - Fixed an assertion triggering for very small wait timeouts
- Fixed markdown
[ref][]
style links (by Martin Nowak) - pull #343 - Fixed cache headers in the HTTP file server and sending a "Date" header for all HTTP server responses
- Fixed interleaved HTTP client requests when dropping a previous response has failed for some reason
- Fixed opening files with
FileMode.readWrite
andFileMode.createTrunc
to allow both, reading and writing - issue #337, issue #354 - Fixed documentation of some parameters - issue #322
- Fixed
HTTPServerRequest.fullURL
to properly set the port - issue #365 - Fixed
vibe.core.concurrency.send
/receive
in conjunction withimmutable
values - Fixed an assertion in
Libevent2ManualEvent
caused by an AA bug - Fixed a possible crash in
Libevent2ManualEvent
when using deterministic destruction - Fixed a resource/memory leak in the libevent2 driver
- Fixed the "http-request" example to use the recommended
requestHTTP
function - issue #374 - Fixed appending of
Path
values to preserve the trailing slash, if any - Fixed deserialization of JSON integer values as floating point values as FP values often end up without a decimal point
- Fixed
yield()
to be a no-op when called outside of a fiber - Fixed a crash when WebSockets were used over a HTTPS connection - issue #385
- Fixed a crash in
SSLStream
that occured when the server certificate was rejected by the client - issue #384 - Fixed a number of bogus error messages when a connection was terminated before a HTTP request was fully handled
- Fixed the console logger to be disabled on Windows application without a console (avoids crashing)
- Fixed
HTTPLogger
avoid mixing line contents by using a mutex - Fixed the semantics of
WebSocket.connected
and addedWebSocket.waitForData
- issue #370 - Fixed a memory leak and keep-alive connection handling in the HTTP client
- Fixed settings of path placeholder values when "*" is used in
URLRouter
routes - Fixed a memory leak where unused fibers where never recycled
- Fixed handling "Connection: close" HTTP client requests
- Fixed the WebSockets code to accept requests without "Origin" headers as this is only required for web browser clients - issue #389
- Fixed the markdown compiler to be CTFEable again (by Martin Nowak) - see pull #398
- Fixed fixed markdown named links containing square brackets in their name - see pull #399
- Fixed a crash (finalization error) in the HTTP client when an SSL read error occurs
- Fixed a race condition during shutdown in
Libevent2ManualEvent
- Fixed the
Task.this(in Task)
constructor to preserve the task ID
Download
http://code.dlang.org/packages/vibe-d/0.7.18
Comments for the post are currently disabled.
0 comments