Ada 编程语言如何实现包?它使用结构吗?记录?如果可能的话,我在哪里可以找到此实现的示例?
该语言并没有真正指定应该如何完成底层实现。 这由编译器供应商决定。 我怀疑他们使用结构或记录。 您找到的任何答案都将是特定于供应商的,而不是特定于语言的。 值得注意的是,最常见的编译器GNAT是开源的,因此源代码可以查看并尝试并弄清楚它们是如何做到的。 同样,这只是一种可能的实现。 其他编译器可能会以不同的方式执行此操作。
如果您只是想包的示例可能是什么样子:
空my_package.ads:
package My_Package is
-- Empty package
end My_Package;
my_package.ads,类型类似"类":
package My_Package is
type My_Type is tagged private;
function Get_Value(Self : My_Type) return Integer;
private
type My_Type is tagged record
Value : Integer := 2;
end record;
end My_Package;
my_package.adb 包含操作定义:
package body My_Package is
function Get_Value(Self : My_Type) return Integer is
begin
return Self.Value;
end Get_Value;
end My_Package;
如您所见,包可以是空的。 它们可以具有类型、操作或两者。 包是处理封装的地方(与C++和Java等类型相反)。 因此,您可以在包中包含私有类型和操作,但不能执行任何传统的面向对象编程。
Ada 包主要只是一个命名空间,因此对编译器发出的可执行代码没有影响。
让我试着说明这一点。
艾达:
...
A := B;
...
可能会发出如下代码:
...
CPY B, A
...
艾达:
package P is
B: Integer;
...
end;
...
A := P.B;
...
可能会发出完全相同的代码。B 现在位于包内这一事实不会更改发出的代码。
包可以有初始化代码,其实现方式非常类似于过程。泛型包的实例化可以像记录(其组件包含泛型参数)一样实现,也可以就地扩展,在这种情况下,情况与非泛型包相同。
有趣的问题!你为什么这么问?