GSoC: Pipelined Krylov methods using Rust async
Pipelining involves rearranging operations and initiating asynchronous reductions before they are needed. The data dependencies can be error-prone and thus pipelined methods are more subtle to debug than conventional Krylov methods.
Rust is a programming language with compile-time lifetime analysis (the "borrow checker"), that could be used to guarantee safe ordering, and thus reduce the incidental complexity of implementing pipelined Krylov methods. PETSc has experimental Rust bindings, though this effort has been targeted at users of PETSc. We're interested in exploring use of Rust to write library components inside PETSc, and Krylov methods are a potentially high-value place to demonstrate the utility. Other ideas for using Rust in/with PETSc are also welcome.