Ruby,PHP或Perl可以为Python等代码创建一个预编译的文件吗?

2022-08-30 18:45:15

对于Python,它可以创建一个预编译的版本file.pyc,以便程序可以在不再次解释的情况下运行。Ruby、PHP 和 Perl 可以在命令行上做同样的事情吗?


答案 1

Ruby没有可移植的字节码规范,因此也没有加载预编译字节码存档的标准方法。但是,几乎所有 Ruby 实现都使用某种字节码或 intcode 格式,其中一些可以转储并重新加载字节码存档。

YARV在执行代码之前总是编译为字节码,但这通常只在内存中完成。有一些方法可以将字节码转储到磁盘。然而,目前没有办法把它读回去。这种情况将在未来发生变化:YARV的字节码验证器的工作正在进行中,一旦完成,字节码就可以安全地加载到VM中,而不必担心损坏。此外,JRuby开发人员已经表示,一旦YARV字节码格式和验证器稳定下来,他们愿意在JRuby中实现YARV VM模拟器,以便您可以将YARV字节码加载到JRuby中。(请注意,此版本已过时

Rubinius也总是编译成字节码,它有一种用于编译文件的格式(文件,类似于JVM文件),并且有关于字节码存档格式(文件,类似于JVM文件)的讨论。Rubinius有可能实现YARV模拟器,如果将应用程序部署为YARV字节码变得流行的话。此外,JRuby开发人员表示,如果Rubinius字节码成为部署Ruby应用程序的流行方式,他们愿意在JRuby中实现Rubinius字节码模拟器。.rbc.class.rba.jar

XRuby是一个纯粹的编译器,它将Ruby源代码直接编译为JVM字节码(文件)。您可以像部署任何其他 Java 应用程序一样部署这些文件。.class.class

JRuby最初是一个解释器,但它有一个JIT编译器和一个AOT编译器(),可以将Ruby源代码编译为JVM字节码(文件)。此外,正在创建一个新的编译器,该编译器可以将Ruby代码编译(类型注释)为JVM字节码,该字节码实际上看起来像Java类,并且可以从Java代码中毫无障碍地使用。jrubyc.class

Ruby.NET 是一个纯编译器,它将Ruby源代码编译为CIL字节码(PE或文件)。您可以像部署任何其他 CLI 应用程序一样部署这些应用程序。.dll.exe

IronRuby 也可以编译为 CIL 字节码,但通常在内存中执行此操作。但是,您可以将命令行开关传递给它,以便它将 和 文件转储到磁盘。一旦你有了这些,它们就可以正常部署。.dll.exe

BlueRuby自动将Ruby源代码预解析为BRIL(BlueRuby中间语言),这基本上是一个序列化的解析树。(有关详细信息,请参阅 Blue Ruby - A Ruby VM in SAP ABAP(PDF)。

我认为(但我绝对不确定)有一种方法可以让Cardinal转储Parrot字节码存档。(实际上,Cardinal只编译为PAST,然后Parrot接管,所以Parrot的工作是转储和加载字节码存档。


答案 2

Perl 5可以将字节码转储到磁盘,但它是错误的和令人讨厌的。Perl 6有一个非常干净的方法来创建Parrot可以运行的字节码可执行文件。

Perl的即时编译速度足够快,在大多数情况下这并不重要。它确实很重要的一个地方是在CGI环境中,这就是mod_perl的目的。


推荐