きしだのはてな準備まずは言語で使う型を@TypeSystemを使って登録します。空のクラスにアノテーションを指定します。{}言語のASTのベースとなるクラスを作ります。これはTruffleのNodeクラスを継承します。このとき@TypeSystemReferenceで先ほど型を登録したクラスを指定しておきます。メソッドとしてVirtualFrameを受け取るexecuteGenericというメソッドを登録しておきます。executeXxxで型ごとの処理を書けるっぽい。frame);}式のASTを作る今回はlongだけ使うので、longリテラル用のノードを作ります。longを処理するためのexecuteLongメソッドを用意しておきます。@NodeInfoはノード情報を持たせるアノテーションです。}}そして足し算ノード。左項と右項を保持するフィールドを、@NodeChildとして持たせてます。実際の足し算はaddメソッドで定義しますが、型を限定する処理には@Specializationをつけるっぽい。}}アノテーションプロセッサによって、AddNodeGenというクラスが生成されて、実際にaddを呼び出すexecuteGenericなどのメソッドや、createというファクトリメソッドが生成されます。実行にはRootNodeを継承したクラスも必要っぽい。このexecuteメソッドが呼び出されます。}}コンテキストを保持することになってるクラスも作ります。{}そして言語を登録するクラスを作ります。@TruffleLanguage.Registrationアノテーションを指定しますが、Jyukutyoのときに比べるとidが必要になってmimeTypeがなくなり、代わりにdefaultMimeTypeとcharacterMimeTypesを指定しています。parseメソッドで足し算のパースを行ってNodeツリーを作りつつ、RootNodeに持たせて、そこからCallTargetを返すという感じ。}実行そして実行です。苦労したところで、Jyukutyoの書いてるPolyglotEngineが見当たらず。@TruffleLanguage.Registrationに指定したidを渡してContextを作り、evalすると計算してくれます。}}いやー、なにがなんだかわかりませんね。ネイティブコンパイルGraalVMをJVMとして実行することには失敗してますが、ネイティブコンパイルはできました。--tool:truffleをつけるとよさげ。06:22Truffleでの言語実装を最小手数ではじめるTweet関連記事2019-06-27GraalVMはどれだけ遅いかGraalVM流行ってますね。多くの人はGraalをAOTとして...2019-01-04Truffle言語をGraalVMで動かすTruffleを使って実装した言語をGraalVMで動かす方法、なかなか...2019-01-03簡易Truffle言語に変数を実装するTruffleで足し算してみたけど、やっぱちょっと変数を実装してお...2018-04-22GraalVMでRust動かしたりレイトレをネイティブコンパイルしたりGraalVMが正式にリリースされました。3月別アーカイブリンクはてなブログブログをはじめる週刊はてなブログはてなブログProはてなブログをはじめよう!nowokayさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。