<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p>Related:<br>
<br>
<a class="moz-txt-link-freetext" href="https://jornvernee.github.io/java/panama/rust/panama-ffi/2021/09/03/rust-panama-helloworld.html">https://jornvernee.github.io/java/panama/rust/panama-ffi/2021/09/03/rust-panama-helloworld.html</a></p>
<p>Cheers<br>
Maurizio<br>
</p>
<div class="moz-cite-prefix">On 28/03/2024 07:37, Red IO wrote:<br>
</div>
<blockquote type="cite" cite="mid:CABKyW1uQhOuvBCF7Wrex-rO8z66FkrcLc9yL14QJPfkcy0oV4Q@mail.gmail.com">
<div dir="auto">If I understand you correctly you want to access
fields of a rust struct using the Panama ffi.
<div dir="auto">The problem is that rust doesn't have an ABI
(yet). This means rust makes no guarantees about calling
conventions or struct layouts.</div>
<div dir="auto">There are 2 ways you can access fields under
these conditions. Either you mark your rust struct as
#[repr(C)] or you export extern "C" getters and setters. </div>
<div dir="auto">Accessing rust structs without help on the rust
side is impossible. This is not a shortcoming in the Java ffi
but in the rust ffi.</div>
<div dir="auto"><br>
</div>
<div dir="auto">Great regards </div>
<div dir="auto">RedIODev </div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Thu, Mar 28, 2024, 07:42
Zea <<a href="mailto:zea_64@proton.me" moz-do-not-send="true" class="moz-txt-link-freetext">zea_64@proton.me</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="font-family:Arial,sans-serif;font-size:14px;color:rgb(0,0,0);background-color:rgb(255,255,255)">Hi,<br>
I've been really excited to use this API for accessing Rust
libraries, but ran into a snag.<br>
</div>
<div style="font-family:Arial,sans-serif;font-size:14px;color:rgb(0,0,0);background-color:rgb(255,255,255)"><br>
</div>
<div style="font-family:Arial,sans-serif;font-size:14px;color:rgb(0,0,0);background-color:rgb(255,255,255)">Most
Rust types have undefined layout, with the only properties
known being size and alignment via const functions that I
can export as symbols for the Java side to know ahead of
time. From my understanding of the AMD64 ABI, you need to
know the exact struct definition because it can sometimes
pass things in registers rather than the stack, so how would
I go about passing types by value (at least semantically)?</div>
<div style="font-family:Arial,sans-serif;font-size:14px;color:rgb(0,0,0);background-color:rgb(255,255,255)"><br>
</div>
<div style="font-family:Arial,sans-serif;font-size:14px;color:rgb(0,0,0);background-color:rgb(255,255,255)">The
best I've come up with is passing in/out pointers and
memcpying those, but is this the best way? What are the JIT
implications of this, if any?</div>
<div style="font-family:Arial,sans-serif;font-size:14px;color:rgb(0,0,0);background-color:rgb(255,255,255)"><br>
</div>
<div style="font-family:Arial,sans-serif;font-size:14px;color:rgb(0,0,0);background-color:rgb(255,255,255)">Thanks
for helping!<br>
</div>
</blockquote>
</div>
</blockquote>
</body>
</html>