【问题标题】:how to compile perl6 program to generate bytecode?如何编译perl6程序生成字节码?
【发布时间】:2016-08-14 05:47:27
【问题描述】:

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

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

$ perl6-j hello.p6
Hello world

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

【问题讨论】:

    标签: jvm raku rakudo-star


    【解决方案1】:

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

    【讨论】:

    • --target=moar 是个东西
    • 目标 moar 是否将所有内容打包,以便您拥有一个可由 MoarVM 执行的文件?或者它是否等同于在 .precomp 中找到的类文件
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多