3.1 KiB
3.1 KiB
roast-vm-sys Crate
Location: crates/roast-vm-sys/
A cdylib crate that exports native method implementations callable from Java via JNI.
Overview
roast-vm-sys is a JNI wrapper crate that exposes the roast-vm-core runtime to Java. It's compiled as a C dynamic library (cdylib) named roast_vm.
Exported Native Methods
The crate exports 40+ JNI native functions via #[no_mangle] extern "system" declarations.
By Module
| Module | Functions |
|---|---|
thread.rs |
Thread.currentThread(), Thread.start0(), Thread.setPriority0() |
object.rs |
Object.hashCode(), Object.clone(), Object.notify(), Object.notifyAll(), Object.wait() |
class.rs |
Class.forName0(), Class.getPrimitiveClass(), Class.getDeclaredConstructors0() |
reflection.rs |
Reflection.getCallerClass() |
reflect/array.rs |
Array.newArray() |
string.rs |
String.intern() |
system.rs |
System.arraycopy(), System.nanoTime() |
runtime.rs |
Runtime.maxMemory(), Runtime.availableProcessors() |
misc_unsafe.rs |
Unsafe field offsets, volatile read/write, memory allocation |
file_output_stream.rs |
FileOutputStream.writeBytes() |
system_props.rs |
vmProperties() - VM identity (version 0.1.0, vendor "infernap12") |
CDS.rs |
Class Data Sharing stubs |
signal.rs |
Signal.handle0() stub |
scoped_memory_access.rs |
ScopedMemoryAccess registration |
Bridge Pattern
Each native function follows this pattern:
- Extract VmThread from
JNIEnv.reserved0usingget_thread()helper - Resolve References - Convert JNI handles (jobject) to internal references:
resolve_object()- gets ObjectReferenceresolve_array()- gets ArrayReferenceresolve_reference()- gets generic ReferenceKind
- Perform Operation via core VM APIs
- Return Result in JNI-compatible format
Example Native Implementation
#[unsafe(no_mangle)]
pub extern "system" fn Java_org_example_MockIO_print(
env: JNIEnv,
_jclass: JClass,
input: JString,
) {
unsafe {
let input: String = env.get_string_unchecked(&input)
.expect("Couldn't get java string!")
.into();
std::io::stdout().write_all(input.as_bytes()).ok();
}
}
File Structure
17 modules organized by Java class:
lib.rs- Core helpers, test functions (MockIO.print(),Main.getTime())runtime.rs,thread.rs,class.rs- Core VM operationsobject.rs,string.rs,reflection.rs,reflect/- Object/class introspectionsystem.rs,file_output_stream.rs- System I/Omisc_unsafe.rs- Unsafe memory operations (largest implementation, ~626 lines)CDS.rs,signal.rs,system_props.rs,scoped_memory_access.rs- Stubs/properties
GC Interaction
Native methods access the garbage collector via:
thread.gc.read()/thread.gc.write()for object access- Object creation, cloning, and array operations go through GC
- Field access via
thread.gcor direct field references
Error Handling
Mixed approach:
- Some methods panic on errors
- Some return null/default values
- TODO comments indicate incomplete exception throwing