Find a file
Sönke Ludwig e769a9b1ca Avoid lazy evaluation of log arguments while the loggers are locked. Fixes rejectedsoftware/vibe.d#1717.
The deadlock happened because a function that waits for a worker task to finish was passed to the log functions. Evaluated lazily, it got called while the logger's mutex was locked, meaning that any log call from within that thread would cause a deadlock.

This change also has another, possibly important, implication - arguments are evaluated only once instead of possibly multiple times if multiple loggers are registered. This could very well make a lot of existing (wrong) code more robust (e.g. logInfo("%s", i++)).
2017-03-23 17:55:51 +01:00
examples/bench-dummy-http-server Update for eventcore 0.5.0 and the latest DMD beta. 2016-10-24 08:22:49 +02:00
source/vibe Avoid lazy evaluation of log arguments while the loggers are locked. Fixes rejectedsoftware/vibe.d#1717. 2017-03-23 17:55:51 +01:00
tests Add tests from vibe-d:core. 2017-02-17 00:55:16 +01:00
.editorconfig Add .editorconfig. 2017-01-16 21:40:32 +01:00
.gitignore Add executeables to .gitignore 2017-03-22 13:41:38 +01:00
.travis.yml Test on DMD 2.073.0 and LDC 1.1.0 and add compiler list to README. 2017-02-01 12:18:54 +01:00
appveyor.yml Fix createTempFile on Windows. 2017-03-09 16:09:46 +01:00
dub.sdl Add missing forward configurations for optlink based builds. 2017-03-09 13:57:03 +01:00
README.md Fix AppVeyor script and add badge. 2017-02-16 10:23:33 +01:00
travis-ci.sh Allow script based tests and fix test package recipes. 2017-02-17 00:49:40 +01:00

vibe.d core module

This is the designated successor of the vibe-d:core sub package of vibe.d 0.7.x. The API is mostly compatible from a library user point of view, but the whole library has received some heavy lifting under the surface, close to a rewrite. Most classes have been replaced by reference counting structs and @safe nothrow attributes are now used throughout the library, whenever possible. Adding @nogc on the other hand could only be done in a very limited context due to its viral nature and the lack of an @trusted equivalent.

Another major design change is that instead of the previous driver model, there is now a separate, lower-level event loop abstraction (eventcore) which follows a callback based Proactor pattern. The logic to schedule fibers based on events has been pulled out of this abstraction and is now maintained as a single function, leading to a huge improvment in terms of robustness (most issues in the previous implementation have probably never surfaced in practice, but there turned out to be lots of them).

Finally, the stream design has received two big changes. Streams can now either be implemented as classes, as usual, or they can be implemented as structs in a duck typing/DbC fashion. This, coupled with templated wrapper stream types, allows to eliminate the overhead of virtual function calls, enables reference counting instead of GC allocations, and allows the compiler to inline across stream boundaries. The second change to streams is the added support for an IOMode parameter that enables I/O patterns as they are possible when using OS sockets directly. The leastSize and dataAvailableForRead properties will in turn be deprecated.

The implementation is mostly finished, except for final production testing.

DUB Package Posix Build Status Windows Build status

Supported compilers

The following compilers are tested and supported:

  • DMD 2.073.0
  • DMD 2.072.2
  • DMD 2.071.2
  • DMD 2.070.2
  • LDC 1.1.0
  • LDC 1.0.0