package picos
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=0f2dcc67ddd127c68f388f2c36a8725a15723e6aeba7d1ddfcf4e016b54a4674
sha512=bee2a99458a451be285e2f13cc3a9deda8eed4e118bcdfc51c256d2da5bae92eec3386c318fe42dcf451421543b519dc064967158b3f417c9b7b44ce97c5fb75
Description
A framework for building interoperable elements of effects based cooperative concurrent programming models.
Published: 09 Apr 2024
README
README.md
API reference · Benchmarks · Stdlib Benchmarks
Picos — Interoperable effects based concurrency
Picos, or pico-scheduler framework, is a framework for building interoperable elements of effects based cooperative concurrent programming models.
The picos
package is divided into many small(er) libraries. The core is a small library, picos
, that defines the essential interoperability framework. The rest of the libraries are either sample schedulers (e.g. picos.fifos
, and picos.threaded
), scheduler agnostic libraries (e.g. picos.sync
, picos.stdio
, and picos.select
), or auxiliary libraries.
⚠️ Please note that Picos is still considered experimental and unstable.
Why?
There are already several concrete effects-based concurrent programming libraries and models being developed. Here is a list of some such publicly available projects:*
Affect — "Composable concurrency primitives with OCaml effects handlers (unreleased)",
Domainslib — "Nested-parallel programming",
Eio — "Effects-Based Parallel IO for OCaml",
Fuseau — "Lightweight fiber library for OCaml 5",
Miou — "A simple scheduler for OCaml 5",
Moonpool — "Commodity thread pools for OCaml 5", and
Riot — "An actor-model multi-core scheduler for OCaml 5".
All of the above libraries are mutually incompatible with each other with the exception that Domainslib, Eio, and Moonpool implement an earlier interoperability proposal called domain-local-await or DLA, which allows a concurrent programming library like Kcas* to work on all of those. Unfortunately, DLA, by itself, is known to be insufficient and the design has not been universally accepted.
By introducing an interoperability framework and key libraries, such as an IO library, for such a framework, we hope that the scarce resources of the OCaml community are not further divided into mutually incompatible ecosystems built on top of such mutually incompatible concurrent programming libraries, while, simultaneously, making it possible to experiment with many kinds of concurrent programming models.
It should be technically* possible to
make all of the previously mentioned libraries Picos compatible, i.e. to handle the Picos effects, and
have their elements implemented in Picos, i.e. to make them usable on other Picos-compatible schedulers.
Please read the introduction section of the reference manual for further information.
Dependencies (7)
-
ocaml
>= "4.12.0"
-
multicore-magic
>= "2.1.0"
-
psq
>= "0.2.1"
-
mtime
>= "2.0.0"
-
thread-local-storage
>= "0.1" & < "0.2"
-
backoff
>= "0.1.0"
-
dune
>= "3.14"
Dev Dependencies (13)
-
odoc
>= "2.4.1" & with-doc
-
sherlodoc
>= "0.2" & with-doc
-
dscheck
>= "0.4.0" & with-test
-
conf-npm
arch != "x86_32" & arch != "riscv64" & with-test
-
js_of_ocaml
>= "5.4.0" & with-test
-
domain_shims
>= "0.1.0" & with-test
-
ocaml-version
>= "3.6.4" & with-test
-
mdx
>= "2.4.0" & with-test
-
qcheck-multicoretests-util
>= "0.3" & with-test
-
qcheck-stm
>= "0.3" & with-test
-
qcheck-core
>= "0.21.2" & with-test
-
alcotest
>= "1.7.0" & with-test
-
multicore-bench
>= "0.1.2" & with-test
Used by
None
Conflicts
None