Ada 抱怨我在泛型类型的函数调用中添加了一个 volatile 对象而不是 volatile
Ada complaining that I've added a volatile object in a function call to generic type when not volatile
所以我得到以下声明:
record
String1 : String (1 .. 64);
String2 : String (1 .. 64);
Timestamp : Time;
Int1 : Long_Long_Integer;
String3 : Unbounded_String;
end record;
它用于
package My_Vectors is new Vectors (Index_Type => Positive, Element_Type => Object);
产生编译错误:
volatile object cannot act as actual in a call (SPARK RM 7.1.3(10))
现在,Clock
是使用的 volatile。但是我已经删除了对 Clock
的调用,我仍然得到相同的结果。
此外,我已经尝试用 Integer
类型替换 Object
类型,并且我没有收到来自 Ada 编译器的任何投诉。有人可以解释一下吗,因为我看不出这是如何将易失性对象放入实际的任何地方。
刚刚尝试使用以下记录,我得到了相同的结果:
type My_Record is
record
A: Integer;
B: Integer;
C: String(1 .. 64);
end record;
SPARK 不支持标准 Ada 容器(参见 SPARK RM 14.8)。
请改用 SPARK 兼容容器 Ada.Containers.Formal_Vectors
(另请参阅 here and here)。
关于编译器错误:Ada.Containers.Vector
的当前实现使用原子操作来提高性能(参见 here and here). These atomic operations operate (in this case) on variables of type System.Atomic_Counters.Atomic_Unsigned
(see here). This type is declared as Atomic
and therefore volatile (see RM 8(3))。
所以我得到以下声明:
record
String1 : String (1 .. 64);
String2 : String (1 .. 64);
Timestamp : Time;
Int1 : Long_Long_Integer;
String3 : Unbounded_String;
end record;
它用于
package My_Vectors is new Vectors (Index_Type => Positive, Element_Type => Object);
产生编译错误:
volatile object cannot act as actual in a call (SPARK RM 7.1.3(10))
现在,Clock
是使用的 volatile。但是我已经删除了对 Clock
的调用,我仍然得到相同的结果。
此外,我已经尝试用 Integer
类型替换 Object
类型,并且我没有收到来自 Ada 编译器的任何投诉。有人可以解释一下吗,因为我看不出这是如何将易失性对象放入实际的任何地方。
刚刚尝试使用以下记录,我得到了相同的结果:
type My_Record is
record
A: Integer;
B: Integer;
C: String(1 .. 64);
end record;
SPARK 不支持标准 Ada 容器(参见 SPARK RM 14.8)。
请改用 SPARK 兼容容器 Ada.Containers.Formal_Vectors
(另请参阅 here and here)。
关于编译器错误:Ada.Containers.Vector
的当前实现使用原子操作来提高性能(参见 here and here). These atomic operations operate (in this case) on variables of type System.Atomic_Counters.Atomic_Unsigned
(see here). This type is declared as Atomic
and therefore volatile (see RM 8(3))。