Neben Java bzw JVM-Bytecode unterstützt GraalVM auch die Ausführung von LLVM-Bitcode.
$ cat > test.c
#include <stdio.h>
int main(void) {
printf("Hello World!\n");
return 0;
}
$ clang -c -emit-llvm test.c
$ $GRAALVM/bin/lli test.bc
Hello World!
Schon mal interessant, lustig wird es aber erst, wenn man dies mit Java kombiniert. Mit der Polyglot-API kann die Bitcode-Datei geladen, und einzelne Funktionen daraus ausgeführt werden.
import org.graalvm.polyglot.*;
import java.io.*;
public class HelloPolyglot {
public static void main(String[] args) {
try {
// create a polyglot context that can access the native interface
Context ctx = Context.newBuilder().allowAllAccess(true).build();
// load an llvm bitcode file
File file = new File("test.bc");
Source source = Source.newBuilder("llvm", file).build();
Value c = ctx.eval(source);
// get the main function and execute it
c.getMember("main").execute();
} catch (IOException e) {
System.err.println(e);
}
}
}
Ich hab auch ein etwas größeres Beispielprogramm.
Links:
Kommentare