Releases: robur-coop/miou
0.5.4
0.5.3
0.5.2
CHANGES:
- Add the Windows support (from our old
Unix.selectimplementation)
(@dinosaure, #94) - Use
-Werroronly on the released mode (@dinosaure, #93)
0.5.1
CHANGES:
- Fix a deadlock when we fall into an abnormal situation (when we broke rules)
(@dinosaure, #84) - Add
POLLHUPevent when we check if a file-descriptor is read-ready
(specially for pipe) (@madroach, @dinosaure, #89)
0.5.0
CHANGES:
-
Use
poll(2)/ppoll(2)instead ofselect(3P)(#75, @dinosaure, @haesbaert,
@hannesm, @backtracking)miou.unixnow uses thepoll(2)orppoll(2)function if available (the
choice is determined at compilation). It replaces the use ofselect(3P)and
improves performance. Miou no longer needs to build lists of file descriptors
to observe, but instead manipulates a bitv and an array containing these file
descriptors.The
bitvimplementation comes from the bitv library written by
@backtracking, who kindly allowed us to relicense it under MIT.Finally, a special thanks to @haesbaert, who originally wrote
[ocaml-iomux][iomux], which provides a portable implementation and an OCaml
interface for usingpoll(2)/ppoll(2).The use of
poll(2)/ppoll(2)should improve performance, as noted in the
PR, particularly with regard to our httpcats HTTP server.It should be noted that
dune-configuratorhas been added as a new dependency
for Miou. However, support fortopkg/ocamlbuildis still maintained (and
it is possible to compile and install Miou with this build system). -
Correctly clean-up internals structures used by domains when we call multiple
timesMiou_unix.runand clean-up cancelled file-descriptors
(#82, @dinosaure) -
Synchronize
dom0when one domain receive a signal (#78, @omegametabroccolo,
@dinosaure, @reynir, partially fix #77) -
Add
Miou.Ownership.releaseto disown and release a resource
(@dinosaure, #79)
0.4.0
CHANGES:
- Fix the suspension mechanism and allow the user to pass a function which will
be executed when the suspension is confirmed by Miou (@dinosaure, #58) - Clean-up correctly cancelled syscalls (@dinosaure, #59)
- Fix the number of orphans we count (@dinosaure, #60)
- Do some micro-optimisations when we use only one core (@dinosaure, #61)
- Add tests about
waitpidand document it (@dinosaure, @mbarbin, #64, #66) - Explain into the documentation the Miou behavior about exceptions
(@kit-ty-kate, @dinosaure, #67) - Update the README.md and add a CODE_OF_CONDUCT.md (@dinosaure, #68)
- Fix our tests on Windows (@dinosaure, #69)
0.3.1
CHANGES:
- Notice the domain if it needs to look into the shared heap if a task is ready
to be transfered (@dinosaure, #41) - Don't use
Option.valuebutmatch .. withto calculate the optional length
forMiou_unix.{read,write}(@kit-ty-kate, #44) - Use
List.iterinstead ofHashtbl.iterfor internal kept file-descriptors
ofMiou_unix(@dinosaure, #45) - Improve the documentation of
Miou_unixabout suspended syscalls (@dinosaure,
@kit-ty-kate, #43) - Export
reraise(@dinosaure, #46) - Fix an issue on the
dom0and observe if some tasks must be transfered to it
(@dinosaure, #48) - Fix documentation (@mbarbin, #47)
- Fix the formatter (@mbarbin, #51)
- Upgrade miou to
ocamlformat.0.27.0(@mbarbin, #52) - Add
x-maintenance-intent(@hannesm, #56) - Improve the documentation and some
odocwarnings (@mbarbin, #53, #54)
0.3.0
CHANGES:
- Set the internal pipe used to interrupt a domain to a non-blocking mode and
remove the usage of an atomic which protect how we fill the pipe
(@haesbaert, @dinosaure, #28) - Expose option to reuse addr/port when we
Miou_unix.bind_and_listen
(@ada2k, @dinosaure, #27) - Protect an illegal access to the orphan from a possibly parallel task which
does not own the orphan value
(@poytypic, @dinosaure, #31, #32) - Be able to pin a specific domain when we want to launch a parallel task
(@dinosaure, #34) - Expose the
Miou.Backoffmodule which can be useful for users
(@dinosaure, #35) - Fix or improve (from the maintainance point-of-view) the
Miou.Queuemodule
and some internal parts of Miou about the usage of atomics
(@dinosaure, @polytypic, #36, #33) - Prefer to require a
finaliserfunction for theeventsvalue and actually
close the internalUnix.pipeused to interrupt domain than to use
Gc.finaliserand possibly leak file-descriptors
(spotted by @hannesm, @dinosaure, #37)
0.2.0
CHANGES:
-
Don't try to abusively fill the pipe to interrupt a domain
Interrupting a domain involves writing to a pipe to interrupt the
select(2)
if it is running. The pipe has a limited memory, depending on the system, and
if you ask to interrupt a domain too much, you end up blocking thewrite.
This patch prevents writing to the pipe if it has not yet been read.(@dinosaure, #46)
-
Expose the Sequence module
(@dinosaure, #47) -
Be able to add a hook (effect free) into the scheduler
It is possible to add a hook to the scheduler. If the user wants to execute a
function to a domain each time the domain is busy with a task, they can do so.
However, the effects are not managed in the passed function.(@dinosaure, #48)
-
Add
Miou.Lazy, a domain-safeLazymodule likeStdlib.Lazy
(@dinosaure, initially implemented by @polytypic, #49) -
Raise an exception if the user uses syscalls (from
Miou_unix) andMiou.run
instead ofMiou_unix.runIf a user uses a suspend function offered by
Miou_unixbut does not use
Miou_unix.run, the programme may block indefinitely. This patch prevents
such an error by raising an exception if we want to add a suspension point and
we haven't specified how to handle it (if we useMiou.runinstead of
Miou_unix.run).(@dinosaure, reported by @kit-ty-kate, #51)
-
Rename
Miou.set_signaltoMiou.sys_signal
(@dinosaure, #50) -
Improve
Miou_unix.{read,write}
(@kit-ty-kate, @dinosaure, #52, 2f552a6, #54) -
Fix an issue related to the dom0 and pending tasks locked by mutexes
Tasks may have been transmitted to dom0 while it was executing a task and
before theselect(2). This patch resynchronises the pending tasks in dom0's
TODO-list before making theselect(2): specifically to find out whether the
select(2)can block indefinitely or not. This patch also cleans up the old
states of the tables used byMiou_unixif it is used on an ongoing basis (as
in the case of tests).(@dinosaure, #53)
-
Add
Miou.Domain.available
(@dinosaure, #53) -
Fix a race condition (observed with TSan) when we wait the cancellation of a
childrenThis patch changes Miou's behaviour a little when waiting for a task to be
cancelled and prevents invalid access to a value that does not belong to the
current domain (and which can be modified by another domain). Thanks
@OlivierNicole and @fabbing for their advice on using TSan.(@dinosaure, #56)
-
Update the layout of Miou to avoid conflicts with other packages (like
backoff)
(@dinosaure, reported by @patricoferris, #57) -
OCaml 5.3 support
(@kit-ty-kate, github#22) -
Rename
Miou.call_cctoMiou.async
(@dinosaure, @kit-ty-kate, @Armael, github#23)
0.1.0
CHANGES:
A major change in Miou's internals to incorporate the excellent work of
Vesa Karvonen available in his picos project. This change
integrates the Trigger module and the Computation
module. It also uses the Await effect, which we hope will be
standardised.
This addition has enabled us to integrate the new Condition and
Mutex modules.
This change has enabled us to correctly formalise the resources used by our
scheduler and to release them accordingly, particularly with regard to the
cancellation whose behaviour is better defined.
We also took the opportunity to integrate the priority queue extracted from the
Vocal project and checked using Why3. We would like to thank
their authors and maintainers for their help.
Finally, the API has changed very little and only ownership is no longer
mandatory when using the Miou_unix module but is still available
through the Miou_unix.Ownership module.
As such, we have written a tutorial that explains in detail what
Miou can offer and how to create applications with it. It's also a good
introduction to using effects and implementing a mini echo server and mini
scheduler.
The changes are far too profound to establish an accurate Changelog since the
last beta. However, we have tried to respect our previous tests as much as
possible and ensure continuity in what Miou has to offer despite its beta
status. We hope that, given the changes described above, users will understand
this breaking-change.