類型安全
定義
Robin Milner 對于類型安全所喊出的口號:
這一口號的涵義,取決于語言形式化語義的類別。在指稱語義學(xué)里,類型安全意謂者一個表達式的值具有良好類型τ,則表達式是一個屬于τ的集合的真正的成員。
1994年,Andrew Wright 和 Matthias Felleisen 以操作語義學(xué)定義的公式描述:何謂現(xiàn)今的標(biāo)準(zhǔn)定義,以及對于類型安全的檢驗技術(shù)。根據(jù)上述方法,類型安全是以編程語言語義中的兩個性質(zhì)所決定的:
這些性質(zhì)不是無中生有的,而是和編程語言所描述出來的語義相連系,而且各式各樣的語言存在著可以此基準(zhǔn)來充實的廣大的空間。因為“類型良好”程序的概念已是靜態(tài)語義學(xué)的一部分,而“卡住”(或者“搞錯”)則是動態(tài)語義學(xué)方面的屬性。
語言的類型安全性
學(xué)術(shù)研究用途的玩具語言,常會提出類型安全方面的需求。另一方面,許多語言以人工方式所產(chǎn)生的類型安全,證實經(jīng)常需要上千次的檢查。不過,某些語言,如標(biāo)準(zhǔn)ML,其嚴格定義了語義,且Java也已提供類型安全。其它語言如Haskell也被認為是類型安全。暫且不理會語言定義的性質(zhì),在運行時期發(fā)生的某些錯誤,應(yīng)歸于實現(xiàn)時的缺陷,或是用了其它語言撰寫的程序庫;這種錯誤可能使給定的實現(xiàn),在某些情況下的類型不再安全。
類型安全語言的存儲器管理
要實現(xiàn)完善的類型安全語言,它至少需要垃圾回收或增加存儲器配置和解配置的限制(本節(jié)主要針對前者)。更明確地說,不允許懸置指針橫跨不同結(jié)構(gòu)類型的存在。這有一技術(shù)上的原因:假定類型語言(如Pascal要求分配的存儲器必須顯式釋放)。如果存在一個仍舊指向之前的存儲器地址的懸置指針,新的數(shù)據(jù)結(jié)構(gòu)可能會分配到同一空間。例如,如果初始化一個指向整數(shù)區(qū)域數(shù)據(jù)結(jié)構(gòu)的指針,但新對象的指針區(qū)域卻分配在整數(shù)的地方,然后指針區(qū)域可借由改變整數(shù)區(qū)域的值簡單改變成任可東西(經(jīng)由間接引用懸置指針)。因為當(dāng)指針改變時,尚未指定將會發(fā)生什么,所以這個語言就不是類型安全的。大部分類型安全的語言滿足使用垃圾回收實現(xiàn)存儲器的管理。
在允許指針?biāo)阈g(shù)的語言中,實現(xiàn)垃圾回收器是最好的,所以在類型不安全的語言或類型安全可能失效的語言中,如此實現(xiàn)回收器的程序庫是最好的。C 和 C++ 經(jīng)常使用。
類型安全與強類型
在各種強類型的定義中,其往往成為類型安全的同義詞;然而,類型安全與動態(tài)類型并不互相排斥。也可將動態(tài)類型視為非常寬松的靜態(tài)類型語言,而且所有語法正確的程序皆具備良好類型;只要它的動態(tài)語義學(xué)能夠保證絕不會有程序“搞錯”,它就可以滿足上述定義,且可稱為類型安全。
參閱
數(shù)據(jù)類型
類型理論
免責(zé)聲明:以上內(nèi)容版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請告知,我們將盡快刪除相關(guān)內(nèi)容。感謝每一位辛勤著寫的作者,感謝每一位的分享。
- 有價值
- 一般般
- 沒價值
{{item.userName}} 舉報
{{item.time}} {{item.replyListShow ? '收起' : '展開'}}評論 {{curReplyId == item.id ? '取消回復(fù)' : '回復(fù)'}}
{{_reply.userName}} 舉報
{{_reply.time}}