PyneCore v6.10.2 released — load-time inlining and type erasure, a Decimal-free number…
Fixes
- Security children now start on
forkserver(orspawn) instead of the platform default — a live child was forked from a multi-threaded parent and could inherit locks nothing would release - The orphan watchdog waits on the runner’s process sentinel, so a hard-killed runner is noticed
- Each security child now receives a snapshot of the runner’s
PYNE*environment, so per-run switches reach children on a second run in one interpreter table.newandtable.set_positionevict the table already at the target position, as TradingView does — an unbounded registry made a per-bartable.newcost grow quadratically- The drawing snapshot rolls back table cells, so a discarded
calc_on_order_fillsor live re-execution no longer leaves table edits behind - The order sync engine defers exit dispatches and amends while the parent entry’s disposition is unresolved
KeyboardInterruptpropagates after streaming teardown, so an interrupted live run is not reported as completed- OHLCV durability: a failed header fsync rolls back to the last published header, and sidecar rows are fsynced before every publication
math.sqrtguards negative input instead of catchingValueError
Performance
- Trivial stateless builtins (
math.abs,sqrt,pow,exp,log, the trigonometric functions, two/three-operandmax/min,array.get,array.size, …) are inlined into@pynecall sites as a single expression, bit-identically typing.castcalls andif TYPE_CHECKING:blocks are erased at load time, including in PyneCore’s own hot-path modulesstr.tostring2.2 us -> 0.7-0.9 us andstr.format2.3 us -> 0.9 us on the common paths, with the old implementation kept as the fallback and semantic reference- All
matrix.*, thecast_*helpers, the drawing andtickerconstructors, the context-freerequestfunctions and more are routed as plain calls instead of paying an anchor slot and a per-iteration rollback - The drawing snapshot restores only changed objects; loop-site builtin restores reuse the snapshot’s machine list while no new state vector exists
strategy.exitkeeps a resting leg in place when the call would rebuild it unchanged, with trade output unchanged- A bulk OHLCV append publishes once instead of once per record — a three-context
request.securityscript over a 23 272-bar 60m feed went from 58.3 s to 1.95 s on Linux, output byte-identical
Full release notes: https://github.com/PyneSys/pynecore/releases/tag/v6.10.2