Dear community: This is a call for vote to release apache-tvm-ffi version v0.1.15. The main highlights of this release are
* Non-nullable object references in C++ — concrete reference classes and containers (Array, Map, Dict, List, Tuple, Enum, ...) now reject null, and Optional<T> is the way to represent absence. ObjectRef, Function, and Tensor stay nullable for compatibility. Optional<T> of an object reference keeps its pointer-sized layout but no longer inherits from ObjectRef, so the contained reference is reached through value() or *. Custom reference types should use TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE. * Typed native functions — NativeFunction<R(Args...)> and NativeFunctionView bind C++ functions at compile time through FromNative<&Fn>() and accept either an Expected<R>-returning noexcept target or an ordinary throwing one. Structural mutation and visitation hooks and the custom __any_hash__/__any_equal__ hooks use the same native convention, while packed Function hooks remain supported. * Typed reflection attribute keys — type attributes are now named by typed reflection::AttrKey<T> descriptors that validate a stored value's type when it is read. The keys for each hook live next to the API that uses them, under tvm::ffi::type_attr, and native_fn_attr<&Fn>(key) registers a native callback for a specific key. * Named type schemas for function signatures — function schemas now carry named return and params groups instead of a flat args list, an explicit empty params denotes a known zero-argument function, and named schemas can declare a fallback type used for Python binding annotations. * Rust BigInt — tvm_ffi::BigInt mirrors C++ BigInt with an inline i64 fast path, native arithmetic ported from the C++ int_ops, and fallible forms for FFI callbacks; the Rust stub generator mirrors ffi.BigInt fields of reflected classes. * Rust interop — TensorView accepts borrowed DLTensor* arguments from C and C++ callers, Tensor::from_env_alloc allocates through the environment DLPack allocator, #[type_register] lets a crate define and register its own object types on first use, Module exposes function metadata and doc strings, and panics at FFI boundaries are raised as InternalError instead of aborting the process. * Python 3.15 and Windows ARM64 wheels — apache-tvm-ffi now ships wheels for CPython 3.15 and free-threaded 3.15t on every platform, and native Windows ARM64 wheels. The optional torch C-DLPack addon now builds on free-threaded Python on Windows. * Fixes — TVM_FFI_DLL_EXPORT_TYPED_FUNC compiles under MSVC when exporting a parenthesized static member address, CUDA sources build through tvm_ffi.cpp on Windows, the Rust crates fail at build time with install guidance when tvm-ffi-config is missing and build on docs.rs, the Rust with_stream restores the previous stream when its closure fails, ObjectRef casts honor specialized strict checks, and tvm-ffi-config --cython-lib-path no longer imports the extension. * Source-level changes to watch — the C ABI is unchanged in this release, but C++ code that relied on null concrete references, on Optional<T> being an ObjectRef, on the old raw-pointer signatures of custom __any_hash__/__any_equal__ hooks, or on the reflection::type_attr name constants (now typed keys in tvm::ffi::type_attr, with the string available as .name) needs updating, and tools that parse exported function type schemas will see the named return/params form. Link to draft release notes: https://github.com/apache/tvm-ffi/releases/tag/v0.1.15-rc0 Link to release candidate: https://dist.apache.org/repos/dist/dev/tvm/tvm-ffi-v0.1.15-rc0/ Everyone is welcomed to vote. Please vote by replying to this thread explicitly. The vote will last at least 72 hours, please vote +1 = approve +0 = no opinion -1 = disapprove (provide reason) NOTE: this thread is being mirrored in GitHub issue https://github.com/apache/tvm-ffi/issues/848 --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
