PyneCore v6.10.2 released — load-time inlining and type erasure, a Decimal-free number…

Fixes

  • Security children now start on forkserver (or spawn) 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.new and table.set_position evict the table already at the target position, as TradingView does — an unbounded registry made a per-bar table.new cost grow quadratically
  • The drawing snapshot rolls back table cells, so a discarded calc_on_order_fills or 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
  • KeyboardInterrupt propagates 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.sqrt guards negative input instead of catching ValueError

Performance

  • Trivial stateless builtins (math.abs, sqrt, pow, exp, log, the trigonometric functions, two/three-operand max/min, array.get, array.size, …) are inlined into @pyne call sites as a single expression, bit-identically
  • typing.cast calls and if TYPE_CHECKING: blocks are erased at load time, including in PyneCore’s own hot-path modules
  • str.tostring 2.2 us -> 0.7-0.9 us and str.format 2.3 us -> 0.9 us on the common paths, with the old implementation kept as the fallback and semantic reference
  • All matrix.*, the cast_* helpers, the drawing and ticker constructors, the context-free request functions 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.exit keeps 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.security script 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