···11+## v0.4
22+33+New features:
44+55+- Add `Uring.timeout` (@bikallem #59).
66+77+- Add `Uring.read` and `Uring.write` (@haesbaert #62).
88+ These are simple wrappers for read(2) and write(2).
99+1010+- Add `Uring.unlink` (@talex5 #65).
1111+ This uses unlinkat(2), and so can also be used to remove directories.
1212+1313+- Add support for uring probes (@talex5 #70).
1414+ Allows checking whether a feature is supported by the kernel at runtime.
1515+1616+- Rename `peek` to `get_cqe_nonblocking` (@talex5 #67).
1717+ The old name was confusing because it does remove the item from the ring.
1818+1919+- Update to liburing 2.2 (@talex5 #56).
2020+2121+- Add `Uring.active_ops` (@talex5 #68).
2222+ Avoids needing to track the value returned by `submit`, which is important as it is sometimes called automatically.
2323+2424+- Add `Uring.iov_max` constant (@talex5 #76).
2525+2626+- Add `Uring.get_debug_stats` (@talex5 #64).
2727+ This should make it easier to check that the uring is behaving as expected.
2828+2929+Performance:
3030+3131+- Introduce a Sketch buffer per Uring (@haesbaert #63).
3232+ The main motivation of this change is to avoid having one malloc per packet in readv(2), writev(2) and friends.
3333+3434+- Use `submit_and_wait` where appropriate (@haesbaert #69).
3535+3636+- Add a `readv` benchmark (@talex5 #64).
3737+3838+- Avoid unnecessary use of `CAMLparam` in the C stubs (@haesbaert #61).
3939+4040+Bug fixes:
4141+4242+- Prevent ring from being used after exit (@talex5 #78).
4343+4444+Build changes:
4545+4646+- Remove use of notty for formatting benchmark results (@talex5 #71).
4747+ It prevented uring from being tested on OCaml 5.
4848+4949+- Use MDX for README (@talex5 #57).
5050+5151+- Convert tests to MDX (@talex5 #58 #73).
5252+5353+- Use opam-repository syntax for license (@kit-ty-kate #72).
5454+5555+- Remove internal `is_dirty` flag (@talex5 #77).
5656+157## v0.3
258359Breaking changes: