本页使用了标题或全文手工转换

強型別

维基百科,自由的百科全书
跳转至: 导航搜索

電腦科學以及程式設計中,術語強型別用以描述程式語言對於混入不同資料型別的值,這方面的運算限制中所處的地位。它的反義詞是弱型別。然而,這些術語在短短的電腦歷史中,早已含括了更多的意義,而且時常很難知道寫的人究竟要表達哪個意思。

解釋[编辑]

程式語言專家 Benjamin C. Pierce,《Types and Programming Languages》和《Advanced Topics in Types and Programming Languages》的作者,曾說:

「我花了幾個星期…試著弄清楚「強型別」、「靜態型別」、「安全」等術語,但我發現這異常的困難…這些術語的用法不盡相同,所以也就近乎無用。」[1]

大致而言,「強型別」隱含著程式語言對容許混合情況出現加上了嚴格的限制,以避免程式碼以無效的資料使用方式編譯或執行。例如,整數除法運算不可用於字串;鏈表上的運算步驟不可用於數字。然而,這些限制的本質和效力是極易改變的。

強型別在文獻中的含義[编辑]

已经被写作者认定为“强型別”的一些要素包括:

  • 靜態型別不同於動態型別。在靜態型別系統中,型別是與變數相連繫的名稱(通常是在声明時),而不是值(通常是在初始化時)。型別也可藉由編譯器來推斷。
  • 通过语言定义,对型別约束违规的编译时间检查的托管要求。就是说,编译器确保操作只发生在对这个运算有效的操作数上。
  • 型別安全;就是说,拒绝(在要么编译时间要么執行时间)尝试忽视資料型別的操作或函式呼叫。在更严格的设置下,通过证明进行性和藏存性来证明关于形式语言的型別安全
  • 禁止型別轉換。某個型別的值,不論是不是以顯式或隱式的方式,都不可轉換為另一個型別。
  • 但是某些作者,把“强型別语言”称呼保留给省略隐式型別转换(就是说编译器为了利益编程者而插入的转换)的语言。对于这些作者,编程语言是强型別的,如果型別必须通过通常叫做“强制”的显式符号来转换。
  • 無法規避型別系統。某些語言允許程式員取得值的表示法之下的東西(即位元模式),這有可能規避型別系統。
  • 有复合型別的复杂而细致的型別系统。
  • 資料物件中固定且不變的型別。给定資料物件的型別在这个物件的生命期内不改变。例如,类实例不可以改变它们的类。
  • 在執行程式之前,強型別就保證了執行時期的程式行為,其以靜態分析或其它的機制提供。

程式語言中的含義變異[编辑]

參閱[编辑]

参考文献[编辑]