vibe.d 0.7.19 release
vibe.d 0.7.19 release

Wed, 09 Apr 2014Apart from working on the latest DMD versions, this release includes an important security enhancement in the form of new experimental code for SSL certificate validation. Other major changes include many improvements to the Diet template compiler, various performance improvements, a new FileDescriptorEvent to interface with other I/O libraries, a new web interface generator similar to the REST interface generator, many improvements to the Redis client, and a bunch of other fixes and additions.
Features and improvements
- Compiles with DMD 2.065 (and the current DMD HEAD)
- API improvements for the SSL support code
- Implemented SSL certificate validation (partially by David Nadlinger aka klickverbot, pull #474)
- Removed the old
EventedObject
interface - Implemented support for string includes in Diet templates (idea by Stefan Koch aka Uplink_Coder) - issue #482
- JSON answers in the REST interface generator are now directly serialized, improving performance and memory requirements
- Reimplemented the timer code to guarantee light weight timers on all event drivers
Libevent2TCPConnection
now has a limited read buffer size to avoid unbounded memory consumption- Fixed the semantics of
ConnectionStream.empty
andconnected
-empty
is generally useful for read loops andconnected
for write loops - Added an overload of
runTask
that takes a delegate with additional parameters to bind to avoid memory allocations in certain situations - Added
vibe.core.core.createFileDescriptorEvent
to enable existing file descriptors to be integrated into vibe.d's event loop - HTTP response compression is now disabled by default (controllable by the new `HTTPServerSettings.useCompressionIfPossible)
- Removed the deprecated
sslKeyFile
andsslCertFile
fields fromHTTPServerSettings
- Removed the compatibility alias
Signal
(alias forManualEvent
) :htmlescape
in Diet templates is now processed at compile time if possible- Added support for
Rebindable!T
inisStronglyIsolated
andisWeaklyIsolated
- issue #421 - Added
RecursiveTaskMutex
Throwable
is now treated as weakly isolated to allow passing exceptions usingvibe.core.concurrency.send
exitEventLoop
by default now only terminates the current thread's event loop and always works asynchronouslySession
is now astruct
instead of aclass
- Added support for storing arbitrary types in
Session
- Moved the REST interface generator from
vibe.http.rest
tovibe.web.rest
- Added a new web interface generator (
vibe.web.web
), similar tovibe.http.form
, but with full support for attribute based customization - Added a compile time warning when neither
VibeCustomMain
, norVibeDefaultMain
versions are specified - starts the transition fromVibeCustomMain
toVibeDefaultMain
- Added
requireBoundsCheck
to the build description - Added assertions to help debug accessing uninitialized
MongoConnection
values - Added
logFatal
as a shortcut tolog
called withLogLevel.fatal
(by Daniel Killebrew aka gittywithexcitement) - pull #441 - Empty JSON request bodies are now handled gracefully in the HTTP server (by Ryan Scott aka Archytaus) - pull #440
- Improved documentation of
sleep()
- issue #434 - The libevent2 and Win32 event drivers now outputs proper error messages for socket errors
- Changed
setTaskEventCallback
to take a delegate with aTask
parameter instead ofFiber
- Added a
Task.taskCounter
property AutoFreeListAllocator.realloc
can now reuse blocks of memory and usesrealloc
on the base allocator if possible- HTML forms now support multiple values per key
- Inverted the
no_dns
parameter ofEventDriver.resolveHost
touse_dns
to be consistent withvibe.core.net.resolveHost
- issue #430 Task
doesn'talias this
toTaskFiber
anymore, but forwards just a selected set of methods- Added `vibe.core.args.readRequiredOption - issue #442
NetworkAddress
is now fullypure nothrow
- Refactored the Redis client to use much less allocations and a much shorter source code
- Added
Bson.toString()
(by David Nadlinger aka klickverbot) - pull #468 - Added
connectTCP(NetworkAddress)
andNetworkAddress.toString()
(by Stefan Koch aka Uplink_Coder) - pull #485 - Added
NetworkAddress.toAddressString
to output only the address portion (without the port number) - Added
compileDietFileIndent
to generate indented HTML output - Added Travis CI integration (by Martin Nowak) - pull #486
- Added
appendToFile
to conveniently append to a file without explicitly opening it (by Stephan Dilly aka extrawurst) - pull #489 - Tasks started before starting the event loop are now deferred until after the loop has been started
- Worker threads are started lazily instead of directly on startup
- Added
MongoCursor.limit()
to limit the amount of documents returned (by Damian Ziemba aka nazriel) - pull #499 - The HTTP client now sets a basic-auth header when the request URL contains a username/password (by Damian Ziemba aka nazriel) - issue #481, pull #501
- Added
RedisClient.redisVersion
(by Fabian Wallentowitz aka fabsi88) - pull #502 - Implemented handling of doctypes other than HTML 5 in the Diet compiler (by Damian Ziemba aka nazriel) - issue #505, pull #509
- Boolean attributes in Diet templates are now written without value for HTML 5 documents (by Damian Ziemba aka nazriel) - issue #475, pull #512
- Empty "class" attributes in Diet templates are not written to the final HTML output (by Damian Ziemba aka nazriel) - issue #372, pull #519
- Implemented PUB/SUB support for the Redis client (by Michael Eisendle with additional fixes by Etienne Cimon aka etcimon)
- The logging functions take now any kind of string instead of only
string
(by Mathias Lang aka Geod24) - pull #532 - Added
SMTPClientSettings.peerValidationMode
(by Stephan Dilly aka Extrawurst) - pull #528 - Diet templates that are set to
null
are now omitted in the HTML output (by Damian Ziemba aka nazriel) - issue #520, pull #521 - Extended the REST interface generator to cope with any type of error response and to always throw a
RestException
on error (by Stephan Dilly aka Extrawurst) - pull #533 - Added support for text blocks in Diet templates (by Damian Ziemba aka nazriel) - issue #510, pull #518
- Added
RedisClient.blpop
and changed all numbers tolong
to be in line with Redis (by Etienne Cimon aka etcimon) - pull #527 - Changed
WebSocket.receiveBinary
andWebSocket.receiveText
to strictly expect the right type by default (by Martin Nowak) - pull #543 - Avoid using an exception to signal HTTP 404 errors for unprocessed requests, resulting in a large performance increas for that case
- Modernized the Diet templates used for the example projects (by Damian Ziemba aka nazriel) - pull #551
- Added WebDAV HTTP status codes to the
HTTPStatusCode
enum (by Dmitry Mostovenko aka TrueBers) - pull #574 - Added support for multiple recipient headers (including "CC" and "BCC") in
sendMail
(by Stephan Dilly aka Extrawurst) - pull #582 - Added support for comma separated recipients in
sendMail
- Added SSL support for the MongoDB client (by Daniel Killebrew aka gittywithexcitement) - issue #575, pull #587
- Made all overloads of
listenHTTPPlain
private (as they were supposed to be since a year) - Added using
-version=VibeDisableCommandLineParsing
to disable default command line argument interpretation - Added using
-version=VibeNoSSL
to disable using OpenSSL and added free functions to create SSL contexts/streams - Functions in
vibe.data.json
now throw aJSONException
instead of a bareException
(by Luca Niccoli aka lultimouomo) - pull #590 - Functions in
vibe.http.websocket
now throw aWebSocketException
instead of a bareException
(by Luca Niccoli aka lultimouomo) - pull #590
Bug fixes
- Fixed a condition under which a
WebSocket
could still be used after its handler function has thrown an exception - issue #407 - Fixed a
null
pointer dereference inLibevent2TCPConnection
when trying to read from a closed connection - Fixed the HTTP client to still properly shutdown the connection when an exception occurs during the shutdown
- Fixed
SSLStream
to perform proper locking for multi-threaded servers - Fixed the signature of
TaskLocal.opAssign
- issue #432 - Fixed thread shutdown in cases where multiple threads are used - issue #419
- Fixed SIGINT/SIGTERM application shutdown - issue #419
- Fixed
HashMap
to properly handlenull
keys - Fixed processing WebSocket requests sent from IE 10 and IE 11
- Fixed the HTTP client to assume keep-alive for HTTP/1.1 connections that do not explicitly specify something else (by Daniel Killebrew aka gittywithexcitement) - issue #448, pull #450
- Fixed
Win32FileStream
to report itself as readable forFileMode.createTrunc
- Fixed a possible memory corruption bug for an assertion in
AllocAppender
- Fixed clearing of cookies on old browsers - issue #453
- Fixed handling of
yield()
ed tasks so that events are guaranteed to be processed - Fixed
Libevent2EventDriver.resolveHost
to take the local hosts file into account (by Daniel Killebrew aka gittywithexcitement) - issue #289, pull #460 - Fixed
RedisClient.zcount
to issue the right command (by David Nadlinger aka klickverbot) - pull #467 - Fixed output of leading white space in the
HTMLLogger
- now replaced by
- Fixed serialization of AAs with
const(string)
orimmutable(string)
keys (by David Nadlinger aka klickverbot) - pull #473 - Fixed double-URL-decoding of path parameters in
URLRouter
- Fixed
URL.toString()
to output username/password, if set - Fixed a crash caused by a double-free when an SSL handshake had failed
- Fixed
Libevent2UDPConnection.recv
to work inside of aTask
- Fixed handling of "+" in the path part of URLs (is not replaced by a space) - issue #498
- Fixed handling of
<style>
tags with inline content in the Diet compiler - issue #507 - Fixed some possible sources for stale TCP sockets when an error occurred in the close sequence
- Fixed the Win64 build (using the "win32" driver) that failed due to user32.dll not being linked
- Fixed
URLRouter
to expose all overloads ofmatch()
- see also pull #535 - Fixed deserialization of unsigned integers in the BSON serializer (by Anton Gushcha aka NCrashed) - issue #538, pull #539
- Fixed deserialization of unsigned integers in the JSON serializer
- Fixed serialization of nested composite types in the JSON serializer
- Fixed two bogus assertions in the win32 event driver (one in the timer code and one for socket events after a socket has been closed)
- Fixed
WebSocket.waitForData
to always obey the given timeout value (by Martin Nowak) - issue #544, pull #545 - Fixed the high level tests in the "tests/" directory (by Mathias Lang aka Geod24) - pull #541
- Fixed
HashMap
to always use the suppliedTraits.equals
for comparison - Fixed the example projects and switched from "package.json" to "dub.json" (by Mathias Lang aka Geod24) - pull #552
- Fixed emitting an idle event when using
processEvents
to run the event loop - Fixed
Path.relativeTo
to retain a possible trailing slash - Fixed image links with titles in the Markdown compiler (by Mike Wey) - pull #563
- Fixed a possible stale TCP connection after finalizing a HTTP client request had failed
- Fixed
makeIsolated
to work for structs - Fixed
listenHTTP
to throw an exception if listening on all supplied bind addresses has failed - Fixed a possible crash or false pointers in
HashMap
due to a missing call toGC.removeRange
- issue #591 - Fixed non-working disconnect of keep-alive connections in the HTTP server (by Stephan Dilly aka Extrawurst) - pull #597
- Fixed a possible source for orphaned TCP connections in the libevent driver
- Fixed
exitEventLoop
to work when called in a task that has been started just beforerunEventLoop
was called - Fixed
isWeaklyIsolated
to work properly for interface types (by Luca Niccoli aka lultimouomo) - pull #602 - Fixed the
BsonSerializer
to correctly serializeSysTime
as aBsonDate
instead of as astring
Note that some fixes have been left out because they are related to changes within the development cycle of this release.
Download
http://code.dlang.org/packages/vibe-d/0.7.19
Comments for the post are currently disabled.
0 comments