型別安全

在電腦科學中 ， 一部分程式語言具備型別安全 （ - { zh: 中國大陸; zh - tw: 中國大陸; zh - cn: 中國臺灣; } - 用語習慣稱型別爲 - { zh: 類型; zh - tw: 類型; zh - cn: 型別; } - ； - { zh: 稱資料爲數據; zh - tw: 稱資料爲數據; zh - cn: 依據上下文 、 意思 、 特定用語的不同 ， 常稱數據爲資料; } - ） 的性質 。 這個術語在不同的社群中有不同的定義 ， 特別是正規的型別理論上的定義遠遠強過大多數的程式員的理解 ， 但對於使用型別系統的認知 ， 皆旨在避免必然的錯誤形式 ， 和不良的程式行爲 （ 稱爲型別錯誤 ） 。 類型錯誤 （ type error ） 是錯誤或不期望的程序行爲 ， 由不同數據類型的差別所引起 ， 適用於程序的常量 、 變量 、 方法 （ 函數 ） ， 如把整型 （ int ） 當作了浮點型 （ float ） 。 型別安全可以靜態方式實施 ， 及早在編譯時期就捕捉到潛藏的錯誤 ； 或者以動態方式 ， 在執行時期關聯型別的資訊 ， 並在必要時檢測即將發生的錯誤 。 型別安全是程式語言的性質 ， 而不是程式所自有的 。 例如 ， 有可能以型別不安全的語言 ， 編寫出型別安全的程式 。 在此是以程式語言爲主 ， 而不討論以個人能力維護的型別安全 。 某個行爲之所以會被程式語言歸類爲型別錯誤 ， 通常是因爲試圖對不適當型別的值進行運算 。 其分類的基本原則是 ： 部分語言設計者和程式員的看法認爲 ， 如果所有運算不引起程式瓦解 、 安全上的瑕疵 、 或其它明顯故障 ， 即爲合理的 ， 而不視之爲一個錯誤 ； 其他人則認爲所有違背程式員意圖的 ， 就是錯誤的 ， 而且應該標上 「 不安全 」 。 在靜態型別系統中 ， 型別安全通常包含一個保證 ， 所有運算式最終的值都是合理的靜態型別成員 （ 比子型別和多態性所要求的還要更加精確細微 ） 。 型別安全近似於所謂的記憶體安全 （ 就是限制從記憶體的某處 ， 將任意的位元組合複製到另一處的能力 ） 。 例如 ， 某個語言的實作具有若干型別 ， 假如存在若干適當長度的位元 ， 且其不爲 的正統成員 。 若該語言允許把那些資料複製到 型別的變數 ， 那個語言就不是型別安全的 ， 因爲這些運算可將非 型別的值 - { zh: 指派; zh - tw: 指派; zh - cn: 賦; } - 給該變數 。 反過來說 ， 若該語言型別不安全的程度 ， 最高只到允許將任意整數用作爲指標 ， 顯然它就不是記憶體安全的 。 大部分的靜態型別語言 ， 都提供了一定程度的型別安全 ， 而且其嚴格性更勝於記憶體的安全性 。 因其型別系統強迫程式員以適當的抽象資料型別定義來使用 ， 即使對記憶體安全或任何可能的災難而言 ， 並不需如此嚴格的要求 。