Open3
truffle
Java 11 で truffle
必要なpackageがmoduleで公開されていない
- truffle API を使ってインタープリタを書いてみようと思って遊んでいる
- テストのため truffle で言語を書いているパッケージ内に main のクラスと関数を作って実行しようとしていた
- com.oracle.truffle.api などを import しないといけないのに、 module から公開されていないので graalvm-ce-java11 で import するとエラーになってしまう
- --add-exports オプションをつければ一応ビルドすることはできる
- ビルドはできても実行時にリンクエラーになる
解決
- --add-exportsオプションをつけてビルドする
- SimpleLanguageのように、起動用のLauncherは別パッケージで作る
- Launcherを実行する際に、↑でビルドしたjarをtruffleのクラスパスに追加する
-
-Dtruffle.class.path.append
で追加する
-
truffleで作った自作言語をgraalvmのpolyglotで実行する
truffleを使って作った言語をpolyglotで実行するには言語をinstallしないといけない。
installするには、
1. GraalVM componentにするか
2. 実行時に -Dtruffle.class.path.append
オプションを使ってtruffleのclasspathに(?)jarを追加するか
2のためにtruffle-dsl-processorがいろいろやってくれるので、これを動かさないといけない。
gradleでannotationProcessorを動かす
mavenならsimplelanguageのとおりにすればよいが、gradleでは↓このようにする
dependencies {
annotationProcessor "org.graalvm.truffle:truffle-dsl-processor:${project.graalvmVersion}"
}
Launcherを実行
java -Dtruffle.class.path.append=path/to/yourlang.jar -cp launcher LauncherMainClass ..