<!DOCTYPE html><html><head><title></title><style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div>These ownership patterns need to be addressed for reliable interfaces in any language, the compiler just forces you to do it (or use the unsafe escape hatch) in Rust.<br></div><div><br></div><div>I think it's necessary in any incremental porting effort for "old" code to call "new" code, due to the nature of our composition and callbacks.</div><div><br></div><div>On Tue, Jul 26, 2022, at 8:17 AM, Jeremy L Thompson wrote:<br></div><blockquote type="cite" id="qt" style=""><p>I feel like someone has to mention the possibility of Rust.<br></p><p>In libCEED, we've found the FFI to C fairly painless. We made
      some improvements on the core C code of libCEED to facilitate Rust
      error handling and data ownership.<br></p><p>From various prototyping we've done in Jed's group, I think the
      more complex data ownership used in PETSc (as compared to libCEED)
      is one of the more complex issues that would need to be planned
      out for a Rust focused interface.<br></p><div class="qt-moz-cite-prefix">On 7/25/22 15:34, Barry Smith wrote:<br></div><blockquote type="cite" cite="mid:941B4E85-D4E0-4634-8E69-4AE0950C649B@petsc.dev"><div class="qt-"><br></div><div class="qt-">   A  major problem with writing a completely new
        version of a large code base is that one has to start with
        nothing and slowly build up to everything, which can take years.
        Years in which you need to continue to maintain the old version,
        people want to continue to add functionality to the old version,
        and people want to continue to use the old version because the
        new version doesn't have "the functionality the user needs"
        ready yet.<br></div><div class="qt-"><br></div><div class="qt-">  Is there an approach where we can have a new PETSc
        API/language/paradigm but start with a very thin layer on the
        current API so it just works from day one?<br></div><div class="qt-"><ul class="qt-MailOutline"><li class="qt-">to this would seem to require if PETSc future is
            not in C, there has to be a very, very easy way and low
            error-prone way to wrap PETSc current to be called from the
            new language. For example, how petsc4py wraps seems too
            manual and too error-prone. C++ can easily and low-error
            prone call C, any other viable candidates?<br></li></ul><div class="qt-"><br></div></div><div class="qt-"><br></div></blockquote></blockquote><div><br></div></body></html>