Skip to content

Latest commit

 

History

History
993 lines (687 loc) · 45.4 KB

CHANGELOG.md

File metadata and controls

993 lines (687 loc) · 45.4 KB

2.9.2 - 2024-09-13

  • Fixes a FileStream regression introduced by the previous release - pull #412

2.9.1 - 2024-09-11

  • 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 FileStream before terminating the owner thread - pull #411

2.9.0 - 2024-08-02

2.8.5 - 2024-06-18

  • Fixes log arguments not being evaluated when no logger is logging the message - pull #399
  • Fixes relativeTo to work with const arguments - pull #400

2.8.4 - 2024-04-06

  • Adds file/line number information to uncaught throwable diagnostic output - pull #398

2.8.3 - 2024-04-03

  • 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

2.8.2 - 2024-02-19

  • Contains some purely internal API changes

2.8.1 - 2024-02-15

  • Contains some purely internal API changes

2.7.4 - 2024-02-12

  • Removed an assertion in LockedConnection that could be triggered from valid code - pull #384

2.7.3 - 2024-01-17

  • Fixed a crash that could happen when a ManualEvent is still in waiting state at runtime shutdown

2.7.2 - 2024-01-15

  • performInWorker now compiles for callbacks returning void - [pull #377][issue377]
  • Fixed a possible assertion failure in TaskMutex caused by a race condition in debug mode - [pull #378][issue378]
  • pipe now avoids using the GC for buffer allocations in order to avoid pseudo memory leaks - [pull #381][issue381]

2.7.1 - 2023-12-19

  • 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]

2.7.0 - 2023-12-19

  • Added PipeConfig for advanced pipe() behavior configuration - [issue371][pull #371]
  • Added vibe.core.concurrency.performInWorker - [issue374][pull #374]
  • Removed an assertion that failed at process exit when leaking ManualEvent/TaskCondition to the GC - [issue373][pull #373]
  • Fixed a potential crash at process shutdown when leaking a Channel!T to 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 runWorkerTaskH resulted in a resource leak - [issue374][pull #374]

2.6.0 - 2023-12-14

  • Heavily reduced the overhead for ManualEvent and derived primitives when many waiters are present - pull #370
  • TaskPool now allows to customize thread names - pull #370
  • Added TaskEvent.schedule - pull #370

2.5.1 - 2023-11-24

  • Increased the maximum size an InterfaceProxy

2.5.0 - 2023-11-24

  • Added TaskSemaphore, along with createTaskSemaphore and createLocalTaskSemaphore - pull #368, pull #369
  • Fixed TCPConnection.read to throw a ReadTimeoutException (by dushibaiyu) - pull #359, pull #366
  • Fixed the behavior of LocalTaskSemaphore and made the priority argument a type signed - pull #369

2.4.0 - 2023-10-01

  • Added yieldUninterruptible - pull #364
  • Improved debugging yieldLock violations - pull #364
  • Now depends on vibe-container instead of having to rely on private container implementations - pull #365

2.3.0 - 2023-09-29

  • Added Monitor primitive 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
  • workerTaskPool and logicalProcessorCount are now nothrow - pull #361
  • Fixed async() erroneously running in a worker thread for non-isolated return types - pull #363

2.2.1 - 2023-09-15

  • Tested up to DMD 2.105.0/LDC 1.34.0
  • Fixes a number of warnings related to scope, in ref and deprecated APIs - pull #357, pull #358

2.2.0 - 2023-03-31

  • Made most synchronization primitives (e.g. TaskMutex) constructible/usable as shared - pull #354

2.1.0 - 2023-03-17

  • Improved compilation speed both for vibe-core and its dependencies - pull #350, pull #353
  • openFile now 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

2.0.1 - 2023-03-08

  • Fixes GenericPath.Segment.toString - pull #346

2.0.0 - 2023-03-04

  • Fixes all deprecation warnings related to DIP1000/DIP1021 (as of DMD 1.102.1) - pull #329, pull #339, pull #340
  • Replaces GenericPath.Segment with GenericPath.Segment2 from 1.x.x - pull #336, pull #342
  • Enforces nothrow callbacks as arguments to runTask/runWorkerTask - pull #335
  • OutputStream.write now takes a scope const argument instead of in - pull #329
  • Added OutputStream.outputStreamVersion (equal to 2)
  • Fixed a crash that could be caused by concurrently closing a TCP connection that was still being read from - pull #338
  • Deprecated Channel.empty and Channel.consumeOne - pull #344

1.23.0 - 2023-02-28

  • Deprecated the use of GenericPath.Segment in preparation to the changes coming to 2.0.0 - pull #341
  • Added OutputStream.outputStreamVersion (equal to 1)

1.22.7 - 2023-02-20

  • (backported) Fixed a crash possibly caused by concurrent closing of a TCP connection that was still being read - pull #338

1.22.6 - 2023-01-23

  • 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

1.22.5 - 2022-11-04

  • Added an optional timeout parameter to runEventLoopOnce (by Grillo del Mal) - pull #325
  • Marked peer_address parameters of the UDPConnection API as scope - 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

1.22.4 - 2022-05-26

  • Annotate inout functions with return (By Dennis Korpel) - pull #313
  • Better error message for GenericPath.fromTrustedString - pull #314

1.22.3 - 2022-04-01

  • 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

1.22.2 - 2022-03-26

  • Fixed parallelMap to clean up processed elements without relying on the GC - pull #311
  • Fixed runWorkerTaskH/TaskPool.runTaskH to not create a GC closure with the passed arguments - pull #312
  • Fixed isWeaklyIsolated to consider dynamic arrays of shared values weakly isolated - pull #312

1.22.1 - 2022-03-04

  • Reduced resource overhead for tasks that don't use std.concurrency - pull #309
  • Added Future.task property - pull #308
  • shared/immutable delegates are now treated as (weakly) isolated - pull #309

1.22.0 - 2021-12-16

  • Fixed FileStream.leastSize in case the file pointer is past the file size - pull #304
  • Added TCPConnection.fd and UDPConnection.fd properties (by Hiroki Noda aka kubo39) - pull #296

1.21.0 - 2021-08-31

  • Added TruncatableStream and ClosableRandomAccessStream - FileStream now implements the latter - pull #294

1.20.0 - 2021-08-25

  • core.file: Fix -preview=in support - pull #290
  • Mark TaskFiberQueue.insert functions @trusted (By Dennis Korpel) - pull #291
  • Fix possibly hanging process after SIGINT/SIGTERM - pull #292

1.19.0 - 2021-08-14

  • Adds a UDPListenOptions argument to listenUDP - pull #286

1.18.1 - 2021-07-04

1.18.0 - 2021-05-21

  • Deprecated calling runTask and its variants with non-nothrow task 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 join is neither thread-safe, nor statically checkable
    • Using nothrow callables will be mandatory for vibe-core 2.x.x
  • Made more parts of the API nothrow
  • Added getLogLevel - issue #235, pull #280

1.17.1 - 2021-05-18

  • Fixed a regression in listDirectory caused by the linker fix for macOS/M1 - pull #277

1.17.0 - 2021-05-17

  • Made more parts of the API nothrow - pull #274
  • Added support for debugging currently running tasks via debug version VibeRunningTasks and printRunningTasks - pull #275
  • Added a NativePath based overload for recursive createDirectory - pull #272
  • Fixed linking fstatat on 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

1.16.0 - 2021-03-26

  • Added a sub directory predicate for recursive directory listing - pull #266

1.15.0 - 2021-03-24

  • Added a batch overload of getFileInfo - pull #265
  • TaskMutex' constructor is now nothrow - pull #264

1.14.0 - 2021-03-15

  • 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].opCast is now const - pull #252
  • Compatibility fix for upcoming (v2.097.0) deprecation - pull #253
  • Improve documentation for setTimer and sleep - pull #255
  • Ensure that a timer callback is never invoked concurrently - pull #256, pull #260, pull #262
  • Make LocalTaskSemaphore.this nothrow for compatibility with v2.096.0 - pull #259

1.13.0 - 2021-01-15

  • Added parallelMap and parallelUnorderedMap - pull #247
  • Added GenericPath.filenameExtension, as well as Segment2.extension and .withoutExtension properties - pull #246
  • Added workerTaskPool accessor to get the default task pool - pull #247
  • Added GenericPath.normalized - pull #246

1.12.0 - 2021-01-12

  • Added ChannelConfig and a channel mode to minimize synchronization overhead - pull #241
  • Added DirectoryListMode and optimized listDirectory/iterateDirectory - pull #242, pull #244
  • Optimized PipeMode.concurrent for fast streams - pull #243

1.11.3 - 2020-12-18

  • Fixed a task scheduling issue for busy worker tasks that call yield() periodically - pull #240
  • Fixed a compilation error on DMD 2.079.0

1.11.2 - 2020-12-12

  • ScopedMutexLock is now nothrow, using assertions instead of Exception in case of misuse
  • Fixes a possible "access denied" error for directories that have been iterated using listDirectory on Windows - pull #239

1.11.1 - 2020-11-25

  • Fixed a bogus assertion failure ("A task cannot interrupt itself") - pull #236
  • Fixed a deprecation warning triggered in vibe:http - pull #234

1.11.0 - 2020-10-24

  • Added a concurrent mode to pipe() using PipeMode.concurrent to improve throughput in I/O limited situations - pull #233

1.10.3 - 2020-10-15

  • Fixed waitForDataEx to return WaitForDataStatus.timeout for zero-timeouts if the connection is still alive pull #232

1.10.2 - 2020-09-18

  • Fixed a critical data corruption bug caused by eventcore's cancelRead/cancelWrite - note that this fix makes File.read and write uninterruptible - pull #227
  • Fixed InterfaceProxy!T to behave correctly for null target instances - pull #228

1.10.1 - 2020-08-31

  • Added support for upcoming DMD 2.094.0's -preview=in switch - pull #225

1.10.0 - 2020-08-24

  • The minimum supported compiler has been raised to v2.079.0
  • The log (log, logTrace, logInfo...) in vibe.core.log have 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 logDebug for full exception error message, and were using various method to ensure nothrowness. All full exception stacktrace are now printed only in diagnostic mode.
  • Full details are available in pull #212.

1.9.4 - 2020-08-21

  • Add optional timeout parameter to resolveHost - pull #220
  • Fix exclusion list to properly exclude broken LDC releases - pull #221
  • Workaround dub build by using --single in the test - pull #223
  • Cleanup deprecations in test-suite and update release notes - pull #222

1.9.3 - 2020-08-02

  • 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]

1.9.2 - 2020-05-28

  • Updated tested compiler range to DMD 2.078.3-2.092.0 and LDC 1.15.0-1.21.0
  • Added support for a CFRunLoop based 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

1.9.1 - 2020-03-18

  • 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 relativeTo to be nothrow - pull #206

1.9.0 - 2020-03-18

  • 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 VibeHighEventPriority version)
  • Fixed a bogus contract violation error in Timer.rearm - pull #195

1.8.1 - 2019-12-17

  • Fixes a documentation generation error (by Mathias Lang aka Geod24) - pull #187

1.8.0 - 2019-12-07

  • 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.byPrefix to iterate over all ancestor paths from root to leaf - pull #181
  • Fixed a bug with uninitialized YieldLock instances (which can happen even with @disable this()) - pull #180
  • Heavily improved performance of readFileUTF8 for large files by using a more efficient sanitizyUTF8 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 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 to std.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 and nothrow way - pull #155
  • Added TCPListenOptions.reuseAddress for explicitly control of SO_REUSEADDR for listening sockets (by Radu Racariu) - pull #150
  • Added TCPConnection.waitForDataEx - pull #159, pull #153
  • Fixed TCPConnection.leastSize to adhere to the readTimeout 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 and Task.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 successful consumeOne for false 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 of runApplication (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
  • yieldLock is now @safe nothrow - pull #127
  • Task.interrupt can now be called from within a yieldLock 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 of runWorkerTaskDist that returns all task handles - pull #129
  • TaskCondition.wait, notify and notifyAll are now nothrow - 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 #119
    • synchronized(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 to InterruptibleTaskCondition
    • scopedMutexLock now accepts InterruptibleTaskMutex
  • 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 use copyFile instead of the blocking std.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 of Clock 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 for TCPConnection timeouts (by Boris Barboris) - pull #76
  • Fixed the Task.running state of tasks that are scheduled to be run after an active yieldLock - 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 in connectTCP (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 and workerThreadCount - issue #35
  • Added TaskPool.threadCount property
  • Added an interface_index parameter to UDPConnection.addMembership
  • Task.tid can now be called on a const(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 of setTimer

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 structs, with their storage backed by a compact array together with event loop specific data.
  • @safe and nothrow 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 by PosixPath, WindowsPath, InetPath and NativePath, where the latter is an alias to either PosixPath or WindowsPath. 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 as structs 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").