vibe.d 0.7.21 release
vibe.d 0.7.21 release
Tue, 18 Nov 2014Due to a number of highly busy months (more to come), this release got delayed far more than planned. However, development didn't stall and, finally, a huge list of over 150 changes found its way into the new version. Major changes are all over the place, including some notable changes in the SSL/TLS support and the web interface generator.
Features and improvements
- SSL/TLS support
- Added support for TLS server name indication (SNI) to the SSL support classes and the HTTP client and server implementation
- Changed
SSLPeerValidationMode
into a set of bit flags (different modes can now be combined) - Made the SSL implementation pluggable (currently only OpenSSL is supported)
- Moved all OpenSSL code into a separate module to avoid importing the OpenSSL headers in
vibe.stream.ssl
(by Martin Nowak) - pull #757 - Added support for a
VibeUseOldOpenSSL
version to enable use with pre 1.0 versions of OpenSSL - Upgraded the included OpenSSL Windows binaries to 1.0.1j
- Web interface generator
- Added support for
Json
as a return type for web interface methods (by Stefan Koch) - pull #684 - Added support for a
@contentType
attribute for web interface methods (by Stefan Koch) - pull #684 - Added
vibe.web.web.trWeb
for runtime string translation support - Added support for nesting web interface classes using properties that return a class instance
- Added support for
@before
/@after
attributes for web interface methods - Added a
PrivateAccessProxy
mixin as a way to enable use of private and non-static methods for@before
in web interfaces - Added support for validating parameter types to
vibe.web.web
(vibe.web.validation
) - Added the possibility to customize the language selection in the translation context for web interface translations
- Added optional support for matching request paths with mismatching trailing slash in web interfaces
SessionVar
, if necessary, now starts a new session also for read accesses
- Added support for
- HTTP sessions
- Added a check to disallow storing types with aliasing in sessions
- Session values are now always returned as
const
to avoid unintended mutation of the returned temporary - Added initial support for JSON and BSON based session stores
- Added a Redis based HTTP session store (
vibe.db.redis.sessionstore.RedisSessionStore
) - Deprecated index operator based access of session values (recommended to use
vibe.web.web.SessionVar
instead)
- Redis database driver
- Added some missing Redis methods and rename
RedisClient.flushAll
todeleteAll
- Added the
vibe.db.redis.types
module for type safe access of Redis keys RedisReply
is now a typed output range- Added a module for Redis with common high level idioms (
vibe.db.redis.idioms
) - Improved the Redis interface with better template constraints, support for interval specifications and support for
Nullable!T
to determine key existence - Made the
member
argument to the sorted set methods inRedisDatabase
generic instead ofstring
- issue #811 - Added support for
ubyte[]
as a return type for various Redis methods (by sinkuu) - pull #761
- Added some missing Redis methods and rename
- MongoDB database driver
MongoConnection.defaultPort
is now anushort
(by Martin Nowak) - pull #725- Added support for expiring indexes and dropping indexes/collections in the MongoDB client (by Márcio Martins) - pull #799
- Added
MongoClient.getDatabases
(by Peter Eisenhower) - pull #822 - Added an array based overload of
MongoCollection.ensureIndex
- issue #824 - Added
MongoCursor.skip
as an alternative to setting the skip value using an argument tofind
(by Martin Nowak) - pull 888
- HTTP client
- Made the handling of redirect responses more specific in the HTTP client (reject unknown status codes)
- Added support for using a proxy server in the HTTP client (by Etienne Cimon) - pull #731
- Added
HTTPClientSettings.defaultKeepAliveTimeout
and handle the optional request count limit of keep-alive connections (by Etienne Cimon) - issue 744, pull #756 - Added an assertion to the HTTP client when a relative path is used for the request URL instead of constructing an invalid request
- Avoid using chunked encoding for
HTTPClientRequest.writeJsonBody
- HTTP server
- Added support for IP based client certificate validation in the HTTP server (by Eric Cornelius) - pull #723
- Avoid using chunked encoding for
HTTPServerResponse.writeJsonBody
- issue #619 - Added
HTTPServerResponse.waitForConnectionClose
to support certain kinds of long-polling applications
- Compiles on DMD 2.064 up to DMD 2.067.0-b1
- All external dependencies are now version based (OpenSSL/libevent/libev)
- Removed deprecated symbols of 0.7.20
- Increased the default fiber stack size to 512 KiB (32-bit) and 16 MiB (64-bit) respectively - issue #861
- Enabled the use of
shared
delegates forrunWorkerTask
and avoid creation of a heap delegate - Added support for more parameter types in
runTask
/runWorkerTask
by avoidingVariant
- Added an initial implementation of a
Future!T
(future/promise) invibe.core.concurrency
- Deprecated the output range interface of
OutputStream
, usevibe.stream.wrapper.StreamOutputRange
instead - Prefer
.toString()
tocast(string)
when converting values to string in Diet templates (changes howJson
values are converted!) - issue #714 - Added variants of the
vibe.utils.validation
functions that don't throw - Added
UDPConnection.close()
- Deprecated
registerFormInterface
andregisterFormMethod
- Added support for implicit parameter conversion of arguments passed to
runTask
/runWorkerTask
(by Martin Nowak) - pull #719 - Added
vibe.stream.stdio
for vibe.d compatible wrapping of stdin/stdout andstd.stdio.File
(by Eric Cornelius) - pull #729 - Added
vibe.stream.multicast.MultiCastStream
for duplicating a stream to multiple output streams (by Eric Cornelius) - pull #732 - Added support for an
inotify
based directory watcher in the libevent driver (by Martin Nowak) - pull #743 - Added support for
Nullable!T
invibe.data.serialization
- issue #752 - Added a constructor for
BsonObjectID
that takes a specific time stamp (by Martin Nowak) - pull #759 - Added output range based overloads of
std.stream.operations.readUntil
andreadLine
- Added
vibe.data.json.serializeToJsonString
- Added
vibe.inet.webform.formEncode
for encoding a dictionary/AA as a web form (by Etienne Cimon) - pull #748 BsonObjectID.fromString
now throws anException
instead of anAssertError
for invalid inputs- Avoid using initialized static array for storing task parameters (by Михаил Страшун aka Dicebot) - pull #778
- Deprecated the simple password hash functions due to their weak security - issue #794
- Added support for serializing tuple fields
- Added
convertJsonToASCII
to force escaping of all Unicode characters - see issue #809 - Added a parameter to set the information log format for
setLogFormat
(by Márcio Martins) - pull #808 - Serializer implementations now get the number of dictionary elements passed up front (by Johannes Pfau) - pull #823
- Changed
readRequiredOption
to not throw when the--help
switch was passed (by Jack Applegame) - pull #803 - Added
RestInterfaceSettings
as the new way to configure REST interfaces - Implemented optional stripping of trailing underscores for REST parameters (allows the use of keywords as parameter names)
- Made the
message
parameter ofenforceHTTP
lazy
(by Mathias Lang aka Geod24) - pull #839 - Improve the format of JSON parse errors to enable IDE go-to-line support
- Removed all console and file system output from unit tests (partially by Etienne Cimon, [pull #852][issue852])
- Improved performance of libevent timers by avoiding redundant rescheduling of the master timer
Bug fixes
- Fixed BSON custom serialization of
const
classes - Fixed serialization of
DictionaryList
- issue #621 - Fixed a bogus deprecation message for Diet script/style blocks without child nodes
- Fixed an infinite loop in
HTTPRouter
when no routes were registered - issue #691 - Fixed iterating over
const(DictionaryList)
(by Mathias Lang aka Geod24) - pull #693 - Fixed an assertion in the HTTP file server that was triggered when drive letters were contained in the request path - pull #694
- Fixed recognizing
application/javascript
in script tags to trigger the block syntax deprecation message - Fixed support for boolean parameters in web interfaces
- Fixed falling back to languages without country suffix in the web interface generator
- Fixed alignment of the backing memory for a
TaskLocal!T
- Fixed the port reported by
UDPConnection.bindAddress
when 0 was specified as the bind port (libevent) - Fixed busy looping the event loop when there is unprocessed UDP data - issue #715
- Fixed
exitEventLoop()
to work when there is a busy tasks that callsyield()
- issue #720 - Avoid querying the clock when processing timers and no timers are pending (performance bug)
- Fixed
ManualEvent.wait()
to work outside of a task (fixes various secondary facilities that useManualEvent
implicitly) - issue #663 - Fixed encoding of
StreamOutputRange.put(dchar)
(by sinkuu) - pull #733 - Fixed treating
undefined
JSON values asnull
when converting to a string - issue #735 - Fixed using an
id
parameter together with@path
in REST interfaces - issue #738 - Fixed handling of multi-line responses in the SMTP client (by Etienne Cimon) - pull #746
- Fixed compile error for certain uses of
Nullable!T
in web interfaces - Enable use of non-virtual access of the event driver using
VibeUseNativeDriverType
- Fixed building the "libev" configuration (by Lionello Lunesu) - pull #755
- Fixed
TaskLocal!T
top properly call destructors after a task has ended (by Etienne Cimon) - issue #753, pull #754 - Fixed the name of
RedisDatabase.zcard
(wasZcard
) - Fixed a possible race condition causing a hang in
MessageQueue.receive
/receiveTimeout
(by Ilya Lyubimov) - pull #760 - Fixed
RangeCounter
to behave properly when inserting singlechar
values - Fixed
RedisDatabase.getSet
(by Stephan Dilly) - pull #769 - Fixed out-of-range array access in the Diet template compiler when the last attribute of a tag is value-less (by Martin Nowak) - pull #771
- Fixed output of line breaks in the Markdown compiler
- Fixed handling of the
key
argument ofgetRange
,lrem
andzincrby
inRedisDatabase
(by sinkuu) - pull #772 - Fixed handling of
Nullable!T
andisISOExtStringSerializable
parameters in REST interfaces - Fixed escaping of Diet tag attributes with string interpolations (by sinkuu) - pull #779
- Fixed handling a timeout smaller or equal to zero (infinity) for
RedisSubscriber.blisten
(by Etienne Cimon aka etcimon) - issue #776, pull #781 - Fixed handling of Unicode escape sequences in the JSON parser (by Etienne Cimon aka etcimon) - pull #782
- Fixed
HTTPServerRequest.fullURL
for requests without aHost
header - issue #786 - Fixed
RedisClient
initialization for servers that require authentication (by Pedro Yamada aka yamadapc) - pull #785 - Fixed the JSON parser to not accept numbers containing ':'
- Removed an invalid assertion in
HTTPServerResponse.writeJsonBody
- issue #788 - Fixed handling of explicit "identity" content encoding in the HTTP client (by sinkuu) - pull #789
- Fixed
HTTPServerRequest.fullURL
for HTTPS requests with a non-default port (by Arjuna aka arjunadeltoso) - pull #790 - Fixed detection of string literals in Diet template attributes - issue #792
- Fixed output of Diet attributes using
'
as the string delimiter - Fixed detection of numeric types in
BsonSerializer
(do not treatNullable!T
as numeric) - Fixed the REST interface client to accept 201 responses (by Yuriy Glukhov) - pull #806
- Fixed some potential lock related issues in the worker task handler loop
- Fixed memory corruption when
TCPListenOptions.disableAutoClose
is used and theTCPConnection
outlives the accepting task - issue #807 - Fixed a range violation when parsing JSON strings that end with
[
or{
- issue #805 - Fixed compilation of
MongoCollection.aggregate
and support passing an array instead of multiple parameters - issue #783 - Fixed compilation and formatting issues in the HTTP logger (by Márcio Martins) - pull #808
- Fixed assertion condition in
DebugAllocator.realloc
- Fixed shutdown when daemon threads are involved - issue #758
- Fixed some serialization errors for structs with variadic constructors or properties or with nested type declarations/aliases (by Rene Zwanenburg) - pull #817, issue #818, pull #819
- The HTTP server now terminates a connection if the response was not completely written to avoid protocol errors
- Fixed an assertion triggered by a
vibe.web.rest
server trying to write an error message when a response had already been made - issue #821 - Fixed using
TaskLocal!T
with types that have certain kinds of "copy constructors" - issue #825 - Fixed
-version=VibeNoSSL
(by Dragos Carp) - pull #834 - Use "bad request" replies instead of "internal server error" for various cases where a HTTP request is invalid (by Marc Schütz) - pull #827
- Removed a leading newline in compiled Diet templates
- Fixed serialization of nested arrays as JSON (by Rene Zwanenburg) - issue #840, pull #841
- Fixed OpenSSL error messages in certain cases (by Andrea Agosti) - pull #796
- Fixed parsing of MongoDB URLs containing
/
in the password field (by Martin Nowak) - pull #843 - Fixed an assertion in
TCPConnection.waitForData
when called outside of a task (libevent) - issue #829 - Fixed an
InvalidMemoryOperationError
inHTTPClientResponse.~this()
- Fixed a memory corruption issue for HTTPS servers (by Etienne Cimon) - issue #846, pull #849
- Fixed low-precision floating point number output in
JsonStringSerializer
- Fixed compilation in release mode (not recommended for safety reasons!) - issue #847
- Fixed low-precision floating point number output in the Redis client - [issue #857][issue857]
- Fixed handling of NaN in the JSON module (output as
undefined
) (by David Monagle)- pull #860 - Fixed the Redis subscriber implementation (by Etienne Cimon) - issue #855, pull #815
- Fixed compilation of the
Isolated!T
framework - issue #801 - Fixed an
InvalidMemoryOperationError
inDebugAllocator
(by Etienne Cimon) - pull #848 - Fixed detection of numeric types in
JsonSerializer
(do not treatNullable!T
as numeric) (by Jack Applegame) - issue #686, pull #869 - Fixed error handling in
Win32TCPConnection.connect
and improved error messages - Fixed ping handling of WebSocket ping messages (by Vytautas Mickus aka Eximius) - pull #883
- Fixed always wrapping the e-mail address in angular brackets in the SMTP client (by ohenley) - pull #887
- Fixed custom serialization of
const
instances (by Jack Applegame) - pull #879 - Fixed the
RedisDatabase.set*X
to properly test the success condition (by Stephan Dilly aka Extrawurst) - pull #890 - Fixed
sleep(0.seconds)
to be a no-op instead of throwing an assertion error - Fixed a potential resource leak in
HashMap
by usingfreeArray
instead of directly deallocating the block of memory (by Etienne Cimon) - pull #893
Comments for the post are currently disabled.
3 comments
I'm gonna use vibed soon, thanks for this work !
Awesome, this release rocks! Thanks for all the hard work by all contributors! Danke schön :)
Great work, thanks a lot.