Blog
vibe.d 0.7.15 has been released
Sat, 27 Apr 2013
This release cleans up the API in several places (sheduling some symbols for deprecation) and largely improves the multi-threading primitives. It also features initial support for Win64 and a revamped logging system, as well as authentication support for the MongoDB client and a lot of smaller enhancements.
Features and improvements
- Improved the logging system with pluggable loggers, more specified verbose log levels, an HTML logger, and proper use of stdout/stderr
- Added basic compile support for 64-bit Windows (using the "win32" driver)
- Add a scoped alternative version of
vibe.core.concurrency.lock(used for safe access tosharedobjects with unshared methods) - Add support to repeat the idle event until a new message arrives
- Task is now weakly isolated and can thus be passed to other threads using
runWorkerTask - Implemented digest authentication in the MongoDB client (by Christian Schneider aka HowToMeetLadies) - pull #218
- The number of worker threads is now
core.cpuid.threadsPerCPU TaskMutexis now fully thread safe and has much lower overhead when no contention happensTaskConditionnow also works with a plainMutexin addition to aTaskMutex- Removed the deprecated
Mutexalias - Renamed
SignaltoManualEventto avoid confusion with other kinds of "signals" MemoryStreamnow supports dynamically growing to the buffer limitHttpServerwill now drop incoming connections that don't send data within 10 seconds after the connection has been established- Added a new
createTimeroverload that doesn't automatically arm the timer after creation exitEventLoopnow by default also shuts down the worker threads (ifenableWorkerThreadswas called)- Added new command line options "--vv", "--vvv" and "--vvvv" to specify more verbose logging
- Added connection pooling to the Redis client (by Junho Nurminen aka jupenur) - pull #199
- Various documentation improvements and better adherence to the style guide
- Compiles with DMD 2.063 (mostly by Vladimir Panteleev aka CyberShadow) - pull #207
- All examples now use exact imports rather than using
import vibe.vibe;orimport vibe.d; - Moved basic WWW form parsing from
vibe.http.formtovibe.inet.webformto reduce intermodule dependencies and improve compile time - MongoDB URL parsing code uses
vibe.inet.webformto parse query string arguments now instead ofstd.regex- improves compile time - Much more complete REST interface generator example (by Михаил Страшун aka Dicebot) - pull #210
- Updated OpenSSL DLLs to 1.0.1e (important security fixes)
- Renamed
EventedObject.isOwnertoamOwner - Improved intermodule dependencies, configuration option/file handling and added
pragma(lib)(using "--version=VibePragmaLib") for more comfortable building without dub/vibe (by Vladimir Panteleev aka CyberShadow) - pull #211 - Implemented an automatic command line help screen (inferred from calls to
vibe.core.args.getOption) - Added meaningful error messages when the connection to a MongoDB or Redis server fails
- Deprecated
vibe.http.server.startListening, which is not necessary anymore
Bug fixes
- Fixed
vibe.core.concurrency.receiveTimeoutto actually work at all - Fixed
Win32Timer.stopto reset thependingstate and allow repeated calls - Fixed
HttpClientto avoid running into keep-alive timeouts (will close the connection 2 seconds before the timeout now) - Fixed
HttpClientto properly handle responses without a "Keep-Alive" header - Fixed
isWeaklyIsolatedfor structs containing functions - Fixed all invalid uses of
countUntilwherestd.string.indexOfshould have been used instead - issue #205 - Fixed spelling of the "--distport" command line switch and some documentation - pull #203, pull #204
- Fixed spurious error messages when accepting connections in the libevent driver (by Vladimir Panteleev aka CyberShadow) - pull #207
- Fixed adjusting of method names in the REST interface generator for sub interfaces (by Михаил Страшун aka Dicebot) - pull #210
- Fixed falling back to IPv4 if listening on IPv6 fails when calling
listenTCPwithout a bind address - Fixed
Libevent2MenualEvent.~thisto not access GC memory which may already be finalized - Fixed
Win32TCPConnection.peerAddressandWin32UDPConnection.bindAddress - Partially fixed automatic event loop exit in the Win32 driver (use -version=VibePartialAutoExit for now) - pull #213
- Fixed
renderCompatto work withconstparameters - Fixed an error in the Deimos bindings (by Henry Robbins Gouk) - pull #220
- Fixed a compilation error in the REST interface client (multiple definitions of "url__")
Download
vibe.d 0.7.14 has been released
Fri, 22 Mar 2013
A lot has been improved on the performance and multi-threading front. The HTTP server benchmark jumped from around 17k req/s up to 48k req/s on a certain quad-core test system and >10k connections can now be handled at the same time (on 64-bit systems due to virtual memory requirements).
Features and improvements
- Performance tuning for the HTTP server and client
- Implemented distributed listening and HTTP server request processing (using worker threads to accept connections)
- Stable memory usage for HTTP client and server (tested for 50 million requests)
- Implemented new
TaskMutexandTaskConditionclasses deriving from Druntime'sMutexandConditionfor drop-in replacement - Added a simplified version of the
std.concurrencyAPI that works with vibe.d's tasks (temporary drop-in replacement) - Added support for customizing the HTTP method and path using UDAs in the REST interface generator (by Михаил Страшун aka Dicebot) - pull #189
vibe.core.mutexandvibe.core.signalhave been deprecated- Added support for WebDAV specific HTTP methods - see also issue #109
- Compiles on DMD 2.061/2.062 in unit test mode
- Added
Json.remove()for JSON objects - Added
Isolated!Tin preparation of a fully thread-safe API - The package description now exposes a proper set of configurations
- VPM uses the new download URL schema instead of relying on a
"downloadUrl"field in the package description to stay forward compatible with DUB - The default order to listen is now IPv6 and then IPv4 to avoid the IPv4 listener blocking the IPv6 one on certain systems
- Added
HttpServerSettings.disableDistHostto forcelistenHttpto listen immediately, even during initialization - Added
WebSocket.receiveBinaryandWebSocket.receiveText- issue #182 - Added
HttpServerResponse.writeRawBodyandHttpClientResponse.readRwaBodyto allow for verbatim forwarding - ".gz" and ".tgz" are now recognized as compressed formats and are not transferred with a compressed "Content-Encoding"
- Added a pure scoped callback based version of
requestHttpto allow GC-less operation and also automatic pipelining of requests in the future
Bug fixes
- Fixed some possible crashes and memory leaks in the
HttpClient - Fixed the
HttpRouterinterface to derive fromHttpServerRequestHandler - Fixed parsing of version ranges in the deprecated VPM
- Fixed some examples by added a
VibeCustomMainversion to their package.json - Fixed a possible range violation in the Diet compiler for raw/filter nodes
- Fixed detection of horizontal lines in the Markdown parser
- Fixed handling of one character methods in the REST interface generator - pull #195
- Fixed the reverse proxy to not drop the "Content-Length" header
- Fixed
HttpClientto obey "Connection: close" responses - Fixed
Libevent2Signalto not move tasks between threads
Download
vibe.d 0.7.13 has been released
Sun, 24 Feb 2013
This releases some issues with the HttpClient in conjunction with SSL connection and contains a lot of cleaning up. Many modules and symbols have been deprecated or renamed to streamline the API and reduce redundant functionality with Phobos.
Features and improvements
- Compiles with the latest DUB, which is now the recommended way to build vibe.d projects
- Changed all public enums to use Phobos' naming convention (except for JSON and BSON)
- Moved
vibe.http.common.StrMapCItovibe.inet.nessage.InetHeaderMap - Deprecated all hash modules in
vibe.cryptoin favor ofstd.digest - Deprecated the
vibe.crypto.sslmodule (functionality moved tovibe.stream.ssl) - Deprecated a number of functions that are available in Phobos
- Deprecated the setter methods in the
Cookieclass
Bug fixes
- Fixed connection unlocking in the
HttpClient - Fixed detection of unsuccessful SSL connection attempts
- Fixed freeing of SSL/BIO contexts
- Fixed some places in the deprecated VPM to use
Path.toNativeString()instead ofPath.toString() - Fixed the
package.jsonfile of the benchmark project - Fixed cross-thread incovations of
vibe.core.signal.Signalin the Win32 driver - Fixed compilation on DMD 2.062 - issue #183, issue #184
Download
vibe.d 0.7.12 has been released
Mon, 11 Feb 2013
Main changes are a refactored MiongoDB client, important fixes to the HttpClient and memory alignment fixes in the custom allocators. The library and all examples are now also valid DUB* packages as a first step to remove the 'vibe' script in favor of the more powerful 'dub'.
Features and improvements
- Big refactoring of the MongoDB interface to be more consistent with its API (by Михаил Страшун aka Dicebot) - pull #171
- Added a range interface to
MongoCursor- redo of pull #172 - Added a dub compatible "package.json" file for vibe.d and all example projects
- Parameters can be made optional for
registerFormInterfacenow (by Robert Klotzner aka eskimor) - issue #156 - The REST interface generator also supports optional parameters by defining default parameter values
- Added
Task.interrupt(),Task.join()andTask.running - Improved detection of needed imports in the REST interface generater (by Михаил Страшун aka Dicebot) - pull #164
- Partially implemented zero-copy file transfers (still disabled for libevent) - issue #143
- Added
HttpRequest.contentTypeandcontentTypeParametersto avoid errors by direct comparison with the "Content-Type" header - issue #154 - Added a small forward compatibility fix for DUB packages ("vibe.d" is ignored as a dependency)
- Cleaned up the function names for writing out
Jsonobjects as a string and added convenience methods (partially done in pull #166 by Joshua Niehus) - Renamed
HttpRequest.urltoHttpRequest.requestUrland addedHttpRequest.fullUrl - Added the possibility to write a request body in chunked transfer mode in the
HttpClient - Added
HttpServerRequest.sslto determine if a request was sent encryted - Changed several interfaces to take
scopedelegates to avoid useless GC allocations - Removed the
in_urlparameter fromPath.toString- now assumed to betrue SysTimeandDateTimeare now specially treated by the JSON/BSON serialization code- Refactored the
Cookieinterface to properly use@property(by Nick Sabalausky aka Abcissa) - pull #176 - Added
HttpRouteras an interface forUrlRouter(by Laurie Clark-Michalek aka bluepeppers) - pull #177 - Changed
HttpFileServerSettings.maxAgefromlongtoDuration(by Nick Sabalausky aka Abcissa) - pull #178 - Added
HttpFileServerSettings.preWriteCallback(by Nick Sabalausky aka Abcissa) - pull #180
Bug fixes
- Fixed matching of the host name in
HttpServer- is case insensitive now - Fixed issues in
ConnectionPoolandHttpClientthat causedInvalidMemoryOperationErrorand invalid multiplexed requests - Fixed
GCAllocatorandPoolAllocatorto enforce proper alignment - Fixed passing of misaligned base pointers to
free()inMallocAllocator- at least 32-bit Linux seems to choke on it - issue #157 - Fixed
listenTcpwithout an explicit bind address - now returns an array of listeners with one entry per IP protocol version - Fixed "Connection: close" hangs also for HTTP/1.0 clients - those that depended on this behavior are broken anyway - [issue #147][issue147]
- Fixed possible invalid line markers in the mixin generated by the Diet compiler - issue #155
- Fixed all uses of
render!()in the example projects by replacing them withrenderCompat!()- issue 159 - Fixed concatenation of
Pathobjects, where the LHS is not normalized - Fixed
serializeToBsonin conjunction with read-only fields (by Михаил Страшун aka Dicebot) - pull #168 - Fixed a possible endless loop caused by
ChunkedOutputStreamdue to an inconsistent redundant field - Fixed
serializeToJsonin conjunction with read-only fields (same fix as for BSON) - Fixed
downloadignoring theportproperty of the target URL - Fixed termination of Fibers by exceptions of already terminated tasks
- Fixed propagation of
HttpStatusExceptionin the REST interface generator (by Михаил Страшун aka Dicebot) - pull #173 - Fixed handling of multiple cookies with the same name
HttpServerRequest.cookies.getAll()can now be used to query them - fixes [issue #174][issue174] - Fixed
WebSocket.connected- issue #169 - Fixed accepting of invalid JSON syntax - issue #161
- Fixed use of
tmpnamon Posix by replacing withmkstemps, still used on Windows - issue #137 - Fixed
ZlibInputStream.emptyto be consistent withleastSize
Download
http://vibed.org/download?file=vibed-0.7.12.zip
http://github.com/rejectedsoftware/vibe.d/
* See the DUB package registry