Как скомпилировать Perl6 программу для генерации байт-кода?

Я пытаюсь понять perl6 и его изменения, чем perl5. Я узнал, что Perl 6 - это компилируемые языки, но я не понимаю, как? Это не генерирует какой-либо промежуточный код (непосредственно исполняемый или байт-код jvm)? Я не получаю никакой возможности сделать то же самое. Как это сделать?

В настоящее время я могу напрямую выполнить свой код.

$ perl6-j hello.p6
Hello world

Я следую за https://github.com/rakudo/rakudo

2 ответа

Ты можешь использовать --target= в командной строке perl6, чтобы увидеть удобочитаемый след каждой стадии компилятора. На JVM, если вы хотите иметь "скомпилированный" вывод байт-кода, вы можете использовать --target=jar а затем взгляните внутрь. Но в конечном итоге Perl 6 компилируется на лету, если не спрашивается иначе. Это оставляет представление байт-кода, кэшированное в каталогах пути библиотеки каждого "CompUnit", так, чтобы шаг компиляции был быстрее в следующий раз. Это можно увидеть в .precomp каталоги. Кэш предварительной компоновки очень сложно использовать вручную из-за того, как Perl 6 хэширует и индексирует все комповые модули. Это так, что библиотеки с одинаковым именем, но разной версией и автором могут находиться рядом. В MoarVM нет эквивалента --target=jar, но в каталоге.precomp вы можете увидеть необработанные файлы байт-кода, которые могут быть непосредственно выполнены moar если вы связываете настройки времени выполнения.

Обновление ответа для этого, поскольку теперь это поддерживается.

Чтобы сгенерировать байт-код для программы Perl6, запустите perl6 --target=<backend> --output=foo foo.pl6. Ты можешь использоватьmbc, jvm, или jsв качестве целевого сервера. Байт-код будет записан в файлfoo.

Запись байт-кода в файл как для модулей, так и для программ пока официально не поддерживается. Отсюда и отсутствие документации для --target,

Другие вопросы по тегам