rsloop 0.1.52__tar.gz → 0.1.54__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. {rsloop-0.1.52 → rsloop-0.1.54}/.github/workflows/anyio.yml +2 -2
  2. {rsloop-0.1.52 → rsloop-0.1.54}/.github/workflows/tests.yml +32 -8
  3. {rsloop-0.1.52 → rsloop-0.1.54}/.github/workflows/vibeio-native.yml +2 -2
  4. {rsloop-0.1.52 → rsloop-0.1.54}/.github/workflows/wheels.yml +5 -5
  5. {rsloop-0.1.52 → rsloop-0.1.54}/Cargo.lock +279 -15
  6. {rsloop-0.1.52 → rsloop-0.1.54}/Cargo.toml +7 -4
  7. {rsloop-0.1.52 → rsloop-0.1.54}/PKG-INFO +3 -3
  8. {rsloop-0.1.52 → rsloop-0.1.54}/README.md +1 -1
  9. {rsloop-0.1.52 → rsloop-0.1.54}/benches/compare_event_loops.py +32 -0
  10. rsloop-0.1.54/benches/scheduler_workloads.py +98 -0
  11. rsloop-0.1.54/docs/allocator-batch-results.md +146 -0
  12. {rsloop-0.1.52 → rsloop-0.1.54}/docs/development.md +52 -1
  13. {rsloop-0.1.52 → rsloop-0.1.54}/docs/hotpath-lab.md +23 -5
  14. rsloop-0.1.54/docs/hotpath-rs-optimization.md +44 -0
  15. rsloop-0.1.54/docs/hotpath-rs-profile.md +74 -0
  16. rsloop-0.1.54/docs/pyo3-layout-analysis.md +180 -0
  17. rsloop-0.1.54/docs/rsloop-bindings-performance.md +121 -0
  18. rsloop-0.1.54/docs/timer-optimization.md +131 -0
  19. {rsloop-0.1.52 → rsloop-0.1.54}/pyproject.toml +7 -3
  20. {rsloop-0.1.52 → rsloop-0.1.54}/rust-toolchain.toml +1 -1
  21. rsloop-0.1.54/scripts/compare_runtime_turns.py +86 -0
  22. {rsloop-0.1.52 → rsloop-0.1.54}/scripts/hotpath_lab.py +76 -6
  23. rsloop-0.1.54/scripts/profile_with_hotpath.py +82 -0
  24. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/fast_callbacks.rs +2 -2
  25. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/tasks.rs +36 -11
  26. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api.rs +3 -1
  27. {rsloop-0.1.52 → rsloop-0.1.54}/src/context.rs +6 -3
  28. {rsloop-0.1.52 → rsloop-0.1.54}/src/engine/callbacks.rs +89 -11
  29. {rsloop-0.1.52 → rsloop-0.1.54}/src/engine/commands.rs +10 -5
  30. {rsloop-0.1.52 → rsloop-0.1.54}/src/engine/dispatcher.rs +8 -0
  31. {rsloop-0.1.52 → rsloop-0.1.54}/src/engine/loop_core.rs +44 -5
  32. {rsloop-0.1.52 → rsloop-0.1.54}/src/lib.rs +2 -0
  33. {rsloop-0.1.52 → rsloop-0.1.54}/src/module_init.rs +5 -0
  34. rsloop-0.1.54/src/profile.rs +36 -0
  35. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/core_events.rs +4 -0
  36. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/core_write.rs +12 -0
  37. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/fast.rs +12 -0
  38. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/py_transport.rs +4 -0
  39. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/server_core.rs +7 -0
  40. rsloop-0.1.54/src/vibeio/batch_allocator.rs +355 -0
  41. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/executor.rs +49 -4
  42. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/fs/mod.rs +9 -21
  43. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/lib.rs +3 -0
  44. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/process/mod.rs +4 -3
  45. {rsloop-0.1.52 → rsloop-0.1.54}/tests/test_fast_callbacks.py +81 -0
  46. {rsloop-0.1.52 → rsloop-0.1.54}/tests/test_local_timers.py +25 -0
  47. {rsloop-0.1.52 → rsloop-0.1.54}/tests/tooling/test_benchmark_loops.py +47 -0
  48. {rsloop-0.1.52 → rsloop-0.1.54}/tests/tooling/test_hotpath_lab.py +26 -8
  49. {rsloop-0.1.52 → rsloop-0.1.54}/uv.lock +13 -55
  50. {rsloop-0.1.52 → rsloop-0.1.54}/.cargo/config.toml +0 -0
  51. {rsloop-0.1.52 → rsloop-0.1.54}/.github/workflows/kani.yml +0 -0
  52. {rsloop-0.1.52 → rsloop-0.1.54}/.github/workflows/mkdocs.yml +0 -0
  53. {rsloop-0.1.52 → rsloop-0.1.54}/.github/workflows/update-version.yml +0 -0
  54. {rsloop-0.1.52 → rsloop-0.1.54}/.gitignore +0 -0
  55. {rsloop-0.1.52 → rsloop-0.1.54}/.python-version +0 -0
  56. {rsloop-0.1.52 → rsloop-0.1.54}/.vscode/settings.json +0 -0
  57. {rsloop-0.1.52 → rsloop-0.1.54}/LICENSE +0 -0
  58. {rsloop-0.1.52 → rsloop-0.1.54}/benches/compare_granian.py +0 -0
  59. {rsloop-0.1.52 → rsloop-0.1.54}/benches/workload_matrix.py +0 -0
  60. {rsloop-0.1.52 → rsloop-0.1.54}/build.rs +0 -0
  61. {rsloop-0.1.52 → rsloop-0.1.54}/docs/benchmarks.md +0 -0
  62. {rsloop-0.1.52 → rsloop-0.1.54}/docs/examples.md +0 -0
  63. {rsloop-0.1.52 → rsloop-0.1.54}/docs/fast-streams.md +0 -0
  64. {rsloop-0.1.52 → rsloop-0.1.54}/docs/free-threading.md +0 -0
  65. {rsloop-0.1.52 → rsloop-0.1.54}/docs/getting-started.md +0 -0
  66. {rsloop-0.1.52 → rsloop-0.1.54}/docs/how-it-works.md +0 -0
  67. {rsloop-0.1.52 → rsloop-0.1.54}/docs/index.md +0 -0
  68. {rsloop-0.1.52 → rsloop-0.1.54}/docs/project-structure.md +0 -0
  69. {rsloop-0.1.52 → rsloop-0.1.54}/docs/rsloop.png +0 -0
  70. {rsloop-0.1.52 → rsloop-0.1.54}/docs/rust-extensions.md +0 -0
  71. {rsloop-0.1.52 → rsloop-0.1.54}/docs/supported-features.md +0 -0
  72. {rsloop-0.1.52 → rsloop-0.1.54}/docs/verification.md +0 -0
  73. {rsloop-0.1.52 → rsloop-0.1.54}/examples/01_basics.py +0 -0
  74. {rsloop-0.1.52 → rsloop-0.1.54}/examples/02_fd_and_sockets.py +0 -0
  75. {rsloop-0.1.52 → rsloop-0.1.54}/examples/03_streams.py +0 -0
  76. {rsloop-0.1.52 → rsloop-0.1.54}/examples/04_unix_and_accepted_socket.py +0 -0
  77. {rsloop-0.1.52 → rsloop-0.1.54}/examples/05_pipes_signals_subprocesses.py +0 -0
  78. {rsloop-0.1.52 → rsloop-0.1.54}/examples/README.md +0 -0
  79. {rsloop-0.1.52 → rsloop-0.1.54}/examples/fastapi_service.py +0 -0
  80. {rsloop-0.1.52 → rsloop-0.1.54}/examples/granian_service.py +0 -0
  81. {rsloop-0.1.52 → rsloop-0.1.54}/examples/picows_server.py +0 -0
  82. {rsloop-0.1.52 → rsloop-0.1.54}/examples/picows_test.py +0 -0
  83. {rsloop-0.1.52 → rsloop-0.1.54}/examples/wsbench_websockets.py +0 -0
  84. {rsloop-0.1.52 → rsloop-0.1.54}/justfile +0 -0
  85. {rsloop-0.1.52 → rsloop-0.1.54}/mkdocs.yml +0 -0
  86. {rsloop-0.1.52 → rsloop-0.1.54}/pyrightconfig.json +0 -0
  87. {rsloop-0.1.52 → rsloop-0.1.54}/python/rsloop/__init__.py +0 -0
  88. {rsloop-0.1.52 → rsloop-0.1.54}/python/rsloop/__init__.pyi +0 -0
  89. {rsloop-0.1.52 → rsloop-0.1.54}/python/rsloop/_bootstrap.py +0 -0
  90. {rsloop-0.1.52 → rsloop-0.1.54}/python/rsloop/_loop.pyi +0 -0
  91. {rsloop-0.1.52 → rsloop-0.1.54}/python/rsloop/_loop_compat.py +0 -0
  92. {rsloop-0.1.52 → rsloop-0.1.54}/python/rsloop/_run.py +0 -0
  93. {rsloop-0.1.52 → rsloop-0.1.54}/python/rsloop/py.typed +0 -0
  94. {rsloop-0.1.52 → rsloop-0.1.54}/qualirs.toml +0 -0
  95. {rsloop-0.1.52 → rsloop-0.1.54}/scripts/build-pgo-wheels.sh +0 -0
  96. {rsloop-0.1.52 → rsloop-0.1.54}/scripts/build-wheels.sh +0 -0
  97. {rsloop-0.1.52 → rsloop-0.1.54}/scripts/generate_test_tls_certs.py +0 -0
  98. {rsloop-0.1.52 → rsloop-0.1.54}/scripts/prepare_anyio_rsloop_tests.py +0 -0
  99. {rsloop-0.1.52 → rsloop-0.1.54}/scripts/python-versions.sh +0 -0
  100. {rsloop-0.1.52 → rsloop-0.1.54}/scripts/run_all_tests.py +0 -0
  101. {rsloop-0.1.52 → rsloop-0.1.54}/scripts/run_python_tests.py +0 -0
  102. {rsloop-0.1.52 → rsloop-0.1.54}/scripts/run_rust_tests.py +0 -0
  103. {rsloop-0.1.52 → rsloop-0.1.54}/scripts/test-supported-pythons.sh +0 -0
  104. {rsloop-0.1.52 → rsloop-0.1.54}/src/async_event.rs +0 -0
  105. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/asyncgens.rs +0 -0
  106. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/asyncio_cache.rs +0 -0
  107. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/connections.rs +0 -0
  108. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/executor.rs +0 -0
  109. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/ffi_helpers.rs +0 -0
  110. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/lifecycle.rs +0 -0
  111. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/methods.rs +0 -0
  112. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/pipes.rs +0 -0
  113. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/pre_exec.rs +0 -0
  114. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/process_handles.rs +0 -0
  115. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/process_spawn.rs +0 -0
  116. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/process_stdio.rs +0 -0
  117. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/servers.rs +0 -0
  118. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/signals.rs +0 -0
  119. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/sock_ops.rs +0 -0
  120. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/socket_connect.rs +0 -0
  121. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/socket_operation.rs +0 -0
  122. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/sockets.rs +0 -0
  123. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/spawn_env.rs +0 -0
  124. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/tls_params.rs +0 -0
  125. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/loop_api/watchers.rs +0 -0
  126. {rsloop-0.1.52 → rsloop-0.1.54}/src/bindings/mod.rs +0 -0
  127. {rsloop-0.1.52 → rsloop-0.1.54}/src/blocking.rs +0 -0
  128. {rsloop-0.1.52 → rsloop-0.1.54}/src/build_metadata.rs +0 -0
  129. {rsloop-0.1.52 → rsloop-0.1.54}/src/engine/mod.rs +0 -0
  130. {rsloop-0.1.52 → rsloop-0.1.54}/src/engine/timer_entry.rs +0 -0
  131. {rsloop-0.1.52 → rsloop-0.1.54}/src/errors.rs +0 -0
  132. {rsloop-0.1.52 → rsloop-0.1.54}/src/platform/fd/mod.rs +0 -0
  133. {rsloop-0.1.52 → rsloop-0.1.54}/src/platform/fd/windows.rs +0 -0
  134. {rsloop-0.1.52 → rsloop-0.1.54}/src/platform/mod.rs +0 -0
  135. {rsloop-0.1.52 → rsloop-0.1.54}/src/python_names.rs +0 -0
  136. {rsloop-0.1.52 → rsloop-0.1.54}/src/rust_async.rs +0 -0
  137. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/mod.rs +0 -0
  138. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/process/core_events.rs +0 -0
  139. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/process/core_protocol.rs +0 -0
  140. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/process/core_state.rs +0 -0
  141. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/process/mod.rs +0 -0
  142. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/process/params.rs +0 -0
  143. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/process/py_pipes.rs +0 -0
  144. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/process/py_transport.rs +0 -0
  145. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/process/spawn.rs +0 -0
  146. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/process/worker.rs +0 -0
  147. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/accept.rs +0 -0
  148. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/buffers.rs +0 -0
  149. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/builder.rs +0 -0
  150. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/connect.rs +0 -0
  151. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/core_protocol.rs +0 -0
  152. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/core_state.rs +0 -0
  153. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/io_targets.rs +0 -0
  154. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/mod.rs +0 -0
  155. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/pipe_transport.rs +0 -0
  156. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/platform.rs +0 -0
  157. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/poll.rs +0 -0
  158. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/protocol.rs +0 -0
  159. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/py_server.rs +0 -0
  160. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/reader.rs +0 -0
  161. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/reader_task.rs +0 -0
  162. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/server.rs +0 -0
  163. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/server_types.rs +0 -0
  164. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/socket_transport.rs +0 -0
  165. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/stats.rs +0 -0
  166. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/tls_session.rs +0 -0
  167. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/tls_transport.rs +0 -0
  168. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/tuning.rs +0 -0
  169. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/worker.rs +0 -0
  170. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/write_queue.rs +0 -0
  171. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/stream/writer.rs +0 -0
  172. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/tls/material.rs +0 -0
  173. {rsloop-0.1.52 → rsloop-0.1.54}/src/transport/tls/mod.rs +0 -0
  174. {rsloop-0.1.52 → rsloop-0.1.54}/src/verification.rs +0 -0
  175. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/UPSTREAM.md +0 -0
  176. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/blocking/default.rs +0 -0
  177. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/blocking/mod.rs +0 -0
  178. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/builder.rs +0 -0
  179. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/driver/iocp.rs +0 -0
  180. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/driver/kqueue.rs +0 -0
  181. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/driver/mio.rs +0 -0
  182. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/driver/mock.rs +0 -0
  183. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/driver/mod.rs +0 -0
  184. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/driver/uring.rs +0 -0
  185. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/fd_inner.rs +0 -0
  186. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/fs/file.rs +0 -0
  187. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/fs/metadata.rs +0 -0
  188. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/fs/open_options.rs +0 -0
  189. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/io/buf.rs +0 -0
  190. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/io/mod.rs +0 -0
  191. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/io/pipe.rs +0 -0
  192. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/io/splice.rs +0 -0
  193. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/io/stdio.rs +0 -0
  194. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/io/util.rs +0 -0
  195. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/net/mod.rs +0 -0
  196. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/net/tcp/listener.rs +0 -0
  197. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/net/tcp/mod.rs +0 -0
  198. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/net/tcp/stream.rs +0 -0
  199. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/net/udp.rs +0 -0
  200. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/net/unix/listener.rs +0 -0
  201. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/net/unix/mod.rs +0 -0
  202. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/net/unix/stream.rs +0 -0
  203. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/accept.rs +0 -0
  204. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/accept_unix.rs +0 -0
  205. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/connect.rs +0 -0
  206. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/fsync.rs +0 -0
  207. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/hard_link.rs +0 -0
  208. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/io_util.rs +0 -0
  209. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/mkdir.rs +0 -0
  210. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/mod.rs +0 -0
  211. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/open.rs +0 -0
  212. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/read.rs +0 -0
  213. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/readat.rs +0 -0
  214. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/readiness.rs +0 -0
  215. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/readv.rs +0 -0
  216. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/recv.rs +0 -0
  217. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/recvfrom.rs +0 -0
  218. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/rename.rs +0 -0
  219. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/send.rs +0 -0
  220. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/sendto.rs +0 -0
  221. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/socket_addr.rs +0 -0
  222. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/splice.rs +0 -0
  223. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/statx.rs +0 -0
  224. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/symlink.rs +0 -0
  225. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/unlink.rs +0 -0
  226. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/waitpid.rs +0 -0
  227. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/write.rs +0 -0
  228. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/writeat.rs +0 -0
  229. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/op/writev.rs +0 -0
  230. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/process/reaper.rs +0 -0
  231. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/signal/mod.rs +0 -0
  232. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/signal/unix.rs +0 -0
  233. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/signal/windows.rs +0 -0
  234. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/task.rs +0 -0
  235. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/test_support.rs +0 -0
  236. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/time/interval.rs +0 -0
  237. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/time/mod.rs +0 -0
  238. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/time/sleep.rs +0 -0
  239. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/time/timeout.rs +0 -0
  240. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/timer.rs +0 -0
  241. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/util/async_wrap.rs +0 -0
  242. {rsloop-0.1.52 → rsloop-0.1.54}/src/vibeio/util/mod.rs +0 -0
  243. {rsloop-0.1.52 → rsloop-0.1.54}/tests/conftest.py +0 -0
  244. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/_smoke.py +0 -0
  245. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/aiohttp_test.py +0 -0
  246. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/anyio_test.py +0 -0
  247. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/beanie_test.py +0 -0
  248. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/daphne_test.py +0 -0
  249. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/django_asgi_test.py +0 -0
  250. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/django_orm_test.py +0 -0
  251. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/edgy_test.py +0 -0
  252. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/falcon_test.py +0 -0
  253. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/fastapi_test.py +0 -0
  254. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/faststream_test.py +0 -0
  255. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/hypercorn_test.py +0 -0
  256. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/litestar_granian_test.py +0 -0
  257. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/litestar_test.py +0 -0
  258. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/mangum_test.py +0 -0
  259. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/ormar_test.py +0 -0
  260. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/piccolo_test.py +0 -0
  261. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/quart_test.py +0 -0
  262. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/sanic_test.py +0 -0
  263. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/sqlalchemy_test.py +0 -0
  264. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/sqlmodel_test.py +0 -0
  265. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/starlette_test.py +0 -0
  266. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/tortoise_orm_test.py +0 -0
  267. {rsloop-0.1.52 → rsloop-0.1.54}/tests/integration/packages/uvicorn_test.py +0 -0
  268. {rsloop-0.1.52 → rsloop-0.1.54}/tests/proptest-regressions/transport/stream/fast.txt +0 -0
  269. {rsloop-0.1.52 → rsloop-0.1.54}/tests/test_buffered_delivery.py +0 -0
  270. {rsloop-0.1.52 → rsloop-0.1.54}/tests/test_compat.py +0 -0
  271. {rsloop-0.1.52 → rsloop-0.1.54}/tests/test_free_threading.py +0 -0
  272. {rsloop-0.1.52 → rsloop-0.1.54}/tests/test_local_sockets.py +0 -0
  273. {rsloop-0.1.52 → rsloop-0.1.54}/tests/test_numeric_addrinfo.py +0 -0
  274. {rsloop-0.1.52 → rsloop-0.1.54}/tests/test_run.py +0 -0
  275. {rsloop-0.1.52 → rsloop-0.1.54}/tests/test_stream_reader.py +0 -0
  276. {rsloop-0.1.52 → rsloop-0.1.54}/tests/test_subprocesses.py +0 -0
  277. {rsloop-0.1.52 → rsloop-0.1.54}/tests/test_tls.py +0 -0
  278. {rsloop-0.1.52 → rsloop-0.1.54}/tests/test_write_reentrancy.py +0 -0
  279. {rsloop-0.1.52 → rsloop-0.1.54}/tests/tooling/test_granian_benchmark.py +0 -0
  280. {rsloop-0.1.52 → rsloop-0.1.54}/tests/tooling/test_test_runner.py +0 -0
  281. {rsloop-0.1.52 → rsloop-0.1.54}/tests/typing/public_api.py +0 -0
@@ -69,9 +69,9 @@ jobs:
69
69
  cache-suffix: anyio-${{ matrix.os_name }}-py${{ matrix.python_version }}
70
70
 
71
71
  - name: Set up Rust
72
- uses: dtolnay/rust-toolchain@stable
72
+ uses: dtolnay/rust-toolchain@master
73
73
  with:
74
- toolchain: "1.98.1"
74
+ toolchain: "nightly-2026-09-25"
75
75
 
76
76
  - name: Cache Cargo registry
77
77
  uses: Swatinem/rust-cache@v2
@@ -48,9 +48,9 @@ jobs:
48
48
  python-version: "3.13"
49
49
 
50
50
  - name: Set up Rust
51
- uses: dtolnay/rust-toolchain@stable
51
+ uses: dtolnay/rust-toolchain@master
52
52
  with:
53
- toolchain: "1.98.1"
53
+ toolchain: "nightly-2026-09-25"
54
54
 
55
55
  - name: Cache Cargo registry
56
56
  uses: Swatinem/rust-cache@v2
@@ -80,9 +80,9 @@ jobs:
80
80
  python-version: "3.13"
81
81
 
82
82
  - name: Set up Rust
83
- uses: dtolnay/rust-toolchain@stable
83
+ uses: dtolnay/rust-toolchain@master
84
84
  with:
85
- toolchain: "1.98.1"
85
+ toolchain: "nightly-2026-09-25"
86
86
  components: clippy
87
87
 
88
88
  - name: Cache Cargo registry
@@ -91,6 +91,30 @@ jobs:
91
91
  - name: Run Clippy
92
92
  run: cargo clippy --all-targets --all-features --locked -- -D warnings
93
93
 
94
+ allocator-miri:
95
+ name: allocator miri (strict provenance)
96
+ runs-on: ubuntu-latest
97
+ timeout-minutes: 15
98
+ steps:
99
+ - name: Check out repository
100
+ uses: actions/checkout@v6
101
+ with:
102
+ persist-credentials: false
103
+
104
+ - name: Set up Rust
105
+ uses: dtolnay/rust-toolchain@master
106
+ with:
107
+ toolchain: "nightly-2026-09-25"
108
+ components: miri,rust-src
109
+
110
+ - name: Cache Cargo registry
111
+ uses: Swatinem/rust-cache@v2
112
+
113
+ - name: Run allocator tests under Miri
114
+ env:
115
+ MIRIFLAGS: -Zmiri-strict-provenance
116
+ run: cargo miri test --manifest-path tools/vibeio-check/Cargo.toml --features scheduler-batch-cache batch_
117
+
94
118
  type-check:
95
119
  name: pyright
96
120
  runs-on: ubuntu-latest
@@ -165,9 +189,9 @@ jobs:
165
189
  cache-suffix: anyio
166
190
 
167
191
  - name: Set up Rust
168
- uses: dtolnay/rust-toolchain@stable
192
+ uses: dtolnay/rust-toolchain@master
169
193
  with:
170
- toolchain: "1.98.1"
194
+ toolchain: "nightly-2026-09-25"
171
195
 
172
196
  - name: Cache Cargo registry
173
197
  uses: Swatinem/rust-cache@v2
@@ -283,9 +307,9 @@ jobs:
283
307
  cache-suffix: ${{ matrix.os_name }}-py${{ matrix.python_version }}
284
308
 
285
309
  - name: Set up Rust
286
- uses: dtolnay/rust-toolchain@stable
310
+ uses: dtolnay/rust-toolchain@master
287
311
  with:
288
- toolchain: "1.98.1"
312
+ toolchain: "nightly-2026-09-25"
289
313
 
290
314
  - name: Cache Cargo registry
291
315
  uses: Swatinem/rust-cache@v2
@@ -47,9 +47,9 @@ jobs:
47
47
  persist-credentials: false
48
48
 
49
49
  - name: Set up Rust
50
- uses: dtolnay/rust-toolchain@stable
50
+ uses: dtolnay/rust-toolchain@master
51
51
  with:
52
- toolchain: "1.98.1"
52
+ toolchain: "nightly-2026-09-25"
53
53
  components: clippy, rustfmt
54
54
 
55
55
  - name: Cache runtime harness build
@@ -41,7 +41,7 @@ jobs:
41
41
  - os_name: windows-arm64
42
42
  runner: windows-11-arm
43
43
  rust_target: aarch64-pc-windows-msvc
44
- python_versions: "3.11 3.12 3.13 3.14"
44
+ python_versions: "3.11 3.12 3.13 3.14 3.15"
45
45
  - os_name: macos-intel
46
46
  runner: macos-15-intel
47
47
  rust_target: x86_64-apple-darwin
@@ -64,9 +64,9 @@ jobs:
64
64
  uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b
65
65
 
66
66
  - name: Set up Rust
67
- uses: dtolnay/rust-toolchain@stable
67
+ uses: dtolnay/rust-toolchain@master
68
68
  with:
69
- toolchain: "1.98.1"
69
+ toolchain: "nightly-2026-09-25"
70
70
 
71
71
  - name: Install LLVM tools for PGO
72
72
  if: github.event_name == 'workflow_dispatch' && inputs.pgo
@@ -114,9 +114,9 @@ jobs:
114
114
  uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b
115
115
 
116
116
  - name: Set up Rust
117
- uses: dtolnay/rust-toolchain@stable
117
+ uses: dtolnay/rust-toolchain@master
118
118
  with:
119
- toolchain: "1.98.1"
119
+ toolchain: "nightly-2026-09-25"
120
120
 
121
121
  - name: Cache Cargo registry and target
122
122
  uses: Swatinem/rust-cache@v2
@@ -2,6 +2,21 @@
2
2
  # It is not intended for manual editing.
3
3
  version = 4
4
4
 
5
+ [[package]]
6
+ name = "arc-swap"
7
+ version = "1.9.2"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b"
10
+ dependencies = [
11
+ "rustversion",
12
+ ]
13
+
14
+ [[package]]
15
+ name = "ascii"
16
+ version = "1.1.0"
17
+ source = "registry+https://github.com/rust-lang/crates.io-index"
18
+ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16"
19
+
5
20
  [[package]]
6
21
  name = "async-channel"
7
22
  version = "1.9.0"
@@ -212,6 +227,12 @@ version = "3.20.3"
212
227
  source = "registry+https://github.com/rust-lang/crates.io-index"
213
228
  checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
214
229
 
230
+ [[package]]
231
+ name = "byteorder"
232
+ version = "1.5.0"
233
+ source = "registry+https://github.com/rust-lang/crates.io-index"
234
+ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
235
+
215
236
  [[package]]
216
237
  name = "bytes"
217
238
  version = "1.12.1"
@@ -236,6 +257,12 @@ version = "1.0.4"
236
257
  source = "registry+https://github.com/rust-lang/crates.io-index"
237
258
  checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
238
259
 
260
+ [[package]]
261
+ name = "chunked_transfer"
262
+ version = "1.5.0"
263
+ source = "registry+https://github.com/rust-lang/crates.io-index"
264
+ checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901"
265
+
239
266
  [[package]]
240
267
  name = "cmake"
241
268
  version = "0.1.58"
@@ -294,6 +321,15 @@ version = "0.8.23"
294
321
  source = "registry+https://github.com/rust-lang/crates.io-index"
295
322
  checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6"
296
323
 
324
+ [[package]]
325
+ name = "deranged"
326
+ version = "0.5.8"
327
+ source = "registry+https://github.com/rust-lang/crates.io-index"
328
+ checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
329
+ dependencies = [
330
+ "serde_core",
331
+ ]
332
+
297
333
  [[package]]
298
334
  name = "dunce"
299
335
  version = "1.0.5"
@@ -500,6 +536,16 @@ dependencies = [
500
536
  "wasm-bindgen",
501
537
  ]
502
538
 
539
+ [[package]]
540
+ name = "hdrhistogram"
541
+ version = "7.6.0"
542
+ source = "registry+https://github.com/rust-lang/crates.io-index"
543
+ checksum = "f49d1053f4708f0af3cf9fc5bffc7e68a914a3c45becb231c80068c9c3f78bea"
544
+ dependencies = [
545
+ "byteorder",
546
+ "num-traits",
547
+ ]
548
+
503
549
  [[package]]
504
550
  name = "heck"
505
551
  version = "0.5.0"
@@ -512,6 +558,52 @@ version = "0.5.3"
512
558
  source = "registry+https://github.com/rust-lang/crates.io-index"
513
559
  checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284"
514
560
 
561
+ [[package]]
562
+ name = "hotpath"
563
+ version = "0.28.3"
564
+ source = "registry+https://github.com/rust-lang/crates.io-index"
565
+ checksum = "d553ab03dfbae1d1104652719199823728bf30fb5511afc0764fb02d65a5656b"
566
+ dependencies = [
567
+ "arc-swap",
568
+ "cfg-if",
569
+ "crossbeam-channel",
570
+ "futures-core",
571
+ "hdrhistogram",
572
+ "hotpath-drain",
573
+ "hotpath-macros",
574
+ "libc",
575
+ "pin-project-lite",
576
+ "quanta",
577
+ "regex-lite",
578
+ "serde",
579
+ "serde_json",
580
+ "time",
581
+ "tiny_http",
582
+ ]
583
+
584
+ [[package]]
585
+ name = "hotpath-drain"
586
+ version = "0.28.3"
587
+ source = "registry+https://github.com/rust-lang/crates.io-index"
588
+ checksum = "42349e85f9425bfe533e9c7aadf6dae93b51b2171ca92f308e9b401962ffeb0e"
589
+
590
+ [[package]]
591
+ name = "hotpath-macros"
592
+ version = "0.28.3"
593
+ source = "registry+https://github.com/rust-lang/crates.io-index"
594
+ checksum = "05dde24c0cc623819d9466bce63175212d0ecbf450278404a33ab54290e35ed8"
595
+ dependencies = [
596
+ "proc-macro2",
597
+ "quote",
598
+ "syn 2.0.119",
599
+ ]
600
+
601
+ [[package]]
602
+ name = "httpdate"
603
+ version = "1.0.3"
604
+ source = "registry+https://github.com/rust-lang/crates.io-index"
605
+ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
606
+
515
607
  [[package]]
516
608
  name = "io-uring"
517
609
  version = "0.7.15"
@@ -523,6 +615,12 @@ dependencies = [
523
615
  "libc",
524
616
  ]
525
617
 
618
+ [[package]]
619
+ name = "itoa"
620
+ version = "1.0.18"
621
+ source = "registry+https://github.com/rust-lang/crates.io-index"
622
+ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
623
+
526
624
  [[package]]
527
625
  name = "jobserver"
528
626
  version = "0.1.35"
@@ -555,9 +653,9 @@ dependencies = [
555
653
 
556
654
  [[package]]
557
655
  name = "libc"
558
- version = "0.2.189"
656
+ version = "0.2.190"
559
657
  source = "registry+https://github.com/rust-lang/crates.io-index"
560
- checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
658
+ checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78"
561
659
 
562
660
  [[package]]
563
661
  name = "linux-raw-sys"
@@ -592,6 +690,12 @@ dependencies = [
592
690
  "windows-sys 0.61.2",
593
691
  ]
594
692
 
693
+ [[package]]
694
+ name = "num-conv"
695
+ version = "0.2.2"
696
+ source = "registry+https://github.com/rust-lang/crates.io-index"
697
+ checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
698
+
595
699
  [[package]]
596
700
  name = "num-traits"
597
701
  version = "0.2.19"
@@ -684,6 +788,12 @@ version = "1.15.0"
684
788
  source = "registry+https://github.com/rust-lang/crates.io-index"
685
789
  checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85"
686
790
 
791
+ [[package]]
792
+ name = "powerfmt"
793
+ version = "0.2.0"
794
+ source = "registry+https://github.com/rust-lang/crates.io-index"
795
+ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
796
+
687
797
  [[package]]
688
798
  name = "ppv-lite86"
689
799
  version = "0.2.21"
@@ -719,9 +829,9 @@ dependencies = [
719
829
 
720
830
  [[package]]
721
831
  name = "pyo3"
722
- version = "0.29.2"
832
+ version = "0.29.3"
723
833
  source = "registry+https://github.com/rust-lang/crates.io-index"
724
- checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b"
834
+ checksum = "700d18fa267b73b9b521fd7e13580e2f446916f176cacee1ab63fcc8191f1655"
725
835
  dependencies = [
726
836
  "libc",
727
837
  "once_cell",
@@ -747,18 +857,18 @@ dependencies = [
747
857
 
748
858
  [[package]]
749
859
  name = "pyo3-build-config"
750
- version = "0.29.2"
860
+ version = "0.29.3"
751
861
  source = "registry+https://github.com/rust-lang/crates.io-index"
752
- checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9"
862
+ checksum = "7b3fc0c4d08f6bb10e71fe39dfb9e2f59c6eb6854e22ec8092f50c69a4499adb"
753
863
  dependencies = [
754
864
  "target-lexicon",
755
865
  ]
756
866
 
757
867
  [[package]]
758
868
  name = "pyo3-ffi"
759
- version = "0.29.2"
869
+ version = "0.29.3"
760
870
  source = "registry+https://github.com/rust-lang/crates.io-index"
761
- checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327"
871
+ checksum = "dfc0b8e19df29aad7086cf977bb0c2a2f143e30567eb113e9cf72b62ca698330"
762
872
  dependencies = [
763
873
  "libc",
764
874
  "pyo3-build-config",
@@ -766,9 +876,9 @@ dependencies = [
766
876
 
767
877
  [[package]]
768
878
  name = "pyo3-macros"
769
- version = "0.29.2"
879
+ version = "0.29.3"
770
880
  source = "registry+https://github.com/rust-lang/crates.io-index"
771
- checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c"
881
+ checksum = "6100e8a4b5eba53afaa5ed078364851a0b2499c553a44c31026b929049b49dc6"
772
882
  dependencies = [
773
883
  "proc-macro2",
774
884
  "pyo3-macros-backend",
@@ -778,9 +888,9 @@ dependencies = [
778
888
 
779
889
  [[package]]
780
890
  name = "pyo3-macros-backend"
781
- version = "0.29.2"
891
+ version = "0.29.3"
782
892
  source = "registry+https://github.com/rust-lang/crates.io-index"
783
- checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952"
893
+ checksum = "6143877a16e82b5a727b7127ff4cd86858a24a28d745d72f43e6f227c7b1bdb3"
784
894
  dependencies = [
785
895
  "heck",
786
896
  "proc-macro2",
@@ -788,6 +898,21 @@ dependencies = [
788
898
  "syn 2.0.119",
789
899
  ]
790
900
 
901
+ [[package]]
902
+ name = "quanta"
903
+ version = "0.12.6"
904
+ source = "registry+https://github.com/rust-lang/crates.io-index"
905
+ checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7"
906
+ dependencies = [
907
+ "crossbeam-utils",
908
+ "libc",
909
+ "once_cell",
910
+ "raw-cpuid",
911
+ "wasi",
912
+ "web-sys",
913
+ "winapi",
914
+ ]
915
+
791
916
  [[package]]
792
917
  name = "quote"
793
918
  version = "1.0.47"
@@ -847,6 +972,21 @@ dependencies = [
847
972
  "rand_core",
848
973
  ]
849
974
 
975
+ [[package]]
976
+ name = "raw-cpuid"
977
+ version = "11.6.0"
978
+ source = "registry+https://github.com/rust-lang/crates.io-index"
979
+ checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186"
980
+ dependencies = [
981
+ "bitflags",
982
+ ]
983
+
984
+ [[package]]
985
+ name = "regex-lite"
986
+ version = "0.1.9"
987
+ source = "registry+https://github.com/rust-lang/crates.io-index"
988
+ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973"
989
+
850
990
  [[package]]
851
991
  name = "regex-syntax"
852
992
  version = "0.8.11"
@@ -869,7 +1009,7 @@ dependencies = [
869
1009
 
870
1010
  [[package]]
871
1011
  name = "rsloop"
872
- version = "0.1.52"
1012
+ version = "0.1.54"
873
1013
  dependencies = [
874
1014
  "async-channel 2.5.0",
875
1015
  "async-io",
@@ -879,6 +1019,7 @@ dependencies = [
879
1019
  "errno",
880
1020
  "futures",
881
1021
  "futures-util",
1022
+ "hotpath",
882
1023
  "io-uring",
883
1024
  "libc",
884
1025
  "memchr",
@@ -1021,6 +1162,49 @@ dependencies = [
1021
1162
  "libc",
1022
1163
  ]
1023
1164
 
1165
+ [[package]]
1166
+ name = "serde"
1167
+ version = "1.0.229"
1168
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1169
+ checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
1170
+ dependencies = [
1171
+ "serde_core",
1172
+ "serde_derive",
1173
+ ]
1174
+
1175
+ [[package]]
1176
+ name = "serde_core"
1177
+ version = "1.0.229"
1178
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1179
+ checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
1180
+ dependencies = [
1181
+ "serde_derive",
1182
+ ]
1183
+
1184
+ [[package]]
1185
+ name = "serde_derive"
1186
+ version = "1.0.229"
1187
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1188
+ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
1189
+ dependencies = [
1190
+ "proc-macro2",
1191
+ "quote",
1192
+ "syn 3.0.5",
1193
+ ]
1194
+
1195
+ [[package]]
1196
+ name = "serde_json"
1197
+ version = "1.0.151"
1198
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1199
+ checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
1200
+ dependencies = [
1201
+ "itoa",
1202
+ "memchr",
1203
+ "serde",
1204
+ "serde_core",
1205
+ "zmij",
1206
+ ]
1207
+
1024
1208
  [[package]]
1025
1209
  name = "shlex"
1026
1210
  version = "2.0.1"
@@ -1097,6 +1281,48 @@ version = "0.13.5"
1097
1281
  source = "registry+https://github.com/rust-lang/crates.io-index"
1098
1282
  checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
1099
1283
 
1284
+ [[package]]
1285
+ name = "time"
1286
+ version = "0.3.55"
1287
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1288
+ checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134"
1289
+ dependencies = [
1290
+ "deranged",
1291
+ "num-conv",
1292
+ "powerfmt",
1293
+ "serde_core",
1294
+ "time-core",
1295
+ "time-macros",
1296
+ ]
1297
+
1298
+ [[package]]
1299
+ name = "time-core"
1300
+ version = "0.1.9"
1301
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1302
+ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109"
1303
+
1304
+ [[package]]
1305
+ name = "time-macros"
1306
+ version = "0.2.32"
1307
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1308
+ checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85"
1309
+ dependencies = [
1310
+ "num-conv",
1311
+ "time-core",
1312
+ ]
1313
+
1314
+ [[package]]
1315
+ name = "tiny_http"
1316
+ version = "0.12.0"
1317
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1318
+ checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82"
1319
+ dependencies = [
1320
+ "ascii",
1321
+ "chunked_transfer",
1322
+ "httpdate",
1323
+ "log",
1324
+ ]
1325
+
1100
1326
  [[package]]
1101
1327
  name = "tokio"
1102
1328
  version = "1.53.1"
@@ -1115,9 +1341,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
1115
1341
 
1116
1342
  [[package]]
1117
1343
  name = "unicode-ident"
1118
- version = "1.0.24"
1344
+ version = "1.0.26"
1119
1345
  source = "registry+https://github.com/rust-lang/crates.io-index"
1120
- checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
1346
+ checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954"
1121
1347
 
1122
1348
  [[package]]
1123
1349
  name = "untrusted"
@@ -1201,6 +1427,38 @@ dependencies = [
1201
1427
  "unicode-ident",
1202
1428
  ]
1203
1429
 
1430
+ [[package]]
1431
+ name = "web-sys"
1432
+ version = "0.3.105"
1433
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1434
+ checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8"
1435
+ dependencies = [
1436
+ "js-sys",
1437
+ "wasm-bindgen",
1438
+ ]
1439
+
1440
+ [[package]]
1441
+ name = "winapi"
1442
+ version = "0.3.9"
1443
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1444
+ checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
1445
+ dependencies = [
1446
+ "winapi-i686-pc-windows-gnu",
1447
+ "winapi-x86_64-pc-windows-gnu",
1448
+ ]
1449
+
1450
+ [[package]]
1451
+ name = "winapi-i686-pc-windows-gnu"
1452
+ version = "0.4.0"
1453
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1454
+ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
1455
+
1456
+ [[package]]
1457
+ name = "winapi-x86_64-pc-windows-gnu"
1458
+ version = "0.4.0"
1459
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1460
+ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1461
+
1204
1462
  [[package]]
1205
1463
  name = "windows-link"
1206
1464
  version = "0.2.1"
@@ -1320,3 +1578,9 @@ name = "zeroize"
1320
1578
  version = "1.9.0"
1321
1579
  source = "registry+https://github.com/rust-lang/crates.io-index"
1322
1580
  checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e"
1581
+
1582
+ [[package]]
1583
+ name = "zmij"
1584
+ version = "1.0.23"
1585
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1586
+ checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
@@ -1,11 +1,10 @@
1
1
  [package]
2
2
  name = "rsloop"
3
- version = "0.1.52"
3
+ version = "0.1.54"
4
4
  edition = "2024"
5
5
  description = "An event loop for asyncio written in Rust"
6
6
  documentation = "https://github.com/RustedBytes/rsloop#readme"
7
7
  readme = "README.md"
8
- homepage = "https://github.com/RustedBytes/rsloop"
9
8
  repository = "https://github.com/RustedBytes/rsloop"
10
9
  license = "Apache-2.0"
11
10
 
@@ -26,13 +25,14 @@ crossbeam-queue = "0.3"
26
25
  errno = { version = "0.3", optional = true }
27
26
  futures = { version = "0.3", default-features = false, features = ["std"] }
28
27
  futures-util = "0.3"
28
+ hotpath = { version = "0.28.3", optional = true }
29
29
  libc = "0.2"
30
30
  memchr = "2"
31
31
  mio = "1"
32
32
  once_cell = { version = "1", optional = true }
33
33
  oneshot = { version = "0.2", features = ["async", "std"] }
34
34
  pin-project-lite = "0.2"
35
- pyo3 = { version = "0.29.2" }
35
+ pyo3 = { version = "0.29.3" }
36
36
  pyo3-async-runtimes = { version = "0.29", features = ["async-std-runtime"] }
37
37
  rustls = "0.23"
38
38
  rustls-native-certs = "0.8"
@@ -47,7 +47,7 @@ tokio = { version = "1", default-features = false, features = ["io-util"] }
47
47
  proptest = { version = "1", default-features = false, features = ["std"] }
48
48
 
49
49
  [build-dependencies]
50
- pyo3-build-config = "0.29.2"
50
+ pyo3-build-config = "0.29.3"
51
51
 
52
52
  [target.'cfg(target_os = "linux")'.dependencies]
53
53
  io-uring = "0.7"
@@ -60,6 +60,9 @@ windows-sys = { version = "0.61", features = ["Wdk_Foundation", "Wdk_Storage_Fil
60
60
 
61
61
  [features]
62
62
  default = []
63
+ hotpath-profile = ["dep:hotpath", "hotpath/hotpath"]
64
+ # Opt-in: faster scheduler turns, but measured TCP workloads can regress.
65
+ scheduler-batch-cache = []
63
66
  blocking-default = ["dep:rusty_pool"]
64
67
  # Embedded-runtime modules are opt-in; production wheels retain the default
65
68
  # networking/timer build unless a feature is explicitly requested.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rsloop
3
- Version: 0.1.52
3
+ Version: 0.1.54
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: Apache Software License
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.11
15
15
  Classifier: Programming Language :: Python :: 3.12
16
16
  Classifier: Programming Language :: Python :: 3.13
17
17
  Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Programming Language :: Python :: 3.15
18
19
  Classifier: Programming Language :: Python :: Free Threading :: 2 - Beta
19
20
  Classifier: Programming Language :: Rust
20
21
  Classifier: Topic :: Software Development :: Libraries
@@ -22,7 +23,6 @@ Classifier: Topic :: System :: Networking
22
23
  License-File: LICENSE
23
24
  Summary: An event loop for asyncio written in Rust
24
25
  Keywords: asyncio,event-loop,pyo3,python,rust
25
- Home-Page: https://github.com/RustedBytes/rsloop
26
26
  Author: Yehor Smoliakov <egorsmkv@gmail.com>
27
27
  Requires-Python: >=3.10
28
28
  Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
@@ -58,7 +58,7 @@ The package exposes:
58
58
  `rsloop.run(...)`, `rsloop.install()`, `rsloop.uninstall()`, and
59
59
  `rsloop.build_info()`
60
60
 
61
- Repository metadata currently targets Python `>=3.10`.
61
+ Repository metadata supports CPython 3.10 through 3.15.
62
62
  The native runtime requires Linux 6.1+, macOS 13+, or Windows 10+ so its hot
63
63
  paths can rely on modern completion, timer, and scheduler primitives.
64
64
  Free-threaded CPython (`3.14t`) is supported: the extension declares
@@ -26,7 +26,7 @@ The package exposes:
26
26
  `rsloop.run(...)`, `rsloop.install()`, `rsloop.uninstall()`, and
27
27
  `rsloop.build_info()`
28
28
 
29
- Repository metadata currently targets Python `>=3.10`.
29
+ Repository metadata supports CPython 3.10 through 3.15.
30
30
  The native runtime requires Linux 6.1+, macOS 13+, or Windows 10+ so its hot
31
31
  paths can rely on modern completion, timer, and scheduler primitives.
32
32
  Free-threaded CPython (`3.14t`) is supported: the extension declares