如何在SPARK Ada中实例化非库级别的包?
说我有类似的东西:
subtype Die is Integer range 1..6;
package Random_Die
is
new Ada.Numerics.Discrete_Random(Die);
这给了我错误:
instantiation error at a-nudira.ads.45
incorrect placement of "Spark_Mode"
Random_Die is not a libray level package
据推测,我需要关闭Ada.Numerics.Discrete_Random的SPARK_Mode,但我无法找到合适的地方来放置编译指示。
答案 0 :(得分:1)
泛型仅在实例化时由SPARK检查。 : - (
错误消息看起来像是试图将SPARK_Mode方面放在泛型中的某个位置。那样不行。您应该将SPARK_Mode => On
方面放在实例化通用包的单元上。
答案 1 :(得分:1)
关于Ada.Numerics.Discrete_Random
的消息并不多。 Spark-2014希望你将未命名的软件包Unnamed
设置为库级,就像Jacob Sparre Andersen在his answer中提到的那样。即:
with Ada.Numerics.Discrete_Random;
--procedure Outer is
package Unnamed
with Spark_Mode => On
is
subtype Die is Integer range 1..6;
package Random_Die
is
new Ada.Numerics.Discrete_Random(Die);
end Unnamed;
--begin
-- null;
--end Outer;
删除评论'连字符和翻译Outer
会产生错误信息。按原样翻译Unnamed
可以正常工作,gnatprove
没有投诉。换句话说,Unnamed
是一个库级包。在Outer
范围内,它不会使GNAT发出诊断消息。