鹦鹉虚拟机/鹦鹉编程
外观
< 鹦鹉虚拟机
鹦鹉虚拟机(PVM)可以使用多种语言、脚本和技术进行编程。这种多功能性一开始可能会让人感到困惑。以下是一些使用鹦鹉编程的方法
- 鹦鹉汇编语言 (PASM)。这是为鹦鹉编程的最低人类可读方式,与传统的汇编语言非常相似。
- 鹦鹉中间表示 (PIR)。这是一种比 PASM 更易于编程的高级语言,并且使用得更为普遍。
- 不完全的 Perl (NQP)。这是一个 Perl 6 语言的简化部分实现,用于引导。它比 PIR 更高级,拥有 Perl 6 的许多功能和能力。目前,NQP 尚未完全实现,必须单独编译成字节码才能在 Parrot 上运行。
- 自定义语言。使用鹦鹉编译器工具(PCT),可以轻松地在 Parrot 上实现新的动态语言。一旦为某种语言创建了解析器和库,就可以使用该语言为 Parrot 进行编程。许多常见的编程语言,包括 Perl 6、Python 和 JavaScript (ECMAScript),正在 Parrot 上实现。我们将在后面的部分讨论更多语言。
如上所述,有多种不同的方法可以为 Parrot 编程。然而,不同的编程方法需要不同的步骤。在这里,我们将非常简要地概述一些为 Parrot 编程的方法。
- PASM 和 PIR
- 用 PASM 或 PIR 编写的程序,例如
Foo.pasm
或Bar.pir
,可以通过以下两种方式之一运行。它们可以直接通过键入(在大多数 Windows 和 Unix/Linux 系统上)进行解释
./parrot Foo.pasm
- 或
./parrot Bar.pir
- 这将以解释器模式运行 Parrot。但是,我们可以使用以下标志将这些程序编译成 Parrot 字节码 (PBC)
./parrot -o Foo.pbc Foo.pir ./parrot -o Bar.pbc Bar.pir
- 当然,您可以随意命名输出文件。一旦你拥有一个 PBC 文件,你可以这样运行它
./parrot Foo.pbc
- NQP
- NQP 必须使用 NQP 编译器编译成 PIR。它位于compilers/nqpParrot 存储库的目录
- 高级语言
- 要在比 NQP 或 PIR 更高级的语言中为 Parrot 编程,例如 Perl 6、Python 或 Ruby,首先必须有一个可用的编译器。例如,要运行文件
Foo.pl
(“.pl” 是 Perl 程序的文件扩展名),您将键入
./parrot languages/perl6/perl6.pbc Foo.pl
- 这会在 Parrot 上运行 Perl 6 编译器,并将文件名
Foo.pl
传递给编译器。要将文件输出为 PIR 或 PBC,您将使用--target=
选项指定输出格式。
我们将在本书中经常使用的一个术语是“虚拟机”,简称 VM。现在有必要讨论一下 VM 到底是什么。
在谈论虚拟机之前,让我们先考虑一下实际的计算机硬件。在普通的计算机系统(本机)中,有一个微处理器负责接收指令并执行必要的操作。这些指令是用高级语言编写的,并编译成处理器使用的二进制机器代码。问题在于不同类型的处理器使用不同的机器代码,为了使程序在不同的平台上运行,需要为每个平台重新编译它。
与普通的计算机处理器不同,虚拟机是用软件而不是硬件构建的。虚拟机是用高级语言编写的,并像往常一样编译成机器代码。然而,在虚拟机上运行的程序编译成字节码而不是机器代码。这个字节码运行在虚拟机之上,虚拟机将其转换成处理器指令。
以下表格总结了虚拟机和本机之间一些重要的区别
本机 | 虚拟机 | |
---|---|---|
实现 | 硬件 | 软件 |
执行速度 | 快 | 慢 |
本机机器代码编程 | 必须将每个程序编译成本机机器代码 | 只需将虚拟机编译成本机机器代码,其他所有内容都转换为字节码 |
可移植性 | 每个程序都必须在每个新的硬件平台上重新编译 | 程序只需编译成字节码一次,就可以在安装了 VM 的任何地方运行 |
可扩展性 | 不可能 | 虚拟机可以随着时间的推移进行改进、扩展、修补和添加 |