You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ada重命名包的子包操作合规性及LRM依据问询

问题解答

问题1:能否通过X.B访问原A.B子包,with X.B;写法是否合法

该写法完全合法,对应Ada标准依据如下:

  • Ada 2012 LRM §8.5.2(包重命名)明确规定:包重命名声明所引入的名称是被重命名包的同义词,二者语义完全等价,所有对原包有效的操作、成员引用规则对重命名后的名称完全适用。
  • LRM §4.1.3(选定名称的解析规则)指出,子包属于父包的可访问成员,只要父包的名称(包括重命名得到的别名)在作用域内,就可以通过<父包名>.<子包名>的形式引用子包。
  • LRM §10.1.2(with子句规则)允许在with子句中使用库单元的同义词,因此with X.B;完全符合标准要求,等价于with A.B;。

问题2:能否为已重命名的包新增子包(如定义X.C)

该操作属于标准规定的通用合法行为,对应Ada标准依据如下:

  • LRM §10.1.1(库单元的定义)规定,定义子包时仅要求父包名指向一个已存在的包实体,重命名得到的包别名完全满足该要求。
  • 定义package X.C is ...本质上等价于定义package A.C,因为X是A的同义词,新增的子包最终会作为A的子包存在,完全符合Ada的包层次结构规则。

你在GNAT编译器中测试得到的可生效结果是符合标准的,不属于编译器专属扩展特性。

内容的提问来源于stack exchange,提问作者Vovanium

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 15:03:00