blockio 0.1.0.0 → 0.1.0.1
raw patch · 3 files changed
+59/−3 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- CHANGELOG.md +4/−0
- README.md +49/−0
- blockio.cabal +6/−3
CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for blockio +## 0.1.0.1 -- 2025-07-15++* Include the README in the distributed files.+ ## 0.1.0.0 -- 2025-07-15 * First version. Released on an unsuspecting world.
+ README.md view
@@ -0,0 +1,49 @@+# blockio++Perform batches of disk I/O operations. Performing batches of disk I/O can lead+to performance improvements over performing each disk I/O operation+individually. Performing batches of disk I/O *concurrently* can lead to an even+bigger performance improvement depending on the implementation of batched I/O.++The batched I/O functionality in the library is separated into an *abstract+interface* and *implementations* of that abstract interface. The advantage of+programming against an abstract interface is that code can be agnostic to the+implementation of the interface, allowing implementations to be freely swapped+out. The library provides multiple implementations of batched I/O:+platform-dependent implementations using the *real* file system (using+asynchronous I/O), and a simulated implementation for testing purposes.++See the `System.FS.BlockIO` module for an example of how to use the library.++On Linux systems the *real* implementation is backed by+[blockio-uring](https://hackage.haskell.org/package/blockio-uring), a library+for asynchronous I/O that achieves good performance when performing batches+concurrently. On Windows and MacOS systems the *real* implementation currently+simply performs each I/O operation sequentially, which should achieve about the+same performance as using non-batched I/O, but the library could be extended+with asynchronous I/O implementations for Windows and MacOS as well. The+simulated implementation also performs each I/O operation sequentially.++As mentioned before, the batched I/O functionality is separated into an+*abstract interface* and *implementations* of that abstract interface. The+advantage of programming against an abstract interface is that code can be+agnostic to the implementation of the interface. For example, we could run code+in production using the real file system, but we could also run the same code in+a testing environment using a simulated file system. We could even switch from a+default implementation to a more performant implementation in production if the+performant implementation is available. Lastly, the abstract interface allows us+to program against the file system in a uniform manner across different+platforms, i.e., operating systems.++The `blockio` library defines the abstract interface for batched I/O. The+library is an extension of the+[fs-api](https://hackage.haskell.org/package/fs-api) library, which defines an+abstract interface for (basic) file system I/O. Both `blockio` and `fs-api`+provide an implementation of their interfaces using the real file system in+`IO`.++The `blockio:sim` sub-library defines an implementation of the abstract+interface from `blockio` that *simulates* batched I/O. This sub-library is an+extension of the [fs-sim](https://hackage.haskell.org/package/fs-sim) library,+which defines an implementation of the abstract interface from `fs-api` that+simulates (basic) file system I/O.
blockio.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.4 name: blockio-version: 0.1.0.0+version: 0.1.0.1 synopsis: Perform batches of disk I/O operations. description: Perform batches of disk I\/O operations. Performing batches of disk I\/O can@@ -31,7 +31,10 @@ copyright: (c) 2023-2025 Cardano Development Foundation category: System build-type: Simple-extra-doc-files: CHANGELOG.md+extra-doc-files:+ CHANGELOG.md+ README.md+ tested-with: GHC ==9.2 || ==9.4 || ==9.6 || ==9.8 || ==9.10 || ==9.12 source-repository head@@ -43,7 +46,7 @@ type: git location: https://github.com/IntersectMBO/lsm-tree subdir: blockio- tag: blockio-0.1.0.0+ tag: blockio-0.1.0.1 common warnings ghc-options: