Documentation
Support and Toolchain Matrix
Support and Toolchain Matrix
Status labels
Arx is still pre-production. This page distinguishes what the repository currently verifies from the target that may become supported at GA:
- CI-verified means a checked-in workflow runs on every pull request.
- Release candidate means the combination is intended for the first stable release but has not completed an RC soak.
- Experimental means it may work but is not a compatibility commitment.
- Unsupported means the project does not currently provide artifacts or a passing gate for the combination.
Current matrix
| Dimension | CI-verified now | Release candidate | Experimental / unsupported |
|---|---|---|---|
| Operating system | Ubuntu GitHub-hosted runner | A named Ubuntu LTS release, to be frozen before RC | macOS and Windows are experimental |
| Architecture | GitHub-hosted x86-64 | x86-64 | AArch64 and other architectures are experimental |
| Python | CPython 3.10, 3.11, 3.12, 3.13, and 3.14 package/language jobs | The same versions that pass the RC wheel gate | PyPy and CPython outside this range are unsupported |
| Native compiler | Conda-forge Clang/Clangdev 14 in conda/dev.yaml |
Clang 14 until a newer range is explicitly qualified | GCC/MSVC and other Clang versions are experimental |
| LLVM code generation | The LLVM bundled by the resolved llvmlite package |
Exact llvmlite/LLVM combinations from the RC lock and wheels |
System LLVM replacement is unsupported |
| Linker | Toolchain-default linker, plus explicit PIE/non-PIE modes in tests | The linker shipped with the selected Ubuntu/Clang environment | Other linkers are experimental |
| C/C++ runtime | The glibc/libstdc++ environment of the Ubuntu runner | Versions shipped by the selected Ubuntu LTS | musl and alternative C++ runtimes are experimental |
| Arrow | PyArrow 24.x and arx-arrowcpp-sources 24.0.0 from package metadata |
The exact lockstep dependency range that passes RC | Other Arrow major versions are unsupported |
| Package artifact | Pure-Python-tagged wheels plus on-demand native compilation from packaged sources | Fresh isolated wheel install and native smoke on every supported target | Precompiled platform-native wheels are not currently shipped |
“Pure-Python-tagged” describes the wheel container, not the runtime requirements. IRx compiles native C/C++ runtime features on demand and therefore requires a compatible compiler/linker for those features.
Exception capability boundary
Arx and direct ASTx/IRx compilation support synchronous nominal exceptions:
raise, ordered subtype/tuple catches, dynamically scoped bare re-raise,
explicit causes, normal-only else, and all-exit finally. An exception is an
owned class instance with a read-only message; aliases retained from a handler
remain valid after its binding leaves scope.
Generated calls use an explicit context, status, and success-only result slot.
Cleanup is compiler-generated, not platform or C++ stack unwinding. Failed
constructors roll back initialized owners. A failing implicit cleanup preserves
an existing failure as primary; an explicit finalizer may replace it. Generator
resume failures propagate separately from normal exhaustion. else may read
definitely initialized direct try locals, not conditional/nested locals whose
ownership cannot be proved. Move-only list/bytes restrictions still apply in
finalizers.
Checked arithmetic/conversion, assertions, list/Series bounds, file, and Arrow/CSV/Parquet operations participate in this model. Invalid source programs still fail compilation; ordinary IEEE floating arithmetic is unchanged. External C routines cannot raise through arbitrary foreign frames. Allocation failure in exception machinery and fatal native corruption are not recoverable.
Not supported: protected regions spanning yield, asynchronous exceptions,
exception groups/except*, mutable Python traceback attributes, and exception
lowering in ArxJIT (whose decorator still runs Python fallback). Direct ASTx
WithStmt cleanup calls its existing zero-argument exit method without
exception suppression; this does not add Arx with, break, or continue
syntax.
Numeric sequence capability boundary
Numeric sequence[T] consumers accept lists/materialized ranges, rank-one
static/runtime tensors, and typed chunked Series without precision conversion.
Nullability must match. Numeric list(input, max_items=N) supports bounded
single-pass materialization in IRx; Arx still has no generator declaration
syntax. Tensor indexing checks runtime bounds and offsets even for static
shapes.
Wheel gate
The wheel-smoke CI job builds all six lockstep packages once, installs those
wheels together in a fresh virtual environment, and checks:
- lockstep versions,
Requires-Python, typing markers, and identical Apache-2.0 license files in wheels and source distributions; - packaged C/C++ sources and headers needed for IRx runtime compilation;
- imports from wheel contents rather than the repository source tree;
- scalar and multi-module compile/run through ArxPy;
- class, dynamic-list, and fixed-shape tensor compile/run;
- first-use RecordBatch native-cache construction and PyArrow IPC interoperability.
Each run uses a tool-owned temporary directory below .tmp/wheel-smoke/ and
removes only that generated directory when the run finishes.
Run the release-equivalent gate with:
makim all.wheel-smoke
For an offline developer audit that deliberately reuses already-installed third-party dependencies (not acceptable as release evidence):
./scripts/build.sh
python scripts/test_wheels.py --current-environment
Requirements before a stable support claim
Before any row becomes supported rather than a release candidate, it needs:
- an exact OS image and architecture rather than a moving
*-latestlabel; - clean wheel compile/run and native sanitizer jobs for every matrix cell;
- documented minimum compiler, linker, glibc, and C++ runtime versions;
- installation and failure tests without a repository checkout;
- an RC soak plus upgrade and rollback rehearsal;
- a stated support lifetime in SUPPORT.md.
Passing on an unlisted platform is useful feedback but is not evidence of project support.
Arrow interoperability qualification
The Arx/IRx package suites include standalone IPC file/stream exchange,
runtime-schema preservation, C Data/C Stream ownership, and compiled TCP
producer/consumer tests against PyArrow 24.x. examples/arrow/run.py exercises
the same public API. TCP requires POSIX sockets and trusted numeric-address
peers; a sandbox-denied socket test is explicitly skipped, not counted as a
successful interoperability run. C++20 is required for the Arrow build.
The standalone packages/irx/tests/native/arrow_interop.cpp harness can be
built with AddressSanitizer/UndefinedBehaviorSanitizer. LeakSanitizer
additionally requires an environment that permits its process inspection.
Neither functional tests nor a sanitizer run with leak detection disabled prove
absence of leaks.