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

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

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

$ perl6-j hello.p6
Hello world

Я подписываюсь на https://github.com/rakudo/rakudo


person Gaurav Pant    schedule 14.08.2016    source источник


Ответы (3)


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

person Matt Oates    schedule 14.08.2016
comment
--target=moar это вещь - person ugexe; 15.08.2016
comment
Упаковывает ли target moar все так, чтобы у вас был один файл, который может исполнять MoarVM? Или это эквивалент файла класса, который находится в .precomp - person Matt Oates; 19.08.2016

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

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

person pamplemousse    schedule 03.08.2019

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

person Community    schedule 14.08.2016