- JDK 23対応GraalVM (最新)
- JDK 24対応GraalVM (早期アクセス)
- JDK 21対応GraalVM
- JDK 17対応GraalVM
- アーカイブ
- 開発ビルド
- Truffle言語実装フレームワーク
- Truffleブランチ計測
- 動的オブジェクトモデル
- 静的オブジェクトモデル
- インタプリタコードのホスト最適化
- Truffleの関数インライン化アプローチ
- Truffleインタプリタのプロファイリング
- Truffle Interop 2.0
- 言語実装
- Truffleを使った新しい言語の実装
- Truffle言語とInstrumentsのJavaモジュールへの移行
- Truffleネイティブ関数インターフェース
- Truffleインタプリタの最適化
- オプション
- On-Stack Replacement
- Truffle文字列ガイド
- 特殊化ヒストグラム
- DSL特殊化のテスト
- Polyglot APIベースのTCK
- Truffleのコンパイルキューへのアプローチ
- Truffleライブラリガイド
- Truffle AOT概要
- Truffle AOTコンパイル
- 補助エンジンキャッシング
- Truffle言語セーフポイントチュートリアル
- 単態化
- 分割アルゴリズム
- 単態化のユースケース
- ポリモーフィックな特殊化のランタイムへの報告
Truffle言語実装フレームワーク
Truffle言語実装フレームワーク (Truffle) は、自己変更抽象構文木のためのインタプリタとしてツールと言語実装を構築するためのオープンソースライブラリです。オープンソースのGraalコンパイラと共に、Truffleは、現在の動的言語の時代におけるプログラミング言語実装技術の大きな前進を表しています。
Truffleの成果物はMaven Centralにアップロードされています。pom.xml
ファイルから以下のように使用できます。
<dependency>
<groupId>org.graalvm.truffle</groupId>
<artifactId>truffle-api</artifactId>
<version>24.0.2</version> <!-- or any later version -->
</dependency>
<dependency>
<groupId>org.graalvm.truffle</groupId>
<artifactId>truffle-dsl-processor</artifactId>
<version>24.0.2</version>
<scope>provided</scope>
</dependency>
言語の実装 #
Truffleフレームワークを使用すると、GraalVMでプログラミング言語を効率的に実行できます。インタプリタから高性能コードを自動的に派生させることで、言語実装を簡素化します。
はじめに #
私たちは、Truffle APIドキュメントを幅広く提供しています。言語開発を開始するには、サブクラス化する必要があるTruffleLanguageクラスを参照してください。Truffleには、Graalコンパイラといくつかの言語実装がGraalVMの一部として付属しています。
Truffleで言語を実装する良い方法は、SimpleLanguageプロジェクトをフォークしてハッキングを開始することです。SimpleLanguageは比較的小さな言語実装であり、十分に文書化されており、ほとんどのTruffle機能を実証するように設計されています。既存のオープンソース言語の実装と実験のコードを見てみることもできます。
高度なトピック #
Truffleを使用して言語を実装すると、他の「Truffle」言語と相互運用できます。言語が有効な多言語市民であるかどうかを判断するには、Polyglot APIベースのテスト互換性キットの使用について読んでください。関連するトピックとしては、Truffleライブラリと、それらを使用して言語の相互運用性を実装する方法があります。Truffleで実装された言語は、Polyglot APIを使用してJavaホストアプリケーションに埋め込むこともできます。
言語のパフォーマンスを向上させる方法を理解するには、TruffleインタプリタのプロファイリングとTruffleインタプリタの最適化に関するドキュメントを参照してください。また、Truffleの自動単態化機能 (例:分割) の使用方法を理解するには、関連ドキュメントを参照してください。
ツールの実装 #
Truffleフレームワークを使用すると、デバッガ、プロファイラ、その他の計測などの言語に依存しないツールを開発できます。TruffleLanguage
と同様に、ツール開発を開始するにはサブクラス化する必要があるTruffleInstrumentクラスを参照してください。
独自の「Truffle」ツールを実装する場合、良い出発点は、上記のSimpleLanguageプロジェクトと同様に、SimpleToolプロジェクトをフォークしてハッキングを開始することです。SimpleToolは、Truffleを使用したツール開発プロセスを理解するための出発点となる、十分に文書化された最小限のコードカバレッジツールです。
Truffleで開発されたツールは、同じASTノードベースのアプローチを使用して言語を計測するため、パフォーマンスの向上に関して言語開発者が利用できるほとんどの手法は、ツール開発者も利用できます。そのため、ツールを最大限に活用するには、言語開発者の観点からTruffleの仕組みを理解することをお勧めします。
互換性 #
Truffle APIは、バージョン間で下位互換性を維持するように進化しています。APIが非推奨になると、削除されるまで少なくとも2つのGraalVMリリースの間、非推奨として残ります。
ベストプラクティスとして、Truffleは一度に1バージョンだけアップグレードすることをお勧めします。こうすることで、次のバージョンに進む前に、バージョンを上げて非推奨の警告を修正できます。非推奨のAPIに関する非推奨のJavadocタグは、アップグレード方法のガイドとなるように設計されています。
最新の追加と変更は、変更ログに記載されています。
Truffleの変更 #
Truffleを変更する方法については、このファイルを確認してください。Truffleに貢献したい場合は、貢献ドキュメントを参照してください。