5

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

目前我可以直接执行我的代码。

$ perl6-j hello.p6
Hello world

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

4

3 回答 3

7

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

于 2016-08-14T07:09:39.493 回答
5

更新这个答案,因为现在支持这个。

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

于 2019-08-03T12:45:14.033 回答
3

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

于 2016-08-14T06:02:43.037 回答