GraalVMアーキテクチャへのプログラミング言語の実装

user1091344

GraalVMアーキテクチャにプログラミング言語を実装する際の(アーキテクチャ上の)違いは何ですか?特に、Sulongを使用するGraal、Truffle、およびLLVMの間で?

GraalVMアーキテクチャーに既存の静的に型付けされたプログラミング言語を再実装して、Javaからそれほど手間をかけずに使用できるようにする予定です。

現在、3つのオプションがあります。

  • JVMバイトコードを発行する
  • トリュフ通訳を書く
  • LLVMビットコードを発行し、Sulongを使用してGraalVMで実行します

ここに画像の説明を入力してください

クリス・シートン

JVMバイトコードの発行は従来のオプションです。バイトコードレベルで作業する必要があります。また、バイトコードを発行する前にコードを最適化する必要があります。これは、JVMがバイトコードを発行した後に最適化するためのオプションが限られているためです。良好なパフォーマンスを得るには、invokedynamicを使用する必要がある場合があります。

トリュフを使うのは簡単なオプションだと思います。ASTインタープリターを作成するだけで、コード生成がすべて完了します。これは高性能オプションでもあります。Truffleバージョンとバイトコードバージョンが存在するすべての言語で、Truffleバージョンはバイトコードバージョンよりも確実に優れているだけでなく、バ​​イトコード生成段階がないためシンプルです。

LLVMビットコードを発行してSulongで実行することはオプションですが、そのオプションにつながる他の制約がない限り、これはお勧めしません。この場合も、ビットコードの生成を自分で行う必要があります。ビットコードの設定後は最適化が制限されるため、ビットコードを発行する前に自分で最適化する必要があります。

Rubyはこれらのオプションを比較するのに適しています-JVMバイトコードを発行するバージョン(JRuby)、Truffleを使用するバージョン(TruffleRuby)、およびLLVMビットコードを発行するバージョン(Rubiniusですが、Sulongではそのビットコードを実行しません)があるためです。 。TruffleRubyは、RubiniusやJRubyよりも実装が高速で簡単だと思います。(私はTruffleRubyに取り組んでいます。)

あなたの言語が静的に型付けされているという事実については心配しません。Truffleは静的型を処理でき、プロファイリングの特殊化を使用して、静的に表現されるよりも実行時に、よりきめ細かい型を再度検出できます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

プログラミング言語の進化と基盤となるアーキテクチャ

分類Dev

CUDAアーキテクチャのプログラミング

分類Dev

ロゴプログラミング言語の実装

分類Dev

プログラミング言語の実装

分類Dev

プログラミング言語の実装

分類Dev

プログラミング言語でのコールスタックの実装

分類Dev

(プログラミング言語)ベンチマーク用のツール

分類Dev

言語に依存しないプラグインアーキテクチャ

分類Dev

Cプログラミング言語の電卓(アキュムレータ)

分類Dev

意味-「IronPythonはPythonプログラミング言語の実装です」

分類Dev

システムプログラミング言語とアプリケーションプログラミング言語の違い

分類Dev

さまざまなARMアーキテクチャでのプログラミング

分類Dev

Goプログラミング言語で名前付きキャプチャグループを見つけるための正規表現

分類Dev

カーニハンとリッチーの「Cプログラミング言語」第2版への良いフォローアップ

分類Dev

Goプログラミング言語の相互並行実行

分類Dev

アノテーションベースのSpring Bootアプリケーションにプラグインアーキテクチャを実装する

分類Dev

プログラミング言語のエンディアン

分類Dev

標準のPython実装は、プログラミング言語またはスクリプト言語と見なされますか?

分類Dev

Goプログラミング言語のAndroidアプリ

分類Dev

アクター ベースのプログラミング言語でのデッドロック

分類Dev

プログラミング言語での実装ではない場合、「システムコール」とはどういう意味ですか?

分類Dev

Goプログラミング言語のforループ

分類Dev

Rのnames()など、逆関数の概念を実装するプログラミング言語

分類Dev

Cプログラミング言語のポインター

分類Dev

Linux でのシリアル ポート プログラミングの言語/フレームワーク

分類Dev

Spring MVCプラグインのアーキテクチャ

分類Dev

プラグインアーキテクチャの構築

分類Dev

Prolog DCG:プログラミング言語レクサーの作成

分類Dev

言語固有のアーキテクチャ/プロセッサ

Related 関連記事

  1. 1

    プログラミング言語の進化と基盤となるアーキテクチャ

  2. 2

    CUDAアーキテクチャのプログラミング

  3. 3

    ロゴプログラミング言語の実装

  4. 4

    プログラミング言語の実装

  5. 5

    プログラミング言語の実装

  6. 6

    プログラミング言語でのコールスタックの実装

  7. 7

    (プログラミング言語)ベンチマーク用のツール

  8. 8

    言語に依存しないプラグインアーキテクチャ

  9. 9

    Cプログラミング言語の電卓(アキュムレータ)

  10. 10

    意味-「IronPythonはPythonプログラミング言語の実装です」

  11. 11

    システムプログラミング言語とアプリケーションプログラミング言語の違い

  12. 12

    さまざまなARMアーキテクチャでのプログラミング

  13. 13

    Goプログラミング言語で名前付きキャプチャグループを見つけるための正規表現

  14. 14

    カーニハンとリッチーの「Cプログラミング言語」第2版への良いフォローアップ

  15. 15

    Goプログラミング言語の相互並行実行

  16. 16

    アノテーションベースのSpring Bootアプリケーションにプラグインアーキテクチャを実装する

  17. 17

    プログラミング言語のエンディアン

  18. 18

    標準のPython実装は、プログラミング言語またはスクリプト言語と見なされますか?

  19. 19

    Goプログラミング言語のAndroidアプリ

  20. 20

    アクター ベースのプログラミング言語でのデッドロック

  21. 21

    プログラミング言語での実装ではない場合、「システムコール」とはどういう意味ですか?

  22. 22

    Goプログラミング言語のforループ

  23. 23

    Rのnames()など、逆関数の概念を実装するプログラミング言語

  24. 24

    Cプログラミング言語のポインター

  25. 25

    Linux でのシリアル ポート プログラミングの言語/フレームワーク

  26. 26

    Spring MVCプラグインのアーキテクチャ

  27. 27

    プラグインアーキテクチャの構築

  28. 28

    Prolog DCG:プログラミング言語レクサーの作成

  29. 29

    言語固有のアーキテクチャ/プロセッサ

ホットタグ

アーカイブ