解釋
程式語言專家Benjamin C. Pierce,《Types and Programming Languages》和《Advanced Topics in Types and Programming Languages》的作者,曾說:“我花了幾個星期…試著弄清楚“強類型”、“靜態類型”、“安全”等術語,但我發現這異常的困難…這些術語的用法不盡相同,所以也就近乎無用。”
大致而言,“強類型”隱含著程式語言對容許混合情況出現加上了嚴格的限制,以避免代碼以無效的數據使用方式編譯或運行。例如,整數除法運算不可用於字元串;鍊表上的運算步驟不可用於數字。然而,這些限制的本質和效力是極易改變的。
強類型在文獻中的含義
已經被寫作者認定為“強類型”的一些要素 包括:
•靜態類型不同於動態類型。在靜態類型系統中,類型是與變數相連繫的名稱(通常是在聲明時),而不是值(通常是在初始化時)。類型也可藉由編譯器來推斷。
•通過語言定義,對類型約束違規的編譯時間檢查的託管要求。就是說,編譯器確保操作只發生在對這個運算有效的運算元上。
•類型安全;就是說,拒絕(在要么編譯時間要么運行時間)嘗試忽視數據類型的操作或函式調用。在更嚴格的設定下,通過證明進行性和藏存性來證明關於形式語言的類型安全。
•禁止類型轉換。某個類型的值,不論是不是以顯式或隱式的方式,都不可轉換為另一個類型。
•但是某些作者,把“強類型語言”稱呼保留給省略隱式類型轉換(就是說編譯器為了利益編程者而插入的轉換)的語言。對於這些作者,程式語言是強類型的,如果類型必須通過通常叫做“強制”的顯式符號來轉換。
•無法規避類型系統。某些語言允許程式設計師獲取值的表示法之下的東西(即比特模式),這有可能規避類型系統。
•有複合類型的複雜而細緻的類型系統。
•數據對象中固定且不變的類型。給定數據對象的類型在這個對象的生命期內不改變。例如,類實例不可以改變它們的類。
•在運行程式之前,強類型就保證了運行時期的程式行為,其以靜態分析或其它的機制提供。