GraalVM: Как реализовать оптимизацию компилятора? - PullRequest
0 голосов
/ 15 мая 2019

Я хочу разработать инструмент, который выполняет определенные оптимизации в программе на основе структуры программы. Например, скажем, я хочу определить if-else внутри цикла, и мой инструмент должен переписать его в два цикла. Я хочу, чтобы инструмент мог переписывать программы из широкого спектра языков, например, Java, C ++, Python, Javascript и т. Д.

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

Имеет ли GraalVM общее промежуточное представление (что-то вроде LLVM IR)? Я посмотрел на документацию, но я не уверен, с чего начать. Есть указатели?

Примечание: Я не ищу взаимодействия между языками. Вы можете предположить, что программы, которые я хочу переписать, написаны на одном языке; язык может отличаться для разных программ.

1 Ответ

1 голос
/ 15 мая 2019

GraalVM имеет два компонента, которые имеют отношение к этому:

  • компилятор, который компилирует байт-код Java в собственный код
  • truffle, который является основой для реализации других языков программирования сверхуof GraalVM.

Языки, реализованные с помощью инфраструктуры Truffle, частично оцениваются как байт-код Java, который затем компилируется компилятором Graal.Эта статья / доклад содержит более подробную информацию, включая IR, используемый компилятором Graal: https://chrisseaton.com/truffleruby/jokerconf17/. В зависимости от конкретного варианта использования вы можете подключиться к трюфелю, частичному анализатору трюфеля или компилятору Graal.

...