Mike, I googled "calling rust from java" since Scala is similar to Java.  I 
have only very limited experience with calling native code from Java programs, 
but I believe the following apply: 1) you have to do some painstaking and 
careful programming to make the Java Native Interface code and the Rust code 
compatible so the calls can go through; 2) the performance hit doesn't slow 
down the calls very much.

Someone wrote up a success story called "Using Rust in-process with Java" here:
https://www.vortexa.com/insights/technology/rust-in-process-java/ 

Someone wrote a library called j4rs to help call Java from Rust and the library 
also supports the reverse direction from Java to Rust:
https://github.com/astonbitecode/j4rs-java-call-rust
https://lib.rs/crates/j4rs

Incrementally rewriting part of Daffodil in Rust to speed up Daffodil is a more 
holistic approach than translating a DFDL schema to Rust code to parse and 
unparse data.  A code generator backend supports only a subset of the DFDL 
specification because it takes a lot of time and work to support the entire 
specification, while Daffodil can benefit from a speedup on most platforms 
(except platforms where a Rust compiler isn't available) while continuing to 
support all DFDL schemas.

John

-----Original Message-----
From: Mike Beckerle <mbecke...@apache.org> 
Sent: Tuesday, January 16, 2024 5:43 AM
To: dev@daffodil.apache.org
Subject: EXT: Re: Rust vs. C backend

John, what do you (or anyone?) know about interfacing Rust and JVM languages 
like Java/Scala? A quick search pulled back nothing other than Java JNI and/or 
sending GPBs back and forth to micro-services.

I'm wondering if incrementally rewriting parts of the existing, slow, Scala 
backend in Rust is feasible, or if this is not a smooth enough pathway.

For example, I suspect that Daffodil's lexical analyzer could use a rewrite. It 
is one of the oldest pieces of code in Daffodil, and was created back when 
myself and others were really still Scala newbies, and we were just learning 
the implications for the lexical analyzer design I.e., discovering them the 
hard way, realizing the design was not sufficiently general, adding more tweaks 
(which could be suboptimal), etc.  We had not yet developed the philosophy that 
the backend code should be "java like", and not use scala idioms that are less 
efficient.

But if we're rewriting parts of the back-end and the rewrites are intended to 
be high performance, then it would seem the right language to use is something 
like Rust.

However, this requires that we're able to call it efficiently and that the 
bridge from scala to that rust code is not so expensive as to eliminate the 
performance gain.



On Fri, Jan 12, 2024, 5:52 PM Interrante, John A (GE Aerospace, US) < 
john.interra...@ge.com> wrote:

> We developed a fork of the C backend that generated VHDL, but I can't 
> get into the implementation details here.  I think the line between 
> Rust and C is two-fold: how many machine architectures Rust has been 
> ported to, and how often you need to call C functions from Rust, which 
> means having to use Rust's Foreign Function Interface.  Otherwise, 
> Rust is better than C for new code and Daffodil should have a Rust backend.
>
> -----Original Message-----
> From: Mike Beckerle <mbecke...@apache.org>
> Sent: Friday, January 12, 2024 5:50 AM
> To: dev@daffodil.apache.org
> Subject: EXT: Re: Rust vs. C backend
>
> what I meant by "What did you mean by the phrase “basis for generating 
> VHDL or System Verilog?”
>
> I suppose I was thinking you had a fork of the C backend that created 
> Verilog/VHDL, but perhaps the pathway is via the C code output, which 
> is then translated into Verilog/VHDL?
>
> In any case we're hearing lots more complaints about performance of 
> Daffodil's scala back-end (and missing optimizations in the middle phases).
>
> Generating C code won't work for Cyberian software-based applications 
> as a memory-safe language is required in these solutions. I will have 
> to learn more about Rust. We need a memory safe language that lets you 
> control the data representations far better than Java/Scala and JVM 
> languages. I am curious where the line is between Rust and C, i.e., 
> what kinds of things are possible in C that aren't possible in Rust.
>
> On Thu, Jan 11, 2024 at 5:01 PM Interrante, John A (GE Aerospace, US) 
> < john.interra...@ge.com> wrote:
>
> > Hi Mike,
> >
> > My view is that when the goal is to generate parsers and unparsers 
> > from fixed format binary data DFDL schemas, compile them to native 
> > machine code, and execute the machine code on CPUs, Daffodil should 
> > generate Rust.  We would have preferred Rust when we started the C 
> > code generator work.  Rust is memory safe, type safe, etc. – but it 
> > was not available for our phase 1 target CPU.
> >
> > Creating a Rust backend makes sense, although we don’t think there 
> > is a Rust to hardware path – at least none that we are aware of.  
> > What did you mean by the phrase “basis for generating VHDL or System 
> > Verilog?”
> >
> > John
> >
> > From: Mike Beckerle <mbecke...@apache.org>
> > Sent: Thursday, January 11, 2024 5:13 AM
> > To: John Interrante <jinterra...@apache.org>
> > Cc: dev@daffodil.apache.org
> > Subject: EXT: Rust vs. C backend
> >
> > John,
> >
> > What's your view of generating Rust vs. Generating C from DFDL?
> >
> > Those of us working in Cyberia, well, the edict has been issued that 
> > only memory-safe languages/runtimes are allowed to reduce risk of 
> > cyber-attacks via things like libc flaws.
> >
> > Seems to me that Rust is the lowest level language that would be 
> > acceptable
> >
> > I believe ultimately, the goal is to generate a useful software 
> > implementation that does not compromise on performance, and to be a 
> > basis for generating VHDL or System Verilog.
> >
> > I imagine you've given this some thought you can share.
> > Mike Beckerle
> > Apache Daffodil PMC | 
> > daffodil.apache.org<http://daffodil.apache.org/>
> > OGF DFDL Workgroup Co-Chair |
> > www.ogf.org/ogf/doku.php/standards/dfdl/dfdl
> > <http://www.ogf.org/ogf/doku.php/standards/dfdl/dfdl>
> > Owl Cyber Defense | www.owlcyberdefense.com< 
> > http://www.owlcyberdefense.com/>
> >
>

Reply via email to