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:

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:

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:

  1. an exact OS image and architecture rather than a moving *-latest label;
  2. clean wheel compile/run and native sanitizer jobs for every matrix cell;
  3. documented minimum compiler, linker, glibc, and C++ runtime versions;
  4. installation and failure tests without a repository checkout;
  5. an RC soak plus upgrade and rollback rehearsal;
  6. 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.

Search documentation

Type to search.