From 4cc1b42108716b14b966b59a20af91931123236d Mon Sep 17 00:00:00 2001 From: Jacek Sieka Date: Tue, 6 Aug 2019 12:49:45 +0200 Subject: [PATCH] Remove ad comparison from front page --- README.md | 64 ------------------------------------------------------- 1 file changed, 64 deletions(-) diff --git a/README.md b/README.md index 125d8a0..6c5ed99 100644 --- a/README.md +++ b/README.md @@ -10,70 +10,6 @@ Chronos is an efficient library for asynchronous programming and an alternative to Nim's asyncdispatch. -## Core differences between the standard library asyncdispatch and Chronos - -1. Unified callback type `CallbackFunc`: - - Current version of asyncdispatch uses many types of callbacks: - - * `proc ()` is used in callSoon() callbacks and Future[T] completion callbacks. - * `proc (fut: Future[T])` is used in Future[T] completion callbacks. - * `proc (fd: AsyncFD, bytesTransferred: Dword, errcode: OSErrorCode)` is used in Windows IO completion callbacks. - * `proc (fd: AsyncFD): bool` is used in Unix IO event callbacks. - - Such a large number of different types creates big problems in the storage and processing of callbacks and in interaction between callbacks. Lack of ability to pass custom user data to - a callback also creates difficulties and inefficiency with passing custom, user-defined data needed for using closures (one more allocation). - - To resolve this issue, we have introduced a unified callback type, `CallbackFunc`: - - ```nim - type - CallbackFunc* = proc (arg: pointer = nil) {.gcsafe.} - ``` - Also, one more type was introduced for the callback storage, `AsyncCallback`: - - ```nim - type - AsyncCallback* = object - function*: CallbackFunc - udata*: pointer - ``` - -2. The order of Future[T] completion callbacks: - - Current version of asyncdispatch processes Future[T] completion callbacks in reverse order, but asyncdispatch2 schedules callbacks in forward order: https://github.com/nim-lang/Nim/issues/7197 - -3. Changed the behavior of OS descriptor event callbacks: - - For some unknown reason, the current version of asyncdispatch uses seq[T] to hold a list of descriptor event listeners. However, in the asynchronous environment, there is no need for a list of event listeners. In Chronos, there is only one place for one READ listener and one place for one WRITE listener. - -4. Removed the default timeout value for the poll() procedure, which allows incorrect usage of asyncdispatch and produces 500-ms timeouts in correct usage. - -5. Changed the behavior of the scheduler in the poll() procedure, and fixed the following issues: - * https://github.com/nim-lang/Nim/issues/7758 - * https://github.com/nim-lang/Nim/issues/7197 - * https://github.com/nim-lang/Nim/issues/7193 - * https://github.com/nim-lang/Nim/issues/7192 - * https://github.com/nim-lang/Nim/issues/6846 - * https://github.com/nim-lang/Nim/issues/6929 - - -6. Chronos no longer uses `epochTime()`; instead, it uses the fastest time primitives for a specific OS, `fastEpochTime()`. Also, because MacOS supports only a millisecond resolution in `kqueue`, sub-millisecond resolution is not needed. For details, see https://github.com/nim-lang/Nim/issues/3909. - -7. Removed all IO primitives (`recv()`, `recvFrom()`, `connect()`, `accept()`, `send()`, and `sendTo()`) from the public API, and moved all their functionality into Transports. - -8. Introduced an `addTimer()` / `removeTimer()` callback interface. - -9. Introduced `removeReader()` for `addReader()` and `removeWriter()` for `addWriter()`. - -10. Changed the behavior of the `addReader()`, `addWriter()`, and `addTimer()` callbacks. Now, only the explicit removal of the callbacks must be supplied via `removeReader()`, `removeWriter()`, and `removeTimer()`. - -11. Added the support for the cross-platform `sendfile()` operation. - -12. Removed the expensive `AsyncEvent` and the support for hardware timers and `addProcess`. `addProcess` will be implemented as SubprocessTransport, while hardware-based `AsyncEvent` will be renamed to `ThreadAsyncEvent`. - -13. Added cheap synchronization primitives: `AsyncLock`, `AsyncEvent`, and `AsyncQueue[T]`. - ## Documentation You can find more documentation, notes and examples in [Wiki](https://github.com/status-im/nim-chronos/wiki).