package eio_main

  1. Overview
  2. Docs
Effect-based direct-style IO mainloop for OCaml

Install

Dune Dependency

Authors

Maintainers

Sources

eio-0.6.tbz
sha256=ead3eea352dd3d7d11a81ffdbeee6ca94d5e6b3f46de264b4e59689360b3ef38
sha512=0543643da7861f533f9b7ebee8aa30a6868b48ae1e19211666a9b860e9ff8d8a9e135f214a4603d0329f2027277701f6ffd900b6fba3405a538eebc301edaf29

CHANGES.md.html

v0.6

Changes:

  • Update to OCaml 5.0.0~beta1 (@anmonteiro @talex5 #346).

  • Add API for seekable read/writes (@nojb #307).

  • Add Flow.write (@haesbaert #318).
    This provides an optimised alternative to copy in the case where you are writing from a buffer.

  • Add Net.with_tcp_connect (@bikallem #302).
    Convenience function for opening a TCP connection.

  • Add Eio.Time.Timeout (@talex5 #320).
    Makes it easier to pass timeouts around.

  • Add Eio_mock.Clock (@talex5 #328).
    Control time in tests.

  • Add Buf_read.take_while1 and skip_while1 (@bikallem #309).
    These fail if no characters match.

  • Make the type parameter for Promise.t covariant (@anmonteiro #300).

  • Move list functions into a dedicated submodule (@raphael-proust #315).

  • Direct implementation of Flow.source_string (@c-cube #317).
    Slightly faster.

Bug fixes:

  • Condition.broadcast must interlock as well (@haesbaert #324).

  • Split the reads into no more than 2^32-1 for luv (@haesbaert @talex5 @EduardoRFS #343).
    Luv uses a 32 bit int for buffer sizes and wraps if the value passed is too big.

  • eio_luv: allow Net.connect to be cancelled (@talex5 @nojb #311).

  • eio_main: Use dedicated log source (@anmonteiro #326).

  • linux_eio: fix kernel version number in log message (@talex5 @nojb #314).

  • Account for stack differences in the socketpair test (issue #312) (@haesbaert #313).

Documentation:

  • Add Best Practices section to README (@talex5 #299).

  • Documentation improvements (@talex5 #295 #337).

v0.5

New features:

  • Add Eio.Condition (@TheLortex @talex5 #277).
    Allows a fiber to wait for some condition to become true.

  • Add Eio.Net.getaddrinfo and getnameinfo (@bikallem @talex5 #278 #288 #291).
    Convert between host names and addresses.

  • Add Eio.Debug (@talex5 #276).
    Currently, this allows overriding the traceln function.

  • Buf_write.create: make switch optional (@talex5 #283).
    This makes things easier for people porting code from Faraday.

Bug fixes:

  • Allow sharing of libuv poll handles (@patricoferris @talex5 #279).
    Luv doesn't allow two callers to watch the same file handle, so we need to handle that in Eio.

Other changes:

  • Upgrade to uring 0.4 (@talex5 #290).

  • Mention Mutex, Semaphore and Condition in the README (@talex5 #281).

v0.4

Note: Eio 0.4 drops compatibility with OCaml 4.12+domains. Use OCaml 5.0.0~alpha1 instead.

API changes:

  • Eio.Dir has gone. Use Eio.Path instead (@talex5 #266 #270).

  • Eio_unix.FD.{take,peek} were renamed to take_opt/peek_opt to make way for non-optional versions.

New features:

  • Fiber-local storage (@SquidDev #256).
    Attach key/value bindings to fibers. These are inherited across forks.

  • Eio.Path.{unlink,rmdir,rename} (@talex5 #264 #265).

  • Eio_main.run can now return a value (@talex5 #263).
    This is useful for e.g. cmdliner.

  • Eio_unix.socketpair (@talex5 #260).

  • Fiber.fork_daemon (@talex5 #252).
    Create a helper fiber that does not prevent the switch from exiting.

  • Add Fiber.{iter,map,filter,fiter_map} (@talex5 #248 #250).
    These are concurrent versions of the corresponding operations in List.

Bug fixes:

  • Fix scheduling fairness in luv backend (@talex5 #269).

  • Implement remaining shutdown commands for luv (@talex5 #268).

  • Fix IPv6 support with uring backend (@haesbaert #261 #262).

  • Use Eio.Net.Connection_reset exception in more places (@talex5 #257).

  • Report use of closed FDs better (@talex5 #255).
    Using a closed FD could previously cause the whole event loop to exit.

  • Some fixes for cancellation (@talex5 #254).

  • Ensure Buf_write still flushes if an exception is raised (@talex5 #246).

  • Do not allow close on accept_fork socket (@talex5 #245).

Documentation:

  • Document integrations with Unix, Lwt and Async (@talex5 #247).

  • Add a Dockerfile for easy testing (@talex5 #224).

v0.3

API changes:

  • Net.accept_sub is deprecated in favour of accept_fork (@talex5 #240).
    Fiber.fork_on_accept, which it used internally, has been removed.

  • Allow short writes in Read_source_buffer (@talex5 #239).
    The reader is no longer required to consume all the data in one go. Also, add Linux_eio.Low_level.writev_single to expose this behaviour directly.

  • Eio.Unix_perm is now Eio.Dir.Unix_perm.

New features:

  • Add Eio.Mutex (@TheLortex @talex5 #223).

  • Add Eio.Buf_write (@talex5 #235).
    This is a buffered writer for Eio sinks, based on Faraday.

  • Add Eio_mock library for testing (@talex5 #228).
    At the moment it has mock flows and networks.

  • Add Eio_mock.Backend (@talex5 #237 #238).
    Allows running tests without needing a dependency on eio_main. Also, as it is single-threaded, it can detect deadlocks in test code instead of just hanging.

  • Add Buf_read.{of_buffer, of_string, parse_string{,_exn}, return} (@talex5 #225).

  • Add <*> combinator to Buf_read.Syntax (@talex5 #227).

  • Add Eio.Dir.read_dir (@patricoferris @talex5 #207 #218 #219)

Performance:

  • Add Buf_read benchmark and optimise it a bit (@talex5 #230).

  • Inline Buf_read.consume to improve performance (@talex5 #232).

Bug fixes / minor changes:

  • Allow IO to happen even if a fiber keeps yielding (@TheLortex @talex5 #213).

  • Fallback for traceln without an effect handler (@talex5 #226).
    traceln now works outside of an event loop too.

  • Check for cancellation when creating a non-protected child context (@talex5 #222).

  • eio_linux: handle EINTR when calling getrandom (@bikallem #212).

  • Update to cmdliner.1.1.0 (@talex5 #190).

v0.2

  • Add support for UDP (@patricoferris #171).

  • Rename Fibre to Fiber (@talex5 #195). This is to match the compiler's spelling.

  • Switch to luv backend if uring can't be used (@talex5 #203). Useful on Windows with WSL, and also in Docker containers on older systems.

  • Eio_linux: cope with lack of fixed chunks (@talex5 #200).

    • If we run out of fixed memory, just use regular memory instead of waiting (which might deadlock).

    • If we try to allocate a fixed buffer and fail, we now just log a warning and continue without one.

  • Add support for FD passing with Eio_linux (@talex5 #199).

  • Add Eio_unix.FD.as_socket (@talex5 #193). Useful for working with existing libraries that provide a Unix.file_descr, or for receiving FDs from elsewhere (e.g. socket activation). Also, the Luv.{File,Handle}.of_luv functions now allow controlling whether to close the wrapped FD.

  • Add Eio_unix.sleep (@talex5 #188). Based on feedback that some people don't want to treat time as a capability. Possibly also useful for debugging race conditions.

  • Tidy up forking API (@talex5 #192). Moves some common code out the the individual backends.

  • Improve documentation (@talex5 #197 #194 #186 #185). In particular, explain more low-level details about how cancellation works.

  • Add an example Eio_null backend (@talex5 #189). This supports creating fibers, promises and cancellation, but provides no IO operations.

  • Effect.eff is now Effect.t in OCaml trunk (@talex5 #201).

v0.1

  • Initial release.

OCaml

Innovation. Community. Security.