6.5 KiB
0.6.0
- Added a futex-like
Awaitableabstraction as thepicos_std.awaitablelibrary (@polytypic) - Changed the core Picos library to be internally built from a single
.mlfile (@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
lastlyas a safe alternative toFun.protect(@polytypic) - Workarounds for the
Urilibrary not being threadsafe (@polytypic) - Fixed to raise proper error when
Picos_io_selecthas not been configured properly (@polytypic) - Forbid cancelation propagation during
releasecalls in thepicos_std.finallylibrary (@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).poisonto(Ivar|Stream).poison_atand added(Ivar|Stream).poisonwith optional?callstack:int(@polytypic)
0.5.0
-
Major additions, changes, bug fixes, improvements, and restructuring (@polytypic, @c-cube)
-
Additions:
- Minimalistic Cohttp implementation
- Implicitly propagated
Flockof fibers for structured concurrency - Option to terminate
BundleandFlockon return Eventabstraction- Synchronization and communication primitives:
- Incremental variable or
Ivar - Countdown
Latch SemaphoreStreamof events
- Incremental variable or
- Multi-producer, multi-consumer lock-free queue optimized for schedulers
- Multithreaded (work-stealing) FIFO scheduler
- Support
quotafor FIFO based schedulers - Transactional interface for atomically completing multiple
Computations
-
Changes:
- Redesigned resource management based on
('r -> 'a) -> 'afunctions - Redesigned
spawninterface allowingFLSentries to be populated before spawn - Introduced concept of fatal errors, which must terminate the scheduler or the whole program
- Simplified
FLSinterface - Removed
Exn_bt
- Redesigned resource management based on
-
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
- lib:
- pkg:
picos_aux- lib:
picos_aux.htbl - lib:
picos_aux.mpmcq - lib:
picos_aux.mpscq - lib:
picos_aux.rc
- lib:
- pkg:
picos_lwt- lib:
picos_lwt - lib:
picos_lwt.unix
- lib:
- pkg:
picos_meta(integration tests) - pkg:
picos_mux- lib:
picos_mux.fifo - lib:
picos_mux.multififo - lib:
picos_mux.random - lib:
picos_mux.thread
- lib:
- pkg:
picos_std- lib:
picos_std.event - lib:
picos_std.finally - lib:
picos_std.structured - lib:
picos_std.sync
- lib:
- pkg:
picos_io- lib:
picos_io - lib:
picos_io.fd - lib:
picos_io.select
- lib:
- pkg:
picos_io_cohttp- lib:
picos_io_cohttp
- lib:
- pkg:
-
0.4.0
-
Renamed
Picos_mpsc_queuetoPicos_mpscq. (@polytypic) -
Core API changes:
- Added
Computation.returned. (@polytypic)
- Added
-
Lwtinterop improvements:-
Fixed
Picos_lwthandling ofCancel_afterto not raise in case of cancelation. (@polytypic) -
Redesigned
Picos_lwtto take aSystemmodule, which must implement a semi thread-safe trigger mechanism to allow unblockingLwtpromises on the main thread. (@polytypic) -
Added
Picos_lwt_unixinterface toLwt, which includes an internalSystemmodule implemented usingLwt_unix. (@polytypic) -
Dropped thunking from
Picos_lwt.await. (@polytypic)
-
-
Added a randomized multicore scheduler
Picos_randosfor testing. (@polytypic) -
Changed
Picos_select.check_configuredto always (re)configure signal handling on the current thread. (@polytypic) -
Picos_structured:- Added a minimalistic
Promiseabstraction. (@polytypic) - Changed to more consistently not treat
Terminateas an error. (@polytypic)
- Added a minimalistic
-
Changed schedulers to take
~forbidas an optional argument. (@polytypic) -
Various minor additions, fixes, and documentation improvements. (@polytypic)
0.3.0
-
Core API changes:
- Added
Fiber.set_computation, which represents a semantic change - Renamed
Fiber.computationtoFiber.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
-
Added a basic user level structured concurrent programming library
Picos_structured(@polytypic) -
Added a functorized
Picos_lwtproviding direct style effects based interface to programming with Lwt (@polytypic) -
Added missing
Picos_stdio.Unix.select(@polytypic)
0.2.0
- Documentation fixes and restructuring (@polytypic)
- Scheduler friendly
waitpid,wait, andsysteminPicos_stdio.Unixfor platforms other than Windows (@polytypic) - Added
Picos_select.configureto allow, and sometimes require, configuringPicos_selectfor co-operation with libraries that also deal with signals (@polytypic) - Moved
Picos_tlsintoPicos_thread.TLS(@polytypic) - Enhanced
sleepandsleepfinPicos_stdio.Unixto block in a scheduler friendly manner (@polytypic)
0.1.0
-
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— BasicThreadbased 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— BasicUnix.selectbased 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.