==============================================================================
construct-rs vs Python construct 2.10.70 BitStream 性能测试结果
==============================================================================

环境信息：
  Python 版本     : 3.14.2
  Python 解释器   : <opencode-temp>\crs_venv\Scripts\python.exe
  平台            : Windows-11-10.0.26200-SP0
  处理器          : Intel64 Family 6 Model 183 Stepping 1, GenuineIntel
  machine         : AMD64
  timeit number   : 100000
  repeat (中位数) : 5
  测量时间        : 2026-06-29 13:31:48

测量口径：
  - construct-rs：maturin develop 安装到 venv，Python timeit 调用
    用户面 API（Packet.parse / packet.build）。一次 FFI 穿越。
  - Python construct 2.10.70：pip install 安装到 venv，Python timeit
    调用等效 API（fmt.parse / fmt.build）。
  - 子进程隔离：两个同名 construct 包在独立进程中运行，避免 sys.path 冲突。
  - 相同 timeit 参数（NUMBER/REPEAT），取相同统计量（中位数）。
  - 公平口径：所有场景 Python 侧均用 BitStruct/Struct 包裹，
    与 Rust 侧 BitStructMixin/StructMixin 创建容器/实例对等。

通过标准：
  - 几何平均 ≥10.0x（parse 和 build 两个方向）
  - 单点 <4.0x 视为门禁失败

对比表：
场景     方向     Rust (ns)    Python (ns)    加速比        判定        
---------------------------------------------------------------
B1     parse  254.8        2956.6         11.61     x [PASS]
B1     build  190.5        3427.1         17.99     x [PASS]
B2     parse  261.2        3316.3         12.70     x [PASS]
B2     build  202.0        3996.5         19.79     x [PASS]
B3     parse  301.0        4594.4         15.26     x [PASS]
B3     build  233.2        5532.2         23.73     x [PASS]
B4     parse  287.8        3420.5         11.88     x [PASS]
B4     build  215.7        4140.9         19.20     x [PASS]
BS1    parse  388.2        5019.0         12.93     x [PASS]
BS1    build  279.5        5928.3         21.21     x [PASS]
BS2    parse  383.0        5323.5         13.90     x [PASS]
BS2    build  301.1        5920.2         19.66     x [PASS]
BW1    parse  373.9        6453.8         17.26     x [PASS]
BW1    build  315.7        6372.8         20.19     x [PASS]
BW2    parse  295.7        2792.9         9.45      x [WARN]
BW2    build  239.4        2729.1         11.40     x [PASS]
BW3    parse  313.1        2576.2         8.23      x [WARN]
BW3    build  234.1        2427.8         10.37     x [PASS]
BW4    parse  320.1        3462.2         10.82     x [PASS]
BW4    build  244.2        3222.3         13.19     x [PASS]

几何平均加速比：
  parse 方向 : 12.14x
  build 方向 : 17.09x
  全部       : 14.41x

==============================================================================
派生指标
==============================================================================

1) parse/build 比率（build_ns / parse_ns，>1 = build 较慢）：
  场景     Rust比率     Py比率       方向一致      
  --------------------------------------------------
  B1     0.75       1.16       [不一致]     
  B2     0.77       1.21       [不一致]     
  B3     0.77       1.20       [不一致]     
  B4     0.75       1.21       [不一致]     
  BS1    0.72       1.18       [不一致]     
  BS2    0.79       1.11       [不一致]     
  BW1    0.84       0.99       一致        
  BW2    0.81       0.98       一致        
  BW3    0.75       0.94       一致        
  BW4    0.76       0.93       一致        

2) 加速比按场景复杂度排列（geomean parse×build，升序，最差在前）：
  场景     parse x    build x    geomean x    备注        
  ------------------------------------------------------------
  BW3    8.23       10.37      9.24                   
  BW2    9.45       11.40      10.38                  
  BW4    10.82      13.19      11.95                  
  B1     11.61      17.99      14.45        方向不一致     
  B4     11.88      19.20      15.10        方向不一致     
  B2     12.70      19.79      15.85        方向不一致     
  BS2    13.90      19.66      16.53        方向不一致     
  BS1    12.93      21.21      16.56        方向不一致     
  BW1    17.26      20.19      18.67                  
  B3     15.26      23.73      19.03        方向不一致     

3) 低于 4x 的场景（parse 或 build 任一方向）：
  无（全部场景 ≥4x）

4) parse/build 方向与 Python construct 不一致的场景：
  [WARN] B1: Rust build/parse=0.75 vs Py build/parse=1.16
  [WARN] B2: Rust build/parse=0.77 vs Py build/parse=1.21
  [WARN] B3: Rust build/parse=0.77 vs Py build/parse=1.20
  [WARN] B4: Rust build/parse=0.75 vs Py build/parse=1.21
  [WARN] BS1: Rust build/parse=0.72 vs Py build/parse=1.18
  [WARN] BS2: Rust build/parse=0.79 vs Py build/parse=1.11

场景说明：
  -- BitsInteger --
  B1: BitStruct(v=BitsInteger(8))
  B2: BitStruct(v=BitsInteger(16))
  B3: BitStruct(v=BitsInteger(32))
  B4: BitStruct(v=BitsInteger(8, signed=True))
  -- BitStruct --
  BS1: BitStruct(Nibble, BitsInteger(10), Padding(2))
  BS2: BitStruct(Bit, Nibble, Octet, Padding(3))
  -- ByteSwap --
  BW1: BitStruct(Nibble, Bytewise(Int16ub), Nibble)
  BW2: Struct(v=BitsSwapped(Bytes(4)))
  BW3: Struct(v=ByteSwapped(Int32ub))
  BW4: Struct(Bytes(1), Padding(4), Bytes(2))

门禁检查：
  [PASS] 全部通过

原始数据（per_call_ns = 每次调用纳秒数，min_ns = 单轮最小值）：
  B1   parse  rs: median=254.8ns  min=253.4ns
  B1   parse  py: median=2956.6ns  min=2944.6ns
  B1   build  rs: median=190.5ns  min=189.8ns
  B1   build  py: median=3427.1ns  min=3414.2ns
  B2   parse  rs: median=261.2ns  min=260.8ns
  B2   parse  py: median=3316.3ns  min=3299.9ns
  B2   build  rs: median=202.0ns  min=201.8ns
  B2   build  py: median=3996.5ns  min=3941.2ns
  B3   parse  rs: median=301.0ns  min=288.0ns
  B3   parse  py: median=4594.4ns  min=4259.0ns
  B3   build  rs: median=233.2ns  min=230.8ns
  B3   build  py: median=5532.2ns  min=5434.8ns
  B4   parse  rs: median=287.8ns  min=285.7ns
  B4   parse  py: median=3420.5ns  min=3336.5ns
  B4   build  rs: median=215.7ns  min=214.8ns
  B4   build  py: median=4140.9ns  min=4035.5ns
  BS1  parse  rs: median=388.2ns  min=363.9ns
  BS1  parse  py: median=5019.0ns  min=4822.0ns
  BS1  build  rs: median=279.5ns  min=271.6ns
  BS1  build  py: median=5928.3ns  min=5585.4ns
  BS2  parse  rs: median=383.0ns  min=370.0ns
  BS2  parse  py: median=5323.5ns  min=5222.0ns
  BS2  build  rs: median=301.1ns  min=300.1ns
  BS2  build  py: median=5920.2ns  min=5863.7ns
  BW1  parse  rs: median=373.9ns  min=373.7ns
  BW1  parse  py: median=6453.8ns  min=5305.6ns
  BW1  build  rs: median=315.7ns  min=314.6ns
  BW1  build  py: median=6372.8ns  min=6086.9ns
  BW2  parse  rs: median=295.7ns  min=294.1ns
  BW2  parse  py: median=2792.9ns  min=2773.1ns
  BW2  build  rs: median=239.4ns  min=235.9ns
  BW2  build  py: median=2729.1ns  min=2694.5ns
  BW3  parse  rs: median=313.1ns  min=306.8ns
  BW3  parse  py: median=2576.2ns  min=2541.8ns
  BW3  build  rs: median=234.1ns  min=233.6ns
  BW3  build  py: median=2427.8ns  min=2362.8ns
  BW4  parse  rs: median=320.1ns  min=311.3ns
  BW4  parse  py: median=3462.2ns  min=3389.0ns
  BW4  build  rs: median=244.2ns  min=243.5ns
  BW4  build  py: median=3222.3ns  min=3120.9ns
