Added
-
Rewrote partition to be a single kernel.
-
The type checker has been rewritten, with contributions from Jacob Aleksandar
Siegumfeldt, Laust Kjæp Dengsøe, and Robert Schenck. -
Flattening has been rewritten, with the majority of the work by Amirreza
Hashemi. The main consequence is that nonuniform nested parallelism is now
supported, although it is not yet necessarily efficient in all cases. More
details: https://futhark-lang.org/blog/2026-07-31-full-flattening.html -
Futhark now supports recursive functions, with various restrictions.
-
The
incremental_flatteningattributes are now just namedflattening,
although the old name continues to work. -
A simplification rule for branches that return common results (#2526).
Changed
- Local functions are no longer let-generalised (i.e., made polymorphic).
Explicitly polymorphic local functions are still supported.
Fixed
-
Filter now uses the predicate once per element instead of twice.
-
Fixed bug in simiplification engine, various SOACs needed to specify
the depth of lambdas, scans, and reduces. -
In-place updates with a slice that covers the entire array, but reorders its
elements (such as a reversal), were simplified into a copy, discarding the
reordering. Among other things this produced wrong gradients forreverse
(#2522). -
A case where complex sizes referring to explicit parameters were mishandled by
monomorphisation (#2230). -
An issue where
#[scratch]would apply to subexpressions in undesirable ways,
changing the type of the expression at the IR level. -
Simplified fusibility check by removing redundant accumulator overlap check
and fixed fusibility check by giving the correct number of elements. -
A compiler crash due to missing double buffering inside sequential code
migrated to GPU. (#2513) -
Atomics now use device-wide memory scope when compiling for OpenCL C 2.0, or
OpenCL C 3.0 with the required atomic features. OpenCL C 2.0 is selected
automatically for Rusticl on Asahi; elsewhere it must be selected explicitly.
This fixes incorrect results from cross-workgroup operations
(#734). -
An exotic case in reverse-mode differentiation of accumulators, which in
practice would only occur in cases of unrolledscatters.