什麼是動態型別檢查?
型別檢查是指驗證運算子的運算元是否具有相容型別的活動。相容型別是指對運算子來說合法的型別,或者根據語言規則可以由編譯器生成的程式碼隱式修改為合法型別的型別。這種自動轉換稱為強制轉換。如果語言中所有變數與型別的繫結都是動態的,那麼型別檢查實際上可以持續動態地完成。動態型別檢查在程式執行期間進行。
動態型別檢查通常透過在每個資料物件中儲存一個型別標籤來執行,該型別標籤表示物件的型別。例如,一個整數資料物件可以同時包含整數值和整數型別標籤。
然後執行每個操作,首先是一個型別檢查序列,其中檢查每個引數的型別標籤。只有當引數型別正確時才執行操作,否則會指示錯誤。該操作還應將相應的型別標籤連線到其結果,以便後續操作可以檢查它們,即透過在程式中插入更多程式碼來識別潛在錯誤來完成動態檢查。
動態型別檢查的優點
動態型別檢查具有以下優點:
程式設計沒有靈活性。(此處翻譯與原文存在矛盾,原文表達的意思與實際優點相反,建議重新檢查原文)
不需要宣告。
與變數名關聯的資料物件的型別可以在程式執行期間根據需要更改。
動態型別檢查可以發現靜態型別檢查無法識別的許多錯誤。
在大多數語言中,某些情況下某些語言結構無法進行靜態型別檢查,但動態型別檢查可以實現相同的目的。
動態型別檢查的缺點
動態型別檢查具有以下缺點:
動態型別檢查佔用更多空間,因為動態型別檢查涉及在程式中插入額外的程式碼來檢測潛在錯誤。
程式難以除錯,因為在程式測試期間不會探索所有可能的執行路徑。
動態型別檢查需要更多時間,從而降低了操作執行速度。
它不如靜態型別檢查高效。
它更昂貴。
錯誤可能會潛伏在程式中,直到執行過程中遇到它們。
大型程式往往包含很少執行的部分,因此程式可能在使用很長時間後,動態型別檢查才會檢測到型別錯誤。
很少檢查依賴於執行時計算值的屬性。例如,命令式語言很少檢查陣列索引是否在範圍內。
基本的硬體不實現動態型別檢查。
它可以管理標籤並增加複雜性。