【发布时间】:2021-07-31 20:26:47
【问题描述】:
由于Random(Generator, First, Last) 在运行时中实现,GNAT 允许以下代码,但它不是 Ada 2012 的一部分。我是否可以导致它产生编译错误,因为它不应该可用?
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Numerics.Discrete_Random;
procedure Main is
package Positive_Random is new Ada.Numerics.Discrete_Random
(Result_Subtype => Positive);
Generator : Positive_Random.Generator;
-- This should fail, since function isn't part of Ada 2012.
Value : Positive := Positive_Random.Random (Generator, 1, 10);
begin
Put_Line (Value'Image);
end Main;
这是我的 gpr 文件:
project Default is
for Source_Dirs use ("src");
for Object_Dir use "obj";
for Main use ("main.adb");
package Compiler is
for Switches ("ada") use ("-gnat12");
end Compiler;
end Default;
【问题讨论】:
-
当我尝试编译示例时,它很好地无法使用 Random 具有太多值的信息进行编译。这意味着:按预期工作。 :) 你确定你没有在某处添加
-gnatX开关吗?像环境变量等。 -
这是我在 Alire-Index 的构建检查中的某些系统上遇到的错误,但我没有看到 locall.y
-
我的编译器在运行时甚至没有
Random的那个版本(Ubuntu 20.04 中的包 gnat-9,所以我猜是 FSF GNAT)。我知道,看看 Ada.Numerics.Discrete_Random (a-nudira.ads) 的规范。 Ada 2005 或 2012 提供的扩展分别用pragma Ada_05和pragma Ada_2012标记,编译器根据请求的版本使用这些指示来引发或不引发错误。我猜你的是 GNAT 社区版,它似乎不支持不同的语言版本(见adacore.com/gnatpro/comparison)