跳转到内容

Parrot 虚拟机/高级语言互操作性

来自维基教科书,开放的书籍,开放的世界

高级语言互操作性

[编辑 | 编辑源代码]

Parrot 的设计不仅仅是为了 Perl6,尽管这最初是主要的推动力之一。Parrot 被设计和实现为所有动态编程语言(甚至一些静态类型语言)的虚拟机。最终目标是能够将用各种语言编写的工具和库组合在一起,并允许开发人员使用对该项目最有意义的语言编写项目的不同部分。

Parrot 使互操作性变得容易,但最终责任在于语言设计者确保他们的语言与其他语言良好地协同工作。

.HLL 命名空间

[编辑 | 编辑源代码]

共享数据

[编辑 | 编辑源代码]

Vtables:标准接口

[编辑 | 编辑源代码]

所有 PMC 对象都实现了标准 vtable 函数,这些函数是处理外来或奇异数据类型的首要接口。如果您从通用 LISP 收到一个 Ratio 对象,您可能不知道它的方法是什么,或者当您从 Perl 6 使用它时,它的内部存储结构是什么。但是,通过调用标准 vtable 方法,您可以以简单的方式与之交互。

.HLL_map PMC 映射

[编辑 | 编辑源代码]

共享函数

[编辑 | 编辑源代码]

多方法

[编辑 | 编辑源代码]

与许多现代编程语言一样,Parrot 允许函数名重载。被称为多方法分派 (MMD),Parrot 的函数调用系统非常强大和灵活。在 MMD 系统中,单个命名空间中的多个函数可以具有相同的名称,只要它们的调用签名不同即可。调用签名指定函数期望的参数数量和类型以及返回值。如果我们调用一个函数

(a, b, c, d) = Foo(x, y, z)

Parrot 仅在 Foo 具有三个输入和四个输出时才调用它。多重分派不仅用于函数,还用于操作码。程序(或者更可能是 HLL)可以添加与现有操作码同名的新的操作码,只要它使用不同的函数签名即可。这提供了一种非常强大和灵活的方法来定制您的系统。

我们将在后面的章节中详细介绍 MMD。

转换接口

[编辑 | 编辑源代码]

包含某种转换接口的想法,这些函数将自动将来自一种 HLL 的调用转换为对另一种 HLL 的适当调用,对一些开发人员很有吸引力。但是,这将产生很大的开发成本,因为对于 n 种语言,我们将需要 个接口来翻译到和从所有这些接口进行翻译。由于这种额外的复杂性成本,不建议使用接口来处理数据或函数共享。

语言开发人员可以做的最重要的事情是记录他们的接口。记录函数期望的数据类型以及它返回的数据类型非常重要。这样,从不同语言使用这些库的人就知道如何与这些函数和对象交互。

此外,文档可能会将某些函数或对象暴露为过于难以重用。这将有助于阻止开发人员使用复杂的接口。它还有助于向库设计者揭示简化其库的方法。


华夏公益教科书