From de56d2bdcf1a6efdd7203d3db647d51213b6bab0 Mon Sep 17 00:00:00 2001 From: Mykhailo Chalyi Date: Wed, 7 Oct 2026 05:16:52 +0000 Subject: [PATCH] perf(cpython): lazy random seeding Seed random on first use in a call instead of every call. Claude-Session: https://claude.ai/code/session_01Ke1iW2hQi9VXioZi1avPaW --- .../bashkit-cpython-wasm/artifacts/MANIFEST | 4 +- .../artifacts/python.wasm.gz | Bin 6399309 -> 6401163 bytes .../artifacts/python314.zip | Bin 3544433 -> 3545621 bytes .../guest/_bashkit_boot.py | 66 ++++++++++++++++-- crates/bashkit/docs/cpython.md | 2 +- .../integration/cpython_integration_tests.rs | 25 +++++++ knowledge/log.md | 1 + knowledge/runtimes/cpython-wasm.md | 4 +- 8 files changed, 94 insertions(+), 8 deletions(-) diff --git a/crates/bashkit-cpython-wasm/artifacts/MANIFEST b/crates/bashkit-cpython-wasm/artifacts/MANIFEST index d680129b7..41c3a5fec 100644 --- a/crates/bashkit-cpython-wasm/artifacts/MANIFEST +++ b/crates/bashkit-cpython-wasm/artifacts/MANIFEST @@ -3,5 +3,5 @@ wasi_sdk=24 wasmtime_wizer=49.0.1 zlib=1.3.1 sqlite=sqlite-amalgamation-3500400 -ac54edd6cb27e55c00500edc995555a69e3654379c34cda437125b6ccdc694d4 python.wasm.gz -e4c1d3a9db1f8ad2f8a89900055cc4c515897b8d6d2501cfbb8fc3bc76082b29 python314.zip +6f4c6d7b93992426af97884dfb603c2ef9ddda9ad20e51e2b79e84c18eb1e140 python.wasm.gz +672dd03d9e31bee0d92c14f10f772b97c5daedbc34b9f14d5ebc21b086b77daf python314.zip diff --git a/crates/bashkit-cpython-wasm/artifacts/python.wasm.gz b/crates/bashkit-cpython-wasm/artifacts/python.wasm.gz index b80a7ed1548925f58f0370380e6d14a9cd9088f3..759146588c9b9869d6b3a4d333c9da5905c12445 100644 GIT binary patch delta 4786311 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