Skip to content

Tags: ocaml-multicore/picos

Tags

0.6.0

Toggle 0.6.0's commit message
Release 0.6.0

CHANGES:

- Added a futex-like `Awaitable` abstraction as the `picos_std.awaitable`
  library (@polytypic)
- Changed the core Picos library to be internally built from a single `.ml` file
  (@polytypic)
- Optimized heap and stack usage of fibers and resource cleanup mechanisms and
  added workarounds for compiler generated space leaks due to closures
  (@polytypic)
- Added `lastly` as a safe alternative to `Fun.protect` (@polytypic)
- Workarounds for the `Uri` library not being threadsafe (@polytypic)
- Fixed to raise proper error when `Picos_io_select` has not been configured
  properly (@polytypic)
- Forbid cancelation propagation during `release` calls in the
  `picos_std.finally` library (@polytypic)
  - This is a change in behaviour and could be seen as a breaking change, but it
    should really be considered a bug fix.
- Renamed `(Ivar|Stream).poison` to `(Ivar|Stream).poison_at` and added
  `(Ivar|Stream).poison` with optional `?callstack:int` (@polytypic)

0.5.0

Toggle 0.5.0's commit message
Release 0.5.0

CHANGES:

- Major additions, changes, bug fixes, improvements, and restructuring
  (@polytypic, @c-cube)

  - Additions:

    - Minimalistic Cohttp implementation
    - Implicitly propagated `Flock` of fibers for structured concurrency
    - Option to terminate `Bundle` and `Flock` on return
    - `Event` abstraction
    - Synchronization and communication primitives:
      - Incremental variable or `Ivar`
      - Countdown `Latch`
      - `Semaphore`
      - `Stream` of events
    - Multi-producer, multi-consumer lock-free queue optimized for schedulers
    - Multithreaded (work-stealing) FIFO scheduler
    - Support `quota` for FIFO based schedulers
    - Transactional interface for atomically completing multiple `Computation`s

  - Changes:

    - Redesigned resource management based on `('r -> 'a) -> 'a` functions
    - Redesigned `spawn` interface allowing `FLS` entries to be populated before
      spawn
    - Introduced concept of fatal errors, which must terminate the scheduler or
      the whole program
    - Simplified `FLS` interface

  - Improvements:

    - Signficantly reduced per fiber memory usage of various sample schedulers

  - Picos has now been split into multiple packages and libraries:

    - pkg: `picos`
      - lib: `picos`
      - lib: `picos.domain`
      - lib: `picos.thread`
    - pkg: `picos_aux`
      - lib: `picos_aux.htbl`
      - lib: `picos_aux.mpmcq`
      - lib: `picos_aux.mpscq`
      - lib: `picos_aux.rc`
    - pkg: `picos_lwt`
      - lib: `picos_lwt`
      - lib: `picos_lwt.unix`
    - pkg: `picos_meta` (integration tests)
    - pkg: `picos_mux`
      - lib: `picos_mux.fifo`
      - lib: `picos_mux.multififo`
      - lib: `picos_mux.random`
      - lib: `picos_mux.thread`
    - pkg: `picos_std`
      - lib: `picos_std.event`
      - lib: `picos_std.finally`
      - lib: `picos_std.structured`
      - lib: `picos_std.sync`
    - pkg: `picos_io`
      - lib: `picos_io`
      - lib: `picos_io.fd`
      - lib: `picos_io.select`
    - pkg: `picos_io_cohttp`
      - lib: `picos_io_cohttp`

ocaml-2024

Toggle ocaml-2024's commit message
Make example less flaky

0.4.0

Toggle 0.4.0's commit message
Release 0.4.0

CHANGES:

- Renamed `Picos_mpsc_queue` to `Picos_mpscq`. (@polytypic)

- Core API changes:

  - Added `Computation.returned`. (@polytypic)

- `Lwt` interop improvements:

  - Fixed `Picos_lwt` handling of `Cancel_after` to not raise in case of
    cancelation. (@polytypic)

  - Redesigned `Picos_lwt` to take a `System` module, which must implement a
    semi thread-safe trigger mechanism to allow unblocking `Lwt` promises on the
    main thread. (@polytypic)

  - Added `Picos_lwt_unix` interface to `Lwt`, which includes an internal
    `System` module implemented using `Lwt_unix`. (@polytypic)

  - Dropped thunking from `Picos_lwt.await`. (@polytypic)

- Added a randomized multicore scheduler `Picos_randos` for testing.
  (@polytypic)

- Changed `Picos_select.check_configured` to always (re)configure signal
  handling on the current thread. (@polytypic)

- `Picos_structured`:

  - Added a minimalistic `Promise` abstraction. (@polytypic)
  - Changed to more consistently not treat `Terminate` as an error. (@polytypic)

- Changed schedulers to take `~forbid` as an optional argument. (@polytypic)

- Various minor additions, fixes, and documentation improvements. (@polytypic)

0.3.0

Toggle 0.3.0's commit message
Release 0.3.0

CHANGES:

- Core API changes:

  - Added `Fiber.set_computation`, which represents a semantic change
  - Renamed `Fiber.computation` to `Fiber.get_computation`
  - Added `Computation.attach_canceler`
  - Added `Fiber.sleep`
  - Added `Fiber.create_packed`
  - Removed `Fiber.try_attach`
  - Removed `Fiber.detach`

  Most of the above changes were motivated by work on and requirements of the
  added structured concurrency library (@polytypic)

- Added a basic user level structured concurrent programming library
  `Picos_structured` (@polytypic)

- Added a functorized `Picos_lwt` providing direct style effects based interface
  to programming with Lwt (@polytypic)

- Added missing `Picos_stdio.Unix.select` (@polytypic)

0.2.0

Toggle 0.2.0's commit message
Release 0.2.0

CHANGES:

- Documentation fixes and restructuring (@polytypic)
- Scheduler friendly `waitpid`, `wait`, and `system` in `Picos_stdio.Unix` for
  platforms other than Windows (@polytypic)
- Added `Picos_select.configure` to allow, and sometimes require, configuring
  `Picos_select` for co-operation with libraries that also deal with signals
  (@polytypic)
- Moved `Picos_tls` into `Picos_thread.TLS` (@polytypic)
- Enhanced `sleep` and `sleepf` in `Picos_stdio.Unix` to block in a scheduler
  friendly manner (@polytypic)

0.1.0

Toggle 0.1.0's commit message
Release 0.1.0

CHANGES:

- First experimental release of Picos.

  Core:

  - `picos` — A framework for interoperable effects based concurrency.

  Sample schedulers:

  - `picos.fifos` — Basic single-threaded effects based Picos compatible
    scheduler for OCaml 5.
  - `picos.threaded` — Basic `Thread` based Picos compatible scheduler for
    OCaml 4.

  Scheduler agnostic libraries:

  - `picos.sync` — Basic communication and synchronization primitives for Picos.
  - `picos.stdio` — Basic IO facilities based on OCaml standard libraries for
    Picos.
  - `picos.select` — Basic `Unix.select` based IO event loop for Picos.

  Auxiliary libraries:

  - `picos.domain` — Minimalistic domain API available both on OCaml 5 and on
    OCaml 4.
  - `picos.exn_bt` — Wrapper for exceptions with backtraces.
  - `picos.fd` — Externally reference counted file descriptors.
  - `picos.htbl` — Lock-free hash table.
  - `picos.mpsc_queue` — Multi-producer, single-consumer queue.
  - `picos.rc` — External reference counting tables for disposable resources.
  - `picos.tls` — Thread-local storage.