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)returnBoolean;function"/="(Left, Right : universal_access)returnBoolean;
請參閱 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 個編譯指示
pragmaAssertpragmaAssertion_PolicypragmaDetect_BlockingpragmaNo_ReturnpragmaPartition_Elaboration_PolicypragmaPreelaborable_InitializationpragmaPriority_Specific_DispatchingpragmaProfilepragmaRelative_DeadlinepragmaUnchecked_UnionpragmaUnsuppress
新增 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 流項大小控制
