我正在编写一个需要分发的Ada应用程序,我尝试使用DSA来完成这个任务,但是我发现在"允许"和"不允许"使用的方面存在很大的限制。
由于代码相当复杂,而且这只是一个通用问题,所以我不会发布源代码,我只想得到一些关于我的错误理解的指示,请耐心指正。
我的问题是:我想用
因此,我尝试将我需要的包标记为
有没有什么方法可以解决这个问题?或者如果我想分发我的应用程序,我必须严格限制自己只使用最基本的类型,如整数和布尔值等?我不明白我是否受到了语言的限制,还是我只是做错了(不幸的是,我找到的DSA教程都非常模糊,如果有人有好的教程,请随意链接!)
编辑: 在ajb的回答之后,让我具体说明一下我的烦恼: 在我想用
由于代码相当复杂,而且这只是一个通用问题,所以我不会发布源代码,我只想得到一些关于我的错误理解的指示,请耐心指正。
我的问题是:我想用
pragma Remote_Call_Interface
标记一个过程,以便可以远程调用它。然而,一旦我添加了该pragma,由于该过程包含了项目中未被归类为Pure
或Remote_Types
的其他包,编译就会出错。因此,我尝试将我需要的包标记为
Pure
或Remote_Types
(根据它们是否具有状态),但这反过来又进一步破坏了编译,因为事实证明,你甚至不能在Pure/Remote_Types包中使用基本的系统类型,例如:你不能使用Vector
, 你不能使用Unbounded_String
, 你不能使用Map
等等......整个程序崩溃了,因为我不能再使用构建它的数据结构了!有没有什么方法可以解决这个问题?或者如果我想分发我的应用程序,我必须严格限制自己只使用最基本的类型,如整数和布尔值等?我不明白我是否受到了语言的限制,还是我只是做错了(不幸的是,我找到的DSA教程都非常模糊,如果有人有好的教程,请随意链接!)
编辑: 在ajb的回答之后,让我具体说明一下我的烦恼: 在我想用
pragma Remote_Call_Interface
标记的包中,我试图"with"一些非pure/remote_types的包,但它仅在本地使用那些包中的类型,它没有包含任何接受这些类型作为参数或返回这些类型的函数。这就是我的困扰所在: 由于这些类型不需要在网络上传输,为什么我不能使用它们呢?我只在本地使用它们......我不理解这一点,这就是我试图使这些类型成为Pure/Remote_Types的原因,但现在我已经阅读了ajb的解释(即:Remote_Types用于使这些类型的对象可以在网络上传输),我更加困惑为什么如果我只在本地使用它们,为什么我不能使用它们。