hardbyte / hardbyte/python-common-expression-language

Evaluate abi3 wheels: one wheel per platform and day-one support for new Python releases

Aperta
#46 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
enhancement
Lingua principale
Python
Stelle
43
Fork
4
Merge medio
9h 57m
PR unite (30g)
14

Descrizione

## Context

CI builds one wheel per (platform × Python version): currently 4 CPython versions across 10 platform targets, growing by 10 wheels every October. Users on a Python that shipped after our last release fall back to the sdist and need a Rust toolchain.

Building against the stable ABI (`pyo3/abi3-py311`) gives one wheel per platform that works on every CPython ≥ 3.11, including ones released after us.

## Trade-offs to measure before switching

- **Performance.** Under abi3, PyO3 loses some fast paths. The one most likely to matter here is datetime: the `chrono` conversion used for `timestamp`/`duration` values goes through the C datetime API on regular builds but through Python-level attribute access under the limited API. `size(items)` on a 1000-element list and the timestamp cases in `examples/performance/compile_execute_benchmark.py` are the numbers to compare. If abi3 costs more than ~10% on timestamp-heavy workloads, keep per-version wheels.
- **Free-threading.** abi3 wheels cannot target the free-threaded build, so if we want `cp314t` wheels (see the GIL issue) we would ship abi3 for the default build plus explicit `cp314t` wheels.
- **Reproducibility.** The `--find-interpreter` flag in `maturin-action` becomes unnecessary; `pyproject.toml` gains `[tool.maturin] features = ["pyo3/extension-module", "pyo3/abi3-py311"]`.

## Suggested approach

Build an abi3 wheel locally, run the benchmark and the full test suite against it, and post the numbers here. Decide based on the datetime cases.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Start with pyproject.toml and the maturin-action configuration, then build an abi3 wheel locally. Run examples/performance/compile_execute_benchmark.py, focusing on size(items) and timestamp cases, followed by the full test suite. Done means posting the comparison numbers and deciding whether the datetime performance trade-off supports switching.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python, rust
Ambito
build-system, performance
Tipo di issue
Funzionalità
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.