【发布时间】:2016-08-14 05:47:27
【问题描述】:
我试图了解 perl6 及其比 perl5 的变化。我知道 perl 6 是编译语言,但我不知道怎么做?它没有生成任何中间代码(直接可执行或 jvm 字节码)? 我没有任何选择做同样的事情。怎么办?
目前我可以直接执行我的代码。
$ perl6-j hello.p6
Hello world
【问题讨论】:
标签: jvm raku rakudo-star
我试图了解 perl6 及其比 perl5 的变化。我知道 perl 6 是编译语言,但我不知道怎么做?它没有生成任何中间代码(直接可执行或 jvm 字节码)? 我没有任何选择做同样的事情。怎么办?
目前我可以直接执行我的代码。
$ perl6-j hello.p6
Hello world
【问题讨论】:
标签: jvm raku rakudo-star
您可以在 perl6 命令行上使用 --target= 来查看编译器每个阶段的人类可读跟踪。在 JVM 上,如果您希望有一个“已编译”的字节码输出,您可以使用 --target=jar 然后看看里面。但最终 Perl 6 会即时编译,除非另有要求。它在每个“CompUnit”的库路径目录中留下缓存的字节码表示,以便下次编译步骤更快。这可以在.precomp 目录中看到。由于 Perl 6 如何散列和索引所有 comp 单元,precomp 缓存很难手动使用。这样同名但版本和作者不同的库可以并排放置。在 MoarVM 上没有与 --target=jar 等效的功能,但在 .precomp 目录中,如果您链接运行时设置,您可以看到可以由moar 直接执行的原始字节码文件。
【讨论】:
--target=moar 是个东西
更新答案,因为现在支持。
要为 perl6 程序生成字节码,请运行 perl6 --target=<backend> --output=foo foo.pl6。您可以使用mbc、jvm 或js 作为目标后端。字节码将写入文件foo。
【讨论】:
官方尚不支持将字节码写入模块和程序的文件。因此缺少--target 的文档。
【讨论】: