прямая компиляция файла javascript в класс Java с использованием graalvm

#truffle #&raalvm

#truffle #&raalvm

Вопрос:

Я просматривал ссылку GraalVM на JS, и большинство примеров показывают создание контекста и выполнение js-кода в этом контексте.

Context context = Context.create()

Есть ли способ прямой компиляции JS-кода во что-то вроде эквивалента байт-кода, загрузки и запуска напрямую?

Ответ №1:

Языки GraalVM, JavaScript, Ruby, R, Python, Webassembly, GraalSqueak и так далее не компилируют целевую программу в байт-код.

Языковая реализация является интерпретатором абстрактного синтаксического дерева для целевого языка. Этот интерпретатор написан на Java с использованием API Truffle framework.

Во время выполнения вы создаете программу AST, используя узлы этого интерпретатора, и они знают, как оценивать себя. Например, что-то вроде a b может стать 3 объектами узла AddNode и 2 дочерними узлами. И AddNode.evaluate() может быть что-то вроде return left.evaluate() ri&ht evaluate() .

Вы можете интерпретировать дерево целевой программы, и именно так она выполняется. Во время выполнения интерпретатор может модифицировать дерево, оптимизируя выполнение после сбора некоторого профиля для того, что будет выполняться. Это своего рода объединение кода интерпретатора и данных из программы с использованием метода, называемого частичной оценкой (который вы можете рассматривать как очень всеобъемлющее встраивание).

Затем код интерпретатора дополнительно JIT-компилируется с помощью jit-компилятора JVM. Но для программы нет промежуточного представления байт-кода.

Конечно, вы можете использовать js утилиту из GraalVM для запуска кода JavaScript непосредственно с ним. Или node.js из GraalVM (или иным способом). Но я думаю, что это не то, о чем здесь спрашивают.

Комментарии:

1. спасибо за это. Я нашел статью, которая более подробно описывает ваше резюме: jrebel.com/blo&/&raal-and-truffle-for-lan&ua&e-interpretation

2. ха-ха, это запись в блоге @mani-sarkar, которую мы опубликовали, когда я еще работал в ZeroTurnaround. Как увлекателен, тесен мир!