20 KiB
1.8.0 - 2019-12-07
- Adds a new path segment API that works without GC allocations (
GenericPath.bySegment2
/.head2
) - this will replace the old API in version 2.x.x of the library - pull #179 - Added
GenericPath.byPrefix
to iterate over all acestor paths from root to leaf - pull #181 - Fixed a bug with unitialized
YieldLock
instances (which can happen even with@disable this()
) - pull #180 - Heavily improved performance of
readFileUTF8
for large files by using a more efficientsanitizyUTF8
implementation - pull #182 - CI tests now also run on macOS in addition to Linux and Windows - pull #183
1.7.0 - 2019-09-17
- Supports DMD DMD 2.077.1 up to DMD 2.088.0 and LDC 1.7.0 to LDC 1.17.0 - pull #166, pull #177
- Added
vibe.core.process
for task based process handling similar tostd.process
(by Benjamin Schaaf) - pull #154 - Added
ConnectionPool.removeUnused
to enable closing all unused connections - pull #143 - Added
logException
to log exceptions in a standard andnothrow
way - pull #155 - Added
TCPListenOptions.reuseAddress
for explicitly control ofSO_REUSEADDR
for listening sockets (by Radu Racariu) - pull #150 - Added
TCPConnection.waitForDataEx
- pull #159, pull #153 - Fixed
TCPConnection.leastSize
to adhere to thereadTimeout
set - pull #160 - Updated compiler support to DMD 2.086.0 and LDC 1.5.0
- The logging functions now log verbatim if no additional argument is passed (by Denis Feklushkin aka dennizzzka) - issue #87, pull #152
- Made
GenericPath.parentPath
pure
- pull #165 - All remaining operations in
vibe.core.file
are now done asynchronously (using worker tasks) - pull #172 - Fixed a potential range violation in
iterateDirectory
/getFileInfo
- pull #144 - Fixed thread-safety of
Task.join
andTask.interrupt
when operating cross-thread - pull #145 - Fixed
copyFile
for write protected files - failed to set file times - Fixed hanging
Task.yield()
calls in case of multiple waiters - issue #161, pull #162 - Fixed
Channel!T.empty
to guarantee a successfulconsumeOne
forfalse
in case of a single reader - issue #157, pull #163 - Fixed a crash when deleting a handle from a foreign thread after the original thread has terminated - issue #135, pull #164
- Fixed an issue in
ConnectionPool
where the pool became unusable after connection failures (by Tomáš Chaloupka) - pull #169 - Fixed
FileStream
in append mode to report correct file offsets and disallow seeking (by v1ne) - pull #168
1.6.2 - 2019-03-26
- Fixed
listDirectory
/iterateDirectory
to not throw when encountering inaccessible files - pull #142 - Added
FileInfo.isFile
to be able to distinguish between regular and special files (by Francesco Mecca) - pull #141
1.6.1 - 2019-03-10
- Fixed handling of the
args_out
parameter ofrunApplication
(by Joseph Rushton Wakeling) - pull #134 - Fixed
TCPConnectionFunction
to be actually defined as a function pointer (by Steven Dwy) - pull #136, issue #109 - Fixed execution interleaving of busy
yield
loops inside and outside of a task - pull #139
1.6.0 - 2019-01-26
- Improved the Channel!T API - pull #127, pull #130
- Usable as a
shared(Channel!T)
- Most of the API is now
nothrow
createChannel
is now@safe
- Usable as a
yieldLock
is now@safe nothrow
- pull #127Task.interrupt
can now be called from within ayieldLock
section - pull #127- Added
createLeanTimer
and reverted the task behavior back to pre-1.4.4 - [] - Fixed a bogus assertion failure in
connectTCP
on Posix systems - pull #128 - Added
runWorkerTaskDistH
, a variant ofrunWorkerTaskDist
that returns all task handles - pull #129 TaskCondition.wait
,notify
andnotifyAll
are nownothrow
- pull #130
1.5.0 - 2019-01-20
- Supports DMD 2.078.3 up to DMD 2.084.0 and LDC up to 1.13.0
- Added statically typed CSP style cross-task channels - pull #25
- The current implementation is buffered and supports multiple senders and multiple readers
1.4.7 - 2019-01-20
- Improved API robustness and documentation for
InterruptibleTaskMutex
- issue #118, pull #119synchronized(iterriptible_mutex)
now results in a runtime error instead of silently using the automatically created object monitor- resolved an overload conflict when passing a
TaskMutex
toInterruptibleTaskCondition
scopedMutexLock
now acceptsInterruptibleTaskMutex
- Fixed a socket file descriptor leak in
connectTCP
when the connection fails (by Jan Jurzitza aka WebFreak001) - issue #115, pull #116, pull #123 - Fixed
resolveHost
to not treat qualified host names starting with a digit as an IP address - issue #117, pull #121 - Fixed
copyFile
to retain attributes and modification time - pull #120 - Fixed the copy+delete path of
moveFile
to usecopyFile
instead of the blockingstd.file.copy
- pull #120 - Fixed
createDirectoryWatcher
to properly throw an exception in case of failure - pull #120 - Fixed ddoc warnings - issue #103, pull #119
- Fixed the exception error message issued by
FileStream.write
(by Benjamin Schaaf) - pull #114
1.4.6 - 2018-12-28
- Added
FileStream.truncate
- pull #113 - Using
MonoTime
instead ofClock
for timeout functionality (by Hiroki Noda aka kubo39) - pull #112 - Fixed
UDPConnection.connect
to handle the port argument properly (by Mathias L. Baumann aka Marenz) - pull #108 - Fixed a bogus assertion failure in
TCPConnection.waitForData
when the connection gets closed concurrently (by Jan Jurzitza aka WebFreak001) - pull #111
1.4.5 - 2018-11-23
- Compile fix for an upcoming Phobos version - pull #100
- Fixed as assertion error in the internal spin lock implementation when pressing Ctrl+C on Windows - pull #99
- Fixed host name string conversion for
SyslogLogger
- [issue vibe-d/vibe.d#2220][vibe.d-issue2220], pull #102 - Fixed callback invocation for unreferenced periodic timers - issue #104, pull #106
1.4.4 - 2018-10-27
- Compiler support updated to DMD 2.076.1 up to DMD 2.082.1 and LDC 1.6.0 up to 1.12.0 - pull #92, pull #97
- Simplified worker task logic by avoiding an explicit event loop - pull #95
- Fixed an issue in
WindowsPath
, where an empty path was converted to "/" when cast to another path type - pull #91 - Fixed two hang issues in
TaskPool
causing the worker task processing to possibly hang at shutdown or to temporarily hang during run time - pull #96 - Fixed internal timer callback tasks leaking memory - [issue #86][issue86], pull #98
1.4.3 - 2018-09-03
- Allows
switchToTask
to be called within a yield lock (deferred until the lock is elided)
1.4.2 - 2018-09-03
- Fixed a potential infinite loop in the task scheduler causing 100% CPU use - pull #88
- Fixed
waitForDataAsync
when using in conjunction with callbacks that have scoped destruction - pull #89
1.4.1 - 2018-07-09
- Fixed compilation errors for
ConnectionPool!TCPConnection
- issue vibe.d#2109, pull #70 - Fixed destruction behavior when destructors are run in foreign threads by the GC - issue #69, pull #74
- Fixed a possible assertion failure for failed
connectTCP
calls - pull #75 - Added missing
setCommandLineArgs
API (by Thomas Weyn) - pull #72 - Using
MonoTime
forTCPConnection
timeouts (by Boris Barboris) - pull #76 - Fixed the
Task.running
state of tasks that are scheduled to be run after an activeyieldLock
- pull #79 - Fixed an integer overflow bug in
(Local)ManualEvent.wait
(by Boris Barboris) - pull #77 - Disabled handling of
SIGABRT
on Windows to keep the default process termination behavior - commit 463f4e4 - Fixed event processing for
yield()
calls outside of a running event loop - pull #81
1.4.0 - 2018-03-08
- Compiles on DMD 2.072.2 up to 2.079.0
- Uses the stdx-allocator package instead of
std.experimental.allocator
- note that this change requires version 0.8.3 of vibe-d to be used - Added
TCPConnection.waitForDataAsync
to enable temporary detachment of a TCP connection from a fiber (by Francesco Mecca) - pull #62 - Fixed
TCPConnection.leastSize
to return numbers greater than one (by Pavel Chebotarev aka nexor) - pull #52 - Fixed a task scheduling assertion happening when worker tasks and timers were involved - issue #58, pull #60
- Fixed a race condition in
TaskPool
leading to random assertion failures - 7703cc6 - Fixed an issue where the event loop would exit prematurely when calling
yield
- issue #66, pull #67 - Fixed/worked around a linker error on LDC/macOS - issue #65, pull #68
1.3.0 - 2017-12-03
- Compiles on DMD 2.071.2 up to 2.077.0
- Added a
timeout
parameter inconnectTCP
(by Boris Baboris) - pull #44, pull #41 - Fixes the fiber event scheduling mechanism to not cause any heap allocations - this alone gives a performance boost of around 20% in the bench-dummy-http example - pull #27
- Added
FileInfo.hidden
property pipe()
now returns the actual number of bytes written- Fixed
TCPListener.bindAddress
- Fixed a segmentation fault when logging from a non-D thread
- Fixed
setupWorkerThreads
andworkerThreadCount
- issue #35 - Added
TaskPool.threadCount
property - Added an
interface_index
parameter toUDPConnection.addMembership
Task.tid
can now be called on aconst(Task)
1.2.0 - 2017-09-05
- Compiles on DMD 2.071.2 up to 2.076.0
- Marked a number of classes as
final
that were accidentally left as overridable - Un-deprecated
GenericPath.startsWith
due to the different semantics compared to the replacement suggestion - Added a
listenUDP(ref NetworkAddress)
overload - Implemented the multicast related methods of
UDPConnection
- pull #34 HTMLLogger
now logs the fiber/task ID- Fixed a deadlock caused by an invalid lock count in
LocalTaskSemaphore
(by Boris-Barboris) - pull #31 - Fixed
FileDescriptorEvent
to adhere to the given event mask - Fixed
FileDescriptorEvent.wait
in conjunction with a finite timeout - Fixed the return value of
FileDescriptorEvent.wait
- Fixed handling of the
periodic
argument to the@system
overload ofsetTimer
1.1.1 - 2017-07-20
- Fixed/implemented
TCPListener.stopListening
- Fixed a crash when using
NullOutputStream
or other class based streams - Fixed a "dwarfeh(224) fatal error" when the process gets terminated due to an
Error
- pull #24 - Fixed assertion error when
NetworkAddress.to(Address)String
is called with no address set - Fixed multiple crash and hanging issues with
(Local)ManualEvent
- pull #26
1.1.0 - 2017-07-16
- Added a new debug hook
setTaskCreationCallback
- Fixed a compilation error for
VibeIdleCollect
- Fixed a possible double-free in
ManualEvent
that resulted in an endless loop - pull #23
1.0.0 - 2017-07-10
This is the initial release of the vibe-core
package. The source code was derived from the original :core
sub package of vibe.d and received a complete work over, mostly under the surface, but also in parts of the API. The changes have been made in a way that is usually backwards compatible from the point of view of an application developer. At the same time, vibe.d 0.8.0 contains a number of forward compatibility declarations, so that switching back and forth between the still existing vibe-d:core
and vibe-core
is possible without changing the application code.
To use this package, it is currently necessary to put an explicit dependency with a sub configuration directive in the DUB package recipe:
// for dub.sdl:
dependency "vibe-d:core" version="~>0.8.0"
subConfiguration "vibe-d:core" "vibe-core"
// for dub.json:
"dependencies": {
"vibe-d:core": "~>0.8.0"
},
"subConfigurations": {
"vibe-d:core": "vibe-core"
}
During the development of the 0.8.x branch of vibe.d, the default will eventually be changed, so that vibe-core
is the default instead.
Major changes
- The high-level event and task scheduling abstraction has been replaced by the low level Proactor abstraction eventcore, which also means that there is no dependency to libevent anymore.
- GC allocated classes have been replaced by reference counted
struct
s, with their storage backed by a compact array together with event loop specific data. @safe
andnothrow
have been added throughout the code base,@nogc
in some parts where no user callbacks are involved.- The task/fiber scheduling logic has been unified, leading to a major improvement in robustness in case of exceptions or other kinds of interruptions.
- The single
Path
type has been replaced byPosixPath
,WindowsPath
,InetPath
andNativePath
, where the latter is an alias to eitherPosixPath
orWindowsPath
. This greatly improves the robustness of path handling code, since it is no longer possible to blindly mix different path types (especially file system paths and URI paths). - Streams (
InputStream
,OutputStream
etc.) can now also be implemented asstruct
s instead of classes. All API functions accept stream types as generic types now, meaning that allocations and virtual function calls can be eliminated in many cases and function inlining can often work across stream boundaries. - There is a new
IOMode
parameter for read and write operations that enables a direct translation of operating system provided modes ("write as much as possible in one go" or "write only if possible without blocking").