我试图了解 perl6 及其比 perl5 的变化。我知道 perl 6 是编译语言,但我不知道怎么做?它没有生成任何中间代码(直接可执行或 jvm 字节码)?我没有任何选择做同样的事情。怎么做?
目前我可以直接执行我的代码。
$ perl6-j hello.p6
Hello world
我试图了解 perl6 及其比 perl5 的变化。我知道 perl 6 是编译语言,但我不知道怎么做?它没有生成任何中间代码(直接可执行或 jvm 字节码)?我没有任何选择做同样的事情。怎么做?
目前我可以直接执行我的代码。
$ perl6-j hello.p6
Hello world
您可以--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
。
官方还不支持将字节码写入模块和程序的文件。因此缺乏--target
.