跳轉到內容

Ada 程式設計/庫/標準

來自華夏公益教科書

Ada. Time-tested, safe and secure.
Ada。經久耐用、安全可靠。

標準包是隱式的。這意味著兩件事

  1. 你不需要withuse 該包,事實上你不能 (見下文)。它總是可用的 (除非被同名詞隱藏,RM 8.3 (8) (帶註釋的)).
  2. 標準可能包含並非完全合法的 Ada 結構 (例如 CharacterWide_Character 的定義).

一個with 子句提及標準引用一個使用者定義的包標準隱藏了預定義的包。所以不要這樣做。但是任何被同名詞隱藏的庫單元可以透過使用限定名再次使其可見標準,例如Standard.My_Unit.

由於該包標準對於可移植性非常重要,這裡有一些針對各種編譯器的示例

可移植性

[編輯 | 編輯原始碼]

標準中唯一強制的型別是 Boolean、Integer 及其子型別、Float、Character、Wide_Character、Wide_Wide_Character、String、Wide_String、Wide_Wide_String、Duration。在 RM A.1 [帶註釋的](51) 中有一個實現許可,可能存在更多整數和浮點型別,以及關於所選名稱的實現建議 RM A.1 [帶註釋的](52)。甚至沒有要求這些附加型別必須具有不同的大小。因此,例如,實現提供兩個型別 Long_Integer 和 Long_Long_Integer 是合法的,它們都具有相同的範圍和大小。

請注意,數值型別的範圍和大小在每個平臺上可能不同。有一個實現要求,即型別 Integer 的大小至少為 16 位,Long_Integer 的大小至少為 32 位(如果存在)RM 3.5.4 [帶註釋的](21..22)。還有一個實現許可 RM 3.5.4 [帶註釋的](25),指示較小範圍的型別的其他型別,例如 Short_Integer(如果存在),實際上沒有大於指示更大範圍的範圍。但是,有一個實現建議 RM 3.5.4 [帶註釋的](28),標準中不應該存在除 Integer 和 Long_Integer 之外的其他整數型別;相反,這些適應硬體的型別應該在包 Interfaces RM B.2 [帶註釋的] 中定義。因此,如果您希望您的型別具有完全的可移植性,請不要使用標準中的型別 (除非您必須使用,見下文),而是定義您自己的型別。編譯器將拒絕它無法滿足範圍的任何型別宣告。

這意味著,例如,如果您需要一個 64 位型別,並且發現您當前的實現 Standard.Long_Long_Integer 是這樣一個型別,那麼當將您的程式移植到另一個實現時,該型別可能更短,但編譯器不會告訴您 - 並且您的程式很可能會崩潰。但是,當您定義自己的型別,例如

type My_Integer_64 is range -(2**63) .. +(2**63 - 1);

那麼,當移植到無法滿足此範圍的實現時,編譯器將拒絕您的程式。

當您使用 [[寬] 寬] 字串或指數 x**i 時,型別 Integer 是強制性的。這就是為什麼一些專案甚至定義了自己的字串,但這意味著將孩子和洗澡水一起倒掉。通常,將 Integer 與字串和指數一起使用不會導致可移植性問題。

華夏公益教科書

[編輯 | 編輯原始碼]

Ada 參考手冊

[編輯 | 編輯原始碼]

Ada 質量和風格指南

[編輯 | 編輯原始碼]
華夏公益教科書