Closed
Description
libuv is not suitable for an Eio backend. Problems include:
- Resources are attached to loops, which doesn't work if you want to share them between domains (Luv: deadlock sharing resources between domains? #386).
- It interferes with signals (luv fails to handle signals promptly #400), requiring a work-around.
- The OCaml bindings are unmaintained (eio_luv: write with wrong size on s390x #433, Eio.Path.load loads only first 4gb on big files #335, eio_luv: Process.spawn → “Switch hook removed from wrong domain!” #446).
- It interferes with other effect handlers (eio_luv: Losing effect handler scope #427).
- File operations can't be cancelled (Can't cancel reading on stdin with Luv #373, Opening a named pipe hangs libuv #357).
- It provides a second abstraction layer (Eio chooses a backend for your platform, then libuv chooses another one). It would be simpler to have only one OS abstraction.
- It doesn't support many useful features (e.g. reuse_addr and reuse_port parameters are ignored in luv #366,
openat
).
The main reason to use it was to get Windows support for free. However, that doesn't fully work (aantron/luv#142) and we hope to provide a native Windows backend instead.
On other systems, we now use the much simpler Eio_posix backend.
Metadata
Metadata
Assignees
Labels
No labels