我试图理解perl6及其变化而不是perl5。我知道perl 6是编译语言,但我不知道如何?它不生成任何中间代码(直接可执行或jvm字节码)? 我没有任何选择做同样的事情。怎么做?
目前我可以直接执行我的代码。
$ perl6-j hello.p6
Hello world
答案 0 :(得分:7)
您可以在perl6命令行上使用--target=
来查看编译器每个阶段的人类可读跟踪。在JVM上,如果您希望使用“已编译”的字节码输出,可以使用--target=jar
然后查看其中。但最终Perl 6会动态编译,除非另有要求。它在每个“CompUnit”的库路径目录中保留一个字节码表示,以便下次编译步骤更快。这可以在.precomp
目录中看到。由于Perl 6如何散列并索引所有comp单元,precomp缓存非常难以手动使用。这是具有相同名称但不同版本和作者的库可以并排放置。在MoarVM上没有--target = jar,但在.precomp目录中,如果链接运行时设置,则可以看到moar
可以直接执行的原始字节码文件。
答案 1 :(得分:6)
为此已更新答案。
要生成perl6程序的字节码,请运行perl6 --target=<backend> --output=foo foo.pl6
。您可以将mbc
,jvm
或js
用作目标后端。字节码将被写入文件foo
。
答案 2 :(得分:2)
尚未正式支持将字节码写入模块和程序的文件。因此缺少if(perWeightT[i]==0)
的文档。