docs: add glue/readme
This commit is contained in:
parent
e5622087dc
commit
4c981c9c9a
29
toad-java-glue-rs/README.md
Normal file
29
toad-java-glue-rs/README.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
## toad-java-glue
|
||||||
|
Implementations of native java methods and state for
|
||||||
|
running `toad` with the JVM
|
||||||
|
|
||||||
|
### integers
|
||||||
|
all integers stored in java objects to be passed to rust code
|
||||||
|
should use the `dev.toad.ffi.uX` compat classes to ensure
|
||||||
|
that the primitive casts in rust succeed.
|
||||||
|
|
||||||
|
### unsafe
|
||||||
|
#### justification
|
||||||
|
aside from the [runtime](#pub-static-mut-runtime), all usage of
|
||||||
|
unsafe in safe functions is accompanied by a `// SAFETY` comment
|
||||||
|
justifying its use and explaining the risks (or not) of memory defects
|
||||||
|
and UB.
|
||||||
|
|
||||||
|
#### pub static mut RUNTIME
|
||||||
|
`unsafe` is used in an **unjustified** manner to cast `long` addresses
|
||||||
|
into pointers to the `RUNTIME` static or data within.
|
||||||
|
|
||||||
|
The `RUNTIME` static is created in a way such that the location in
|
||||||
|
memory does not move. This means that addresses issued by rust code
|
||||||
|
may be stored safely in java objects to be eventually passed back to
|
||||||
|
rust code to perform operations on the rust structs.
|
||||||
|
|
||||||
|
Addresses are issued by rust code using the [strict provenance API](https://doc.rust-lang.org/nightly/std/ptr/index.html#strict-provenance)
|
||||||
|
to avoid direct integer <> pointer casts, as well as to theoretically
|
||||||
|
provide runtime guarantees that the addresses gotten from java do not
|
||||||
|
attempt to access memory regions outside of the runtime data structure.
|
Loading…
Reference in New Issue
Block a user