vibe.d beta banner
get vibe.d

vibe.d 0.7.18 release

Header image
Tue, 26 Nov 2013 The 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 with support for annotations to control serialization (replaces/extends the serialization code in and
  • Added range based allocation free (de-)serialization for JSON strings and more efficient BSON serialization
  • Added File.isOpen
  • Added a ConnectionStream interface from which TCPConnection and TaskPipe 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 for setPlainLogging
  • 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 to enable dynamically switching the underlying stream
  • Added to provide a buffered input range interface for an InputStream
  • Added that allows wrapping a ConnectionStream along with a Stream to allow forwarding connection specific functionality together with a wrapped stream
  • Added URL based overloads for HTTPServerResponse.redirect and staticRedirect
  • 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 for piping stream data with a defined maximum latency
  • OutgoingWebSocketMessage is now automatically finalized
  • HTTPServerResponse.switchProtocol now returns a ConnectionStream to allow controlling the underlying TCP connection
  • HTTPServerResponse.startSession now sets the "HttpOnly" attribute by default to better prevent session theft (by Ilya Shipunov) - issue #368, pull #373
  • HTTPServerResponse.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 #377
  • now preallocates if possible
  • Optimized HTML escaping performance (by Martin Nowak) - pull #327
  • Adjusted naming of Bson.Type and Json.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 uses yield() 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 by reimplementing everything using zlib directly instead of std.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 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 and FileMode.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 with immutable 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 added WebSocket.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


Posted at 09:55:58 +0100 by Sönke Ludwig

Commenting is currently disabled for this article.