Реализация языка программирования на архитектуре GraalVM - PullRequest
0 голосов
/ 11 февраля 2019

Каковы (архитектурные) различия в реализации языка программирования на архитектуре GraalVM - в частности, между Graal, Truffle и LLVM с использованием Sulong?

Я планирую переопределить существующий язык программирования со статической типизацией наАрхитектура GraalVM, так что я могу использовать ее из Java без особых хлопот.

На данный момент есть три варианта:

  • Emit JVM bytecode
  • ЗаписатьИнтерпретатор трюфелей
  • Издает битовый код LLVM, используйте Sulong для запуска его на GraalVM

enter image description here

1 Ответ

0 голосов
/ 12 февраля 2019

Испускание байт-кода JVM является традиционным вариантом.Вам придется работать на уровне байт-кода, и вам придется оптимизировать свой код перед тем, как отправлять байт-код, поскольку возможности JVM для его оптимизации после его отправки ограничены.Чтобы получить хорошую производительность, вам, возможно, придется использовать invokedynamic.

Использование Truffle - это, я бы сказал, простой вариант.Вам нужно только написать интерпретатор AST, и тогда генерация кода для вас.Это также высокопроизводительный вариант - на всех языках, где есть версия Truffle и версия с байт-кодом, версия Truffle уверенно превосходит версию с байт-кодом, а также является более простой из-за отсутствия стадии генерации байт-кода.

Излучение LLVM-кодаи работать на Сулонге - вариант, но я бы его не рекомендовал, если у вас нет других ограничений, которые приведут вас к этому варианту.Опять же, вы должны выполнить генерацию битового кода самостоятельно, и вам придется оптимизировать себя перед тем, как испускать битовый код, поскольку после установки битового кода оптимизации ограничены.

Ruby хорош для сравнения этих опций - потому что естьверсия, которая испускает байт-код JVM (JRuby), версия, использующая Truffle (TruffleRuby), и версия, которая испускает битовый код LLVM (Rubinius, но затем он не запускает этот битовый код в Sulong).Я бы сказал, что TruffleRuby быстрее и проще в реализации, чем Rubinius или JRuby.(Я работаю над TruffleRuby.)

Я бы не беспокоился о том, что ваш язык статически типизирован.Truffle может работать со статическими типами и может использовать специализацию профилирования, чтобы снова обнаружить во время выполнения больше мелкозернистых типов, чем выражено статически.

...