问题标签 [ada2012]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
152 浏览

thread-safety - Ada 任务分配和安全

我不喜欢编码,但我真的很喜欢 Ada,而且我对它很陌生。那么你能向我澄清这些观点吗?

如果您的计算机具有单个非线程 CPU,则任务仍然是单 CPU。当然,这同样适用于 C 或 C++中的分叉。

问题:你认为在这种情况下,Ada 任务分配比分叉有什么好处吗?

我也想知道为什么 SPARK 禁止任务分配(我知道这是为了安全,但确切地说,禁止任务分配如何提高安全性。)

我的第三个也是最后一个问题,如果我想提供“安全任务”(在 Ada 中),我可以设想哪些任务限制才能使使用它们(任务)“安全”。

谢谢,

0 投票
2 回答
285 浏览

json - 在 Ada 中,我如何递归地映射和内存管理其自身的类型

我一直在为这个小问题苦苦挣扎一段时间。我正在尝试创建自己的内部 JSON 结构实现。挑战在于,对于 Ada,我必须使用访问类型来使其递归,如果我没有严格控制访问类型,访问类型就有泄漏的风险。为了控制它,我将我提供的所有真实活动保密,Get (Source:...)并且Set (Target:...; Value:...)Node 类型的函数/过程,它将尝试验证和处理任何现有的 Vector (json-array) 或 Map (json-object) 元素。为了进一步确保我使用 Ada 2012 的稳定功能并在内容超出范围时捕获它们,我尝试使用 Protected_Controlled 类型和“管理”Ada 库,但发现容器库无法处理受保护的类型,所以我简单地使用了受控。该Finalize (...)过程适用于任何 Vector 或 Map 类型,并递归地释放 Node_Value.Reference。

我的问题是我是否正确应用了 Ada 2012,或者如何创建可以是向量/映射或字符串/数字的类型的内存管理递归?

0 投票
1 回答
212 浏览

ada - 在 Ada 中描述一个字符串类型

我的类型类似于:

如何使用 Ada 或 SPARK 在代码中指定该格式?

我在想Static_Predicate,但字符串必须以 3 个正整数开头,后跟一个破折号,后跟另一组 3 个正整数的条件不能用Static_Predicate表达式来描述。

0 投票
1 回答
389 浏览

ada - 确定 Ada 断言失败的原因

如果断言失败,我会得到以下输出:

引发 SYSTEM.ASSERTIONS.ASSERT_FAILURE :Dynamic_Predicate 在 file.adb:36 失败

我能得到更多细节吗?例如输入是什么,或者可能是堆栈跟踪,或者任何其他可能帮助我确定断言失败的原因?

0 投票
1 回答
106 浏览

ada - 在数组中查找索引的表达式

如何找到字符串中作为空格字符的第一个字符并返回其索引,并使用一个可以用作其中一部分的表达式Contract_Cases

例如,如果字符串是:

那么表达式应该返回4

0 投票
3 回答
1269 浏览

ada - SPARK 整数溢出检查

我有以下程序:

如果我运行gnatprove,我会得到以下结果,指向+标志:

中:溢出检查可能会失败

这是否意味着F (I - 1)可能等于Integer'Last,并且添加任何内容都会溢出?如果是这样,那么从程序的流程中是否不清楚这是不可能的?还是我需要在合同中指定这一点?如果不是,那是什么意思?


一个反例表明,gnatprove在这种情况下,确实担心 的边缘Integer

medium:溢出检查可能会失败(例如 whenF = (1 => -1, others => -2147483648)I = 2

0 投票
1 回答
276 浏览

standards - 仅在 ISO 标准 Ada 中,Record Representation Clause + 任何其他语言功能如何可移植到 little-endian 和 big-endian 处理器?

不使用非标准‡ Scalar_Storage_Order 子句在最近的 GNAT 版本中,IPv4 标头如何通过记录表示子句与任何其他语言特性的任意组合来可移植地表示,以便“相同”的代码在 little-endian 和 big-endian 上都有效-endian 处理器,但以 IETF 所谓的网络字节顺序(这是 IETF 对 big-endian 的花哨名称)的方式在线路上(例如,通过以太网帧的有效负载)发出。在 C 中,“相同”代码可以利用预处理器宏在小端处理器上执行字节交换,但在大端处理器上是无操作的,但标准 Ada 没有预处理器。在 C++ 中,“相同”代码可以利用元模板编程 (MTP) 在小端处理器上执行字节交换,但在大端处理器上是无操作的,但标准 Ada 缺少 MTP。

(顺便说一句,当大端处理器与小端外设IC的内存映射寄存器接口时,设备驱动程序中会出现同样的问题,反之亦然:小端处理器与大端IC的内存映射寄存器接口.)

请注意“PowerOf2Highest minus”和“反转”大端位 id 从 (from,to) 顺序到 [视觉上,而不是算术上真正] (to,from) 顺序在字节交换的第 2 部分中用作粗略相当于 VHDL 的 downto,这是 VHDL 如何解决这种异构字节序问题的关键部分。(VHDL 是 Ada83 的表亲语言。)

但是现在,如何混淆集合 {Header_IPv4_Homogenous, Header_IPv4_Heterogenous} 中的哪个成员已被选为 app-domain-code 中的类型名称 Header_IPv4_Portable?使用子包?

‡ Scalar_Storage_Order已被提议作为下一版 ISO 标准 Ada 的潜在功能,但到目前为止,在 ISO 标准化委员会中还没有正式的赞助商支持该提案,因此标准化提案可能会失败并死去。另外,我将使用非 GNAT Ada 编译器,因此我无法使用 GNAT 特定的功能。

0 投票
1 回答
130 浏览

oop - 解决方法“配置不支持动态接口转换”

我有一个面向对象的设计如下(Ada 2012)。问题不在于设计本身,而在于它对特定运行时配置文件的影响。

我有一个工厂来实例化 Interface_A、Interface_B 或 Interface_C 的对象。

使用我的开关,两个工厂创建功能都出现以下错误:

环境:

  • GNAT 17.2
  • ZFP MPC8641
  • GPRBUILD Pro 18+

到目前为止我尝试了什么:

  1. 使用显式强制转换或显式临时变量分配更改工厂实现:

样本:

同样的问题。

  1. 添加显式构造方法(将“新”影响到类访问变量中)

样本:

第二个选项工作正常。

  1. 使用标准配置文件不会出现问题。我在(天真地)移植到特定配置文件时遇到了这个问题。据我所知,这是合法的面向对象设计,但有些结构的处理方式不同。

我的问题:

  1. 我的第二个选项可以接受吗?为什么它有效?

  2. 我错过了什么吗?我知道这与编译器生成的代码的调度表管理有些相关,但我并没有真正了解深层机制/原因。

0 投票
1 回答
81 浏览

ada - 将导入的 C 指针包装在相同大小的 Ada 标记类型中

我想将 C 结构内存布局复制到 Ada 类型中,同时将 C 字段(它们是指针)包装到与指针位于相同内存位置的标记类型中,以避免额外的内存使用,而以舒适的 Ada 方式在指针信息上使用点符号。这要求标记的 Ada 字段与 C 指针具有相同的大小。

一个没有标记类型的例子如下:

现在,目标是使 Wrap_I 标记。一旦我将其标记为这样,GNAT 就会警告 R 和 W 大小不同(显然,它会在运行时引发标记检查失败)。除了静态调用,我不需要调度或其他任何东西,所以本质上我想知道是否有一种方法可以在不将其标记存储在内存中的情况下使用标记类型(仅静态使用)。

我有一个更传统的 B 计划,因此如果这不可行,则无需提出替代方案。

谢谢!

0 投票
1 回答
432 浏览

ada - 如何在 Ada 中为向量实现 Generic_Sorting?

我正在尝试对许多个月前的旧 C++ 代码进行一些基本的翻译来学习 Ada,但对于如何使用内置的 Generic_Sorting 对向量进行排序,我感到非常困惑。我还没有找到任何具体的实际例子,最接近的是一篇现已失效的丹麦维基文章,看起来它应该有一个完整的例子,但档案没有抢到它:https:// web.archive.org/web/20100222010428/http://wiki.ada-dk.org/index.php/Ada.Containers.Vectors#Vectors.Generic_Sorting

这是我认为应该从上面的链接工作的代码:

我已经尝试了很多不同的组合,usewith我能得到的只是各种错误代码。上面的代码给出了Generic_Sorting is not visible,但是当我尝试明确声明时,with Ada.Containers.Vectors.Generic_Sorting我得到了错误"Ada.Containers.Vectors.Generic_Sorting" is not a predefined library unit。我不知道我在这里做错了什么,我敢肯定这是对 Ada 引入软件包的方式的根本误解,我希望将这一点确定下来有助于我更好地理解它。