Ada 编程/Ada 2005
这是对Ada 2005主要功能的概述,Ada 2005 是 Ada 标准的版本,于 2007 年 1 月由 ISO 接受(为了与之前的版本 Ada 83 和 Ada 95 区分,Ada 2005 的非正式名称通常被大家接受)。有关其基本原理和更详细(且非常技术性)的描述,请参阅 修正案,该修正案是对 Ada 参考手册的修正,链接到每个 Ada 问题文档(AI)的最新版本。
尽管该标准现已发布,但并非所有编译器都能够处理它。以下 免费软件 编译器已经实现了其中许多新增功能:
- GNAT GPL 版
- GCC 4.1
- GNAT Pro 6.0.2(AdaCore 支持的版本)是完整的实现。
下载并安装它们中的任何一个后,请记住在编译 Ada 2005 代码时使用 -gnat05
开关。请注意,在 GNAT GPL 2007 版中,Ada 2005 是默认模式。
Ada 2005 不仅支持新的 32 位字符类型——称为Wide_Wide_Character——而且源代码本身也可以使用此扩展字符集。因此,例如,俄罗斯人和印度人将能够在标识符和注释中使用他们的母语。数学家也会欣喜若狂:整个希腊语和弗拉克图尔字符集都可以在标识符中使用。例如,Ada.Numerics 将扩展为包含一个新的常量
π : constant
:= Pi;
这不是一个新想法——GNAT 始终拥有-gnatic编译器选项来指定字符集 [1]。但是现在这个想法已经成为标准,所以所有 Ada 编译器都需要支持 Unicode 4.0 用于标识符——正如新标准要求的那样。
另请参阅
接口允许以类似于 Java 和 C# 的有限形式实现多重继承。
您可以在此处找到完整的描述:Ada 编程/面向对象。
另请参阅
除了 Ada 的安全变体记录之外,现在还提供了未检查的 C 样式联合。
您可以在此处找到完整的描述:Ada 编程/类型/记录#联合。
另请参阅
With 语句得到了巨大改进。首先,有新的 有限 with,它允许两个包相互 with。然后有 私有 with,它使包仅在规范的私有部分中可见。
另请参阅
访问类型定义可以指定访问类型永远不能为 null。
请参阅 Ada 编程/类型/访问#空排除。
另请参阅:AI95-00231-01 访问常量参数和空排除访问子类型
匿名访问类型的可能用法已扩展。它们几乎可以在每个类型或对象定义中使用,包括访问子程序参数。匿名访问类型也可以指向常量对象。此外,可以将它们声明为非空。
通过在包 标准 中添加以下操作,可以测试匿名访问类型的相等性。
function
"=" (Left, Right : universal_access)return
Boolean;function
"/="(Left, Right : universal_access)return
Boolean;
请参阅 Ada 编程/类型/访问#匿名访问。
另请参阅
语言库中的一项重大新增功能是用于容器的泛型包。如果您熟悉 C++ STL,那么在使用 Ada.Containers 时,您可能会感觉非常熟悉。不过,有一点要注意:Ada 是一种块结构语言。许多关于如何使用 STL 的想法都利用了语言的这一特性。例如,可以向迭代方案提供局部子程序。
原始的 Ada 问题文本 AI95-00302-03 容器库 现已转换为 A.18 容器 (带注释的)。
如果您了解如何编写 Ada 程序,并且需要使用向量、列表、集合或映射(表),请查看上面提到的 AI95-00302-03 AI 文档。 文档中有一个 !示例 部分详细解释了容器的使用。 Matthew Heaney 在他针对 AI-302 的参考实现中提供了一些演示程序(Ada.Containers),您可以在 tigris 上找到它们。
在 Ada 编程/容器 中,您会找到一个使用容器的演示。
历史旁注:C++ STL 借鉴了 David R. Musser 和 Alexander A. Stepanov 的工作。 他们曾在一些泛型编程研究中使用 Ada 83。 Stepanov 文件集 提供了一些出版物。
另请参阅
除了包 Ada.Numerics 的新常量(请参阅上面的 字符集),最重要的新增内容是用于操作向量和矩阵的包。
另请参阅
(关于 Ada 编程工具的相关说明:AI-388 包含一个有趣的评估,说明了编译器编写者如何被迫持续保持对编程支持工具中国际字符的处理不足。 作为 Ada 程序的作者,请注意您的工具提供商或 Ada 顾问可能会建议程序文本仅使用 7 位 ASCII。)
另请参阅
- AI95-00297-01 定时事件
- AI95-00307-01 执行时间时钟
- AI95-00354-01 组执行时间预算
- AI95-00266-02 任务终止过程
- AI95-00386-01 返回 Time_Span 值的更多函数
另请参阅
- AI95-00249-01 用于高完整性系统的 Ravenscar 配置
- AI95-00305-01 用于实时系统的新的编译指示和附加限制标识符
- AI95-00347-01 附录 H 的标题
- AI95-00265-01 用于高完整性系统的分区细化策略
另请参阅
新增 3 个关键字(共计 72 个)
新增 11 个编译指示
pragma
Assertpragma
Assertion_Policypragma
Detect_Blockingpragma
No_Returnpragma
Partition_Elaboration_Policypragma
Preelaborable_Initializationpragma
Priority_Specific_Dispatchingpragma
Profilepragma
Relative_Deadlinepragma
Unchecked_Unionpragma
Unsuppress
新增 7 个属性
- 容器库
- Ada.Containers
- Ada.Containers.Vectors
- Ada.Containers.Doubly_Linked_Lists
- Ada.Containers.Generic_Array_Sort (通用过程)
- Ada.Containers.Generic_Constrained_Array_Sort (通用过程)
- Ada.Containers.Hashed_Maps
- Ada.Containers.Ordered_Maps
- Ada.Containers.Hashed_Sets
- Ada.Containers.Ordered_Sets
- Ada.Containers.Indefinite_Vectors
- Ada.Containers.Indefinite_Doubly_Linked_Lists
- Ada.Containers.Indefinite_Hashed_Maps
- Ada.Containers.Indefinite_Ordered_Maps
- Ada.Containers.Indefinite_Hashed_Sets
- Ada.Containers.Indefinite_Ordered_Sets
- 向量和矩阵操作
- 字符串哈希
- Ada.Strings.Hash (通用函数)
- Ada.Strings.Fixed.Hash (通用函数)
- Ada.Strings.Bounded.Hash (通用函数)
- Ada.Strings.Unbounded.Hash (通用函数)
- Ada.Strings.Wide_Hash (通用函数)
- Ada.Strings.Wide_Fixed.Wide_Hash (通用函数)
- Ada.Strings.Wide_Bounded.Wide_Hash (通用函数)
- Ada.Strings.Wide_Unbounded.Wide_Hash (通用函数)
- Ada.Strings.Wide_Wide_Hash (通用函数)
- Ada.Strings.Wide_Wide_Fixed.Wide_Wide_Hash (通用函数)
- Ada.Strings.Wide_Wide_Bounded.Wide_Wide_Hash (通用函数)
- Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Hash (通用函数)
- 标记类型
- 文本包
- Wide_Wide_Character包
- Ada.Strings.Wide_Wide_Bounded
- Ada.Strings.Wide_Wide_Fixed
- Ada.Strings.Wide_Wide_Maps
- Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants
- Ada.Strings.Wide_Wide_Unbounded
- Ada.Wide_Wide_Text_IO
- Ada.Wide_Wide_Text_IO.Complex_IO
- Ada.Wide_Wide_Text_IO.Editing
- Ada.Wide_Wide_Text_IO.Text_Streams
- Ada.Wide_Wide_Text_IO.Wide_Wide_Bounded_IO
- Ada.Wide_Wide_Text_IO.Wide_Wide_Unbounded_IO
- 任务终止过程
另请参阅
[edit | edit source]维基教科书
[edit | edit source]- Ada 编程/Ada 83
- Ada 编程/Ada 95
- Ada 编程/Ada 2012
- Ada 编程/面向对象
- Ada 编程/类型/访问
- Ada 编程/关键字
- Ada 编程/关键字/and
- Ada 编程/关键字/interface
- Ada 编程/属性
- Ada 编程/编译指示
- Ada 编程/编译指示/限制
- Ada 编程/库/Ada.Containers
- Ada 编程/库/Ada.Directories
Ada 2005 类别页面
[edit | edit source]外部链接
[edit | edit source]论文和演示文稿
[edit | edit source]- Ada 2005:整合在一起 (SIGAda 2004 演示)
- GNAT 和 Ada 2005 (SIGAda 2004 论文)
- 邀请您使用 Ada 2005,以及在 Ada-Europe 2004 上的演示文稿
基本原理
[edit | edit source]- Ada 2005 基本原理 由 John Barnes 撰写
- 介绍
- 面向对象模型
- 访问类型
- 结构和可见性
- 任务和实时
- 异常、泛型等
- 预定义库
- 容器
- 结语
- 参考文献
- 索引
可作为单个 打印文档 获取。
语言要求
[edit | edit source]- SC22/WG9 向 Ada 报告小组的有关准备 ISO/IEC 8652 修正案的说明 (2002 年 10 月 10 日),以及在 SIGAda 2002 上的演示文稿
Ada 参考手册
[edit | edit source]- Ada 参考手册,ISO/IEC 8652:1995(E) 附加 COR.1:2001 和 AMD.1:2007
- Ada 参考手册带注释,ISO/IEC 8652:1995(E) 附加 COR.1:2001 和 AMD.1:2007 (彩色差异)
- Ada 修正案草案列表
Ada 问题
[edit | edit source]- 修正案 200Y
- AI95-00387-01 修正案介绍
- AI95-00284-02 新的保留字
- AI95-00252-01 Object.Operation 表示法
- AI95-00218-03 覆盖时意外的重载
- AI95-00348-01 空过程
- AI95-00287-01 允许有限聚合
- AI95-00326-01 不完整类型
- AI95-00317-01 正式包的部分参数列表
- AI95-00376-01 Interfaces.C 也适用于 C++
- AI95-00368-01 过时的功能限制
- AI95-00381-01 新的限制标识符 No_Dependence
- AI95-00224-01 编译指示 Unsuppress
- AI95-00161-01 默认初始化对象
- AI95-00361-01 带消息的引发
- AI95-00286-01 编译指示 Assert
- AI95-00328-01 Complex_IO 的预实例化
- AI95-00301-01 对语言定义的字符串类型的操作
- AI95-00340-01 Mod 属性
- AI95-00364-01 定点乘法/除法
- AI95-00267-01 快速浮点数到整数转换
- AI95-00321-01 调度策略的定义
- AI95-00329-01 编译指示 No_Return - 从不返回的过程
- AI95-00362-01 一些预定义包应重新分类
- AI95-00351-01 时间操作
- AI95-00427-01 默认参数和 Calendar 操作
- AI95-00270-01 流项大小控制