- Added an overload of
listenTCPthat takes aNetworkAddressas the bind address - pull #444 - Fixed storing longer Unix domain sockets paths in
NetworkAddress- pull #444
- Fixed an assertion failure caused by invalid filenames reported by the directory watcher on Windows - pull #443
- Fixed a crash happening when assigning a
nullreference to anInterfaceProxy- pull #442 connectTCPdoes not callbind()anymore when no explicit bind address is given - pull #442- The amount of unused thread local waiters is now limited to 16 per thread, potentially reducing the amount of open event file descriptors - pull #442
- Fixed a performance regression that caused every asynchronous operation to generate a GC allocation - pull #441
- Fixes an
InvalidMemoryOperationErrorthat was generated when aTaskPoolgot destroyed by the GC - pull #439
- Reading/writing from/to a
FileStreamnow results in a normal exception instead of an assertion failure - pull #438
- Fixed a warning on DMD 2.111.0/LDC2 1.41.0 related to a bogus
Taskmove constructor - pull #433 - Exceptions thrown by
FileStream.(read/write)now include the error reason - pull #434 - Added an overload of
Channel!T.tryConsumeOnethat takes atimeoutparameter - pull #436
- Added
TaskGroupas a means to limit task lifetime to a scope - pull #432 - Improved
logExceptionto avoid GC allocations and print line-by-line - pull #430
- Added the possibility to import
vibe.coreinstead of individual sub modules - pull #429 InetPath.Segment.toString()avoids allocations when no encoded sequences are present - pull #427- Reduced CPU overhead of
readFilewhen reading large files - pull #427, pull #428 - Enabled precise GC scanning for the internal
FreeListRef, which is used in various places - pull #429
- Fixed
(Interruptible)RecursiveTaskMutexto work outside of a task - pull #426 - Fixed
RecursiveTaskMutexto be completelynothrow- pull #426
- Deprecates
GenericPath.Segment2- pull #422 - The logging functions now also support passing an interpolated string instead of a format string - pull #425
- Improved IPv6 address formatting by outputting the special IPv4 syntax where applicable (by Denis Feklushkin aka denizzzka) - pull #416
- Fixed a possible
InvalidMemoryOperationErrorwhen leakingFileStreaminstances to the GC - pull #417
- Fixed emitting
ManualEvents from non-D threads - pull #415
- Fixed a bogus warning message - pull #415
- Fixes a
FileStreamregression introduced by the previous release - pull #412
- Fixed a rare crash issue occurring when logging from non-D threads - pull #410
- Fixed a possible crash for code that doesn't explicitly close a
FileStreambefore terminating the owner thread - pull #411
- Added
createStreamConnectionfor creating aTCPConnectionfrom an existingStreamSocketFD- issue #151, pull #405 runTaskand related functions now acceptimmutablearguments - issue #138, pull #403parallel(Unordered)Mapnow forwards thelengthproperty of the input range - pull #404- Fixed
SyslogLoggerto behave properly w.r.t. concurrency and addedcreateSyslogLogger- issue #176, pull #406, pull #407, pull #409 - Fixed a compile error when building with
-profileor when callingasyncAwaitwith anoreturncancelcallback - issue #299, issue #319, pull #408
- Fixes log arguments not being evaluated when no logger is logging the message - pull #399
- Fixes
relativeToto work withconstarguments - pull #400
- Adds file/line number information to uncaught throwable diagnostic output - pull #398
- Fixed some scope related deprecation warnings (by Mathias Lang aka Geod24) - pull #392, pull #393, pull #393
- Fixed temporary file creation on iOS - pull #394
- Uncaught throwables in tasks are now properly logged and generate an error message box on Windows for GUI applications - pull #397
- Contains some purely internal API changes
- Contains some purely internal API changes
- Removed an assertion in
LockedConnectionthat could be triggered from valid code - pull #384
- Fixed a crash that could happen when a
ManualEventis still in waiting state at runtime shutdown
performInWorkernow compiles for callbacks returningvoid- [pull #377][issue377]- Fixed a possible assertion failure in
TaskMutexcaused by a race condition in debug mode - [pull #378][issue378] pipenow avoids using the GC for buffer allocations in order to avoid pseudo memory leaks - [pull #381][issue381]
- Fixed a regression introduced in 2.7.1 that caused a crash after using more than 100 concurrent fibers in a single thread - [issue376][pull #376]
- Added
PipeConfigfor advancedpipe()behavior configuration - [issue371][pull #371] - Added
vibe.core.concurrency.performInWorker- [issue374][pull #374] - Removed an assertion that failed at process exit when leaking
ManualEvent/TaskConditionto the GC - [issue373][pull #373] - Fixed a potential crash at process shutdown when leaking a
Channel!Tto the GC - [issue374][pull #374] - Fixed uneven scheduling of worker tasks - [issue372][pull #372]
- Fixed a regression introduced by 2.6.0 causing rare crashes at process exit - [issue374][pull #374]
- Fixed an issue where hidden argument ownership in
runWorkerTaskHresulted in a resource leak - [issue374][pull #374]
- Heavily reduced the overhead for
ManualEventand derived primitives when many waiters are present - pull #370 TaskPoolnow allows to customize thread names - pull #370- Added
TaskEvent.schedule- pull #370
- Increased the maximum size an
InterfaceProxy
- Added
TaskSemaphore, along withcreateTaskSemaphoreandcreateLocalTaskSemaphore- pull #368, pull #369 - Fixed
TCPConnection.readto throw aReadTimeoutException(by dushibaiyu) - pull #359, pull #366 - Fixed the behavior of
LocalTaskSemaphoreand made thepriorityargument a type signed - pull #369
- Added
yieldUninterruptible- pull #364 - Improved debugging
yieldLockviolations - pull #364 - Now depends on
vibe-containerinstead of having to rely on private container implementations - pull #365
- Added
Monitorprimitive for statically checked mutex protection of data - pull #360 - Thread based I/O functions, such as directory listing, are now executed in a dedicated thread pool - pull #361
workerTaskPoolandlogicalProcessorCountare nownothrow- pull #361- Fixed
async()erroneously running in a worker thread for non-isolated return types - pull #363
- Tested up to DMD 2.105.0/LDC 1.34.0
- Fixes a number of warnings related to
scope,in refand deprecated APIs - pull #357, pull #358
- Made most synchronization primitives (e.g.
TaskMutex) constructible/usable asshared- pull #354
- Improved compilation speed both for vibe-core and its dependencies - pull #350, pull #353
openFilenow doesn't bock the calling thread if eventcore 0.9.4 or newer is used - pull #351- Added
FileMode.create- pull #351 - Added
TCPListenOptions.ipTransparent(by Adam Williams aka Tusanga) - pull #349
- Fixes
GenericPath.Segment.toString- pull #346
- Fixes all deprecation warnings related to DIP1000/DIP1021 (as of DMD 1.102.1) - pull #329, pull #339, pull #340
- Replaces
GenericPath.SegmentwithGenericPath.Segment2from 1.x.x - pull #336, pull #342 - Enforces
nothrowcallbacks as arguments torunTask/runWorkerTask- pull #335 OutputStream.writenow takes ascope constargument instead ofin- pull #329- Added
OutputStream.outputStreamVersion(equal to2) - Fixed a crash that could be caused by concurrently closing a TCP connection that was still being read from - pull #338
- Deprecated
Channel.emptyandChannel.consumeOne- pull #344
- Deprecated the use of
GenericPath.Segmentin preparation to the changes coming to 2.0.0 - pull #341 - Added
OutputStream.outputStreamVersion(equal to1)
- (backported) Fixed a crash possibly caused by concurrent closing of a TCP connection that was still being read - pull #338
- Updates compiler frontend support to range from 2.090.0 up to 2.101.2 - pull #330
- Fixes a socket descriptor leak after a connect timeout - issue #331, pull #332
- Fixed a Windows issue when closing a TCP connection while concurrently reading from it - pull #330
- Added an optional
timeoutparameter torunEventLoopOnce(by Grillo del Mal) - pull #325 - Marked
peer_addressparameters of theUDPConnectionAPI asscope- pull #321 - Fixed compilation errors on iOS - pull #323
- Fixed an issue with non-deterministic destruction in
FixedRingBuffer- pull #321 - Fixed a possible infinite recursion when using
yield()outside of a task - pull #326
- Annotate
inoutfunctions withreturn(By Dennis Korpel) - pull #313 - Better error message for GenericPath.fromTrustedString - pull #314
- Added
ConnectionPool.add()/remove()(by Ömer Faruk Irmak) - pull #303 - Added a timeout based overload of
TaskMutex.wait(by Ömer Faruk Irmak) - pull #303 - Fixed compilation on DMD frontend/runtime version prior to 2.090.0
- Fixed
parallelMapto clean up processed elements without relying on the GC - pull #311 - Fixed
runWorkerTaskH/TaskPool.runTaskHto not create a GC closure with the passed arguments - pull #312 - Fixed
isWeaklyIsolatedto consider dynamic arrays ofsharedvalues weakly isolated - pull #312
- Reduced resource overhead for tasks that don't use
std.concurrency- pull #309 - Added
Future.taskproperty - pull #308 shared/immutabledelegates are now treated as (weakly) isolated - pull #309
- Fixed
FileStream.leastSizein case the file pointer is past the file size - pull #304 - Added
TCPConnection.fdandUDPConnection.fdproperties (by Hiroki Noda aka kubo39) - pull #296
- Added
TruncatableStreamandClosableRandomAccessStream-FileStreamnow implements the latter - pull #294
core.file: Fix-preview=insupport - pull #290- Mark
TaskFiberQueue.insertfunctions@trusted(By Dennis Korpel) - pull #291 - Fix possibly hanging process after SIGINT/SIGTERM - pull #292
- Adds a
UDPListenOptionsargument tolistenUDP- pull #286
- Fixes compilation on Android - pull #281
- Deprecated calling
runTaskand its variants with non-nothrowtask callables - pull #279- Uncaught exceptions in tasks are highly error prone due to the often undetected termination of such a task
- Alternative approaches, such as re-throwing from
joinis neither thread-safe, nor statically checkable - Using
nothrowcallables will be mandatory for vibe-core 2.x.x
- Made more parts of the API
nothrow - Added
getLogLevel- issue #235, pull #280
- Fixed a regression in
listDirectorycaused by the linker fix for macOS/M1 - pull #277
- Made more parts of the API
nothrow- pull #274 - Added support for debugging currently running tasks via debug version
VibeRunningTasksandprintRunningTasks- pull #275 - Added a
NativePathbased overload for recursivecreateDirectory- pull #272 - Fixed linking
fstataton macOS/ARM (by kookman) - pull #271, issue #269 - Fixed
pipe()to not close the pipe file descriptors before returning (by Tomáš Chaloupka) - pull #268, issue #267 - Fixed unnecessary creation of event drivers during shutdown for threads that didn't have one - pull #276
- Added a sub directory predicate for recursive directory listing - pull #266
- Compatibility fixes for POSIX-based platforms, notable Musl-based ones - pull #249
- Added a CI task to ensure compatibility with Musl - pull #250
- Various optimizations to
vibe.core.path: InetPath- pull #251 GenericPath.Segment[2].opCastis nowconst- pull #252- Compatibility fix for upcoming (v2.097.0) deprecation - pull #253
- Improve documentation for
setTimerandsleep- pull #255 - Ensure that a timer callback is never invoked concurrently - pull #256, pull #260, pull #262
- Make
LocalTaskSemaphore.thisnothrowfor compatibility with v2.096.0 - pull #259
- Added
parallelMapandparallelUnorderedMap- pull #247 - Added
GenericPath.filenameExtension, as well asSegment2.extensionand.withoutExtensionproperties - pull #246 - Added
workerTaskPoolaccessor to get the default task pool - pull #247 - Added
GenericPath.normalized- pull #246
- Added
ChannelConfigand a channel mode to minimize synchronization overhead - pull #241 - Added
DirectoryListModeand optimizedlistDirectory/iterateDirectory- pull #242, pull #244 - Optimized
PipeMode.concurrentfor fast streams - pull #243
- Fixed a task scheduling issue for busy worker tasks that call
yield()periodically - pull #240 - Fixed a compilation error on DMD 2.079.0
ScopedMutexLockis nownothrow, using assertions instead ofExceptionin case of misuse- Fixes a possible "access denied" error for directories that have been iterated using
listDirectoryon Windows - pull #239
- Fixed a bogus assertion failure ("A task cannot interrupt itself") - pull #236
- Fixed a deprecation warning triggered in vibe:http - pull #234
- Added a concurrent mode to
pipe()usingPipeMode.concurrentto improve throughput in I/O limited situations - pull #233
- Fixed
waitForDataExto returnWaitForDataStatus.timeoutfor zero-timeouts if the connection is still alive pull #232
- Fixed a critical data corruption bug caused by eventcore's
cancelRead/cancelWrite- note that this fix makesFile.readandwriteuninterruptible - pull #227 - Fixed
InterfaceProxy!Tto behave correctly fornulltarget instances - pull #228
- Added support for upcoming DMD 2.094.0's
-preview=inswitch - pull #225
- The minimum supported compiler has been raised to v2.079.0
- The
log(log,logTrace,logInfo...) invibe.core.loghave been simplified to take the module/file/line as default runtime argument as opposed to compile-time - this could cause breakage if you were explicitly forwarding those arguments - Some places were previously using
logDebugfor full exception error message, and were using various method to ensurenothrowness. All full exception stacktrace are now printed only in diagnostic mode. - Full details are available in pull #212.
- Add optional timeout parameter to resolveHost - pull #220
- Fix exclusion list to properly exclude broken LDC releases - pull #221
- Workaround dub build by using
--singlein the test - pull #223 - Cleanup deprecations in test-suite and update release notes - pull #222
- Removed dead import of deprecated symbol
enforceEx- pull #214 - Improved error messages for non-implemented interfaces - pull #216
- Improved internal unittests to be forward-compatible - [pull #213][pull213] and [pull #215][pull215]
- Updated tested compiler range to DMD 2.078.3-2.092.0 and LDC 1.15.0-1.21.0
- Added support for a
CFRunLoopbased configuration on macOS to enable efficient UI integration - pull #211 - Removed potentially blocking file I/O code - pull #210
- Added error handling for process creation - pull #210
- Compiler support updated to DMD 2.078.3-2.091.0 and LDC 1.15.0-1.20.1 - pull #192
- Fixed SysLogger to compile again (was broken since the first vibe-core release) - issue #203, pull #204
- Fixed
relativeToto benothrow- pull #206
- Implemented priority based task scheduling - pull #196, pull #197
- Each task can be given a non-default priority that controls the relative frequency with which the task gets resumed in concurrent situations
- Events are now handled according to the calling task's priority instead of being handled immediately (can be reverted by defining a
VibeHighEventPriorityversion)
- Fixed a bogus contract violation error in
Timer.rearm- pull #195
- Fixes a documentation generation error (by Mathias Lang aka Geod24) - pull #187
- Added 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.byPrefixto iterate over all ancestor paths from root to leaf - pull #181 - Fixed a bug with uninitialized
YieldLockinstances (which can happen even with@disable this()) - pull #180 - Heavily improved performance of
readFileUTF8for large files by using a more efficientsanitizyUTF8implementation - pull #182 - CI tests now also run on macOS in addition to Linux and Windows - pull #183
- Supports 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.processfor task based process handling similar tostd.process(by Benjamin Schaaf) - pull #154 - Added
ConnectionPool.removeUnusedto enable closing all unused connections - pull #143 - Added
logExceptionto log exceptions in a standard andnothrowway - pull #155 - Added
TCPListenOptions.reuseAddressfor explicitly control ofSO_REUSEADDRfor listening sockets (by Radu Racariu) - pull #150 - Added
TCPConnection.waitForDataEx- pull #159, pull #153 - Fixed
TCPConnection.leastSizeto adhere to thereadTimeoutset - 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.parentPathpure- pull #165 - All remaining operations in
vibe.core.fileare now done asynchronously (using worker tasks) - pull #172 - Fixed a potential range violation in
iterateDirectory/getFileInfo- pull #144 - Fixed thread-safety of
Task.joinandTask.interruptwhen operating cross-thread - pull #145 - Fixed
copyFilefor 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.emptyto guarantee a successfulconsumeOneforfalsein 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
ConnectionPoolwhere the pool became unusable after connection failures (by Tomáš Chaloupka) - pull #169 - Fixed
FileStreamin append mode to report correct file offsets and disallow seeking (by v1ne) - pull #168
- Fixed
listDirectory/iterateDirectoryto not throw when encountering inaccessible files - pull #142 - Added
FileInfo.isFileto be able to distinguish between regular and special files (by Francesco Mecca) - pull #141
- Fixed handling of the
args_outparameter ofrunApplication(by Joseph Rushton Wakeling) - pull #134 - Fixed
TCPConnectionFunctionto be actually defined as a function pointer (by Steven Dwy) - pull #136, issue #109 - Fixed execution interleaving of busy
yieldloops inside and outside of a task - pull #139
- Improved the Channel!T API - pull #127, pull #130
- Usable as a
shared(Channel!T) - Most of the API is now
nothrow createChannelis now@safe
- Usable as a
yieldLockis now@safe nothrow- pull #127Task.interruptcan now be called from within ayieldLocksection - pull #127- Added
createLeanTimerand reverted the task behavior back to pre-1.4.4 - [] - Fixed a bogus assertion failure in
connectTCPon Posix systems - pull #128 - Added
runWorkerTaskDistH, a variant ofrunWorkerTaskDistthat returns all task handles - pull #129 TaskCondition.wait,notifyandnotifyAllare nownothrow- pull #130
- 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
- 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
TaskMutextoInterruptibleTaskCondition scopedMutexLocknow acceptsInterruptibleTaskMutex
- Fixed a socket file descriptor leak in
connectTCPwhen the connection fails (by Jan Jurzitza aka WebFreak001) - issue #115, pull #116, pull #123 - Fixed
resolveHostto not treat qualified host names starting with a digit as an IP address - issue #117, pull #121 - Fixed
copyFileto retain attributes and modification time - pull #120 - Fixed the copy+delete path of
moveFileto usecopyFileinstead of the blockingstd.file.copy- pull #120 - Fixed
createDirectoryWatcherto 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
- Added
FileStream.truncate- pull #113 - Using
MonoTimeinstead ofClockfor timeout functionality (by Hiroki Noda aka kubo39) - pull #112 - Fixed
UDPConnection.connectto handle the port argument properly (by Mathias L. Baumann aka Marenz) - pull #108 - Fixed a bogus assertion failure in
TCPConnection.waitForDatawhen the connection gets closed concurrently (by Jan Jurzitza aka WebFreak001) - pull #111
- 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
- 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
TaskPoolcausing 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
- Allows
switchToTaskto be called within a yield lock (deferred until the lock is elided)
- Fixed a potential infinite loop in the task scheduler causing 100% CPU use - pull #88
- Fixed
waitForDataAsyncwhen using in conjunction with callbacks that have scoped destruction - pull #89
- 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
connectTCPcalls - pull #75 - Added missing
setCommandLineArgsAPI (by Thomas Weyn) - pull #72 - Using
MonoTimeforTCPConnectiontimeouts (by Boris Barboris) - pull #76 - Fixed the
Task.runningstate 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
SIGABRTon Windows to keep the default process termination behavior - commit 463f4e4 - Fixed event processing for
yield()calls outside of a running event loop - pull #81
- 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.waitForDataAsyncto enable temporary detachment of a TCP connection from a fiber (by Francesco Mecca) - pull #62 - Fixed
TCPConnection.leastSizeto 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
TaskPoolleading 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
- Compiles on DMD 2.071.2 up to 2.077.0
- Added a
timeoutparameter 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.hiddenproperty pipe()now returns the actual number of bytes written- Fixed
TCPListener.bindAddress - Fixed a segmentation fault when logging from a non-D thread
- Fixed
setupWorkerThreadsandworkerThreadCount- issue #35 - Added
TaskPool.threadCountproperty - Added an
interface_indexparameter toUDPConnection.addMembership Task.tidcan now be called on aconst(Task)
- Compiles on DMD 2.071.2 up to 2.076.0
- Marked a number of classes as
finalthat were accidentally left as overridable - Un-deprecated
GenericPath.startsWithdue to the different semantics compared to the replacement suggestion - Added a
listenUDP(ref NetworkAddress)overload - Implemented the multicast related methods of
UDPConnection- pull #34 HTMLLoggernow logs the fiber/task ID- Fixed a deadlock caused by an invalid lock count in
LocalTaskSemaphore(by Boris-Barboris) - pull #31 - Fixed
FileDescriptorEventto adhere to the given event mask - Fixed
FileDescriptorEvent.waitin conjunction with a finite timeout - Fixed the return value of
FileDescriptorEvent.wait - Fixed handling of the
periodicargument to the@systemoverload ofsetTimer
- Fixed/implemented
TCPListener.stopListening - Fixed a crash when using
NullOutputStreamor 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)Stringis called with no address set - Fixed multiple crash and hanging issues with
(Local)ManualEvent- pull #26
- Added a new debug hook
setTaskCreationCallback - Fixed a compilation error for
VibeIdleCollect - Fixed a possible double-free in
ManualEventthat resulted in an endless loop - pull #23
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.
- 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
structs, with their storage backed by a compact array together with event loop specific data. @safeandnothrowhave been added throughout the code base,@nogcin 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
Pathtype has been replaced byPosixPath,WindowsPath,InetPathandNativePath, where the latter is an alias to eitherPosixPathorWindowsPath. 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,OutputStreametc.) can now also be implemented asstructs 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
IOModeparameter 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").