Как скомпилировать 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
,