vir*_*rus 5 jvm perl6 rakudo-star
我试图理解perl6及其变化而不是perl5.我知道perl 6是编译语言,但我不知道如何?它不生成任何中间代码(直接可执行或jvm字节码)?我没有任何选择做同样的事情.怎么做?
目前我能够直接执行我的代码.
$ perl6-j hello.p6
Hello world
Run Code Online (Sandbox Code Playgroud)
您可以--target=
在perl6命令行上使用,以查看编译器每个阶段的人类可读跟踪.在JVM上,如果你想要一个"编译"的字节码输出,你可以使用--target=jar
,然后看看里面.但最终Perl 6会动态编译,除非另有要求.它在每个"CompUnit"的库路径目录中保留一个字节码表示,以便下次编译步骤更快.这可以在.precomp
目录中看到.由于Perl 6如何散列并索引所有comp单元,precomp缓存非常难以手动使用.这是具有相同名称但不同版本和作者的库可以并排放置.在MoarVM上没有--target = jar,但在.precomp目录中,moar
如果链接运行时设置,则可以看到可以直接执行的原始字节码文件.
由于现在支持此操作,因此需要更新答案。
要生成perl6程序的字节码,请运行perl6 --target=<backend> --output=foo foo.pl6
。您可以使用mbc
,jvm
或js
作为目标后端。字节码将被写入文件foo
。