如何编译perl6程序来生成字节码?

vir*_*rus 5 jvm perl6 rakudo-star

我试图理解perl6及其变化而不是perl5.我知道perl 6是编译语言,但我不知道如何?它不生成任何中间代码(直接可执行或jvm字节码)?我没有任何选择做同样的事情.怎么做?

目前我能够直接执行我的代码.

$ perl6-j hello.p6
Hello world
Run Code Online (Sandbox Code Playgroud)

我关注https://github.com/rakudo/rakudo

Mat*_*tes 7

您可以--target=在perl6命令行上使用,以查看编译器每个阶段的人类可读跟踪.在JVM上,如果你想要一个"编译"的字节码输出,你可以使用--target=jar,然后看看里面.但最终Perl 6会动态编译,除非另有要求.它在每个"CompUnit"的库路径目录中保留一个字节码表示,以便下次编译步骤更快.这可以在.precomp目录中看到.由于Perl 6如何散列并索引所有comp单元,precomp缓存非常难以手动使用.这是具有相同名称但不同版本和作者的库可以并排放置.在MoarVM上没有--target = jar,但在.precomp目录中,moar如果链接运行时设置,则可以看到可以直接执行的原始字节码文件.


pam*_*sse 6

由于现在支持此操作,因此需要更新答案。

要生成perl6程序的字节码,请运行perl6 --target=<backend> --output=foo foo.pl6。您可以使用mbcjvmjs作为目标后端。字节码将被写入文件foo


小智 3

官方尚不支持将模块和程序的字节码写入文件。因此缺乏--target.