官术网_书友最值得收藏!

  • 編程與類型系統
  • (美)弗拉德·里斯庫迪亞
  • 788字
  • 2021-01-29 11:51:23

1.2.1 正確性

正確的代碼指的是行為符合規范,能夠產生期望的結果,并且不會導致運行時錯誤或崩潰的代碼。類型幫助我們更加嚴格地限制代碼,以確保代碼具有正確的行為。

例如,假設我們想要找出字符串"Script"在另外一個字符串中的索引。如果沒有提供足夠的類型信息,我們可能允許傳入任意類型的值作為函數實參。如果實參不是一個字符串,就會發生運行時錯誤,如程序清單1.2所示。

程序清單1.2 類型信息不足

這個程序不正確,因為42不是scriptAt函數的有效實參。但是,由于我們沒有提供足夠的類型信息,因此編譯器不會拒絕該行代碼。在程序清單1.3中,我們將修改代碼,把實參限制為一個string類型的值。

程序清單1.3 明確類型信息

現在,編譯器將拒絕編譯錯誤的程序,并給出下面的錯誤消息:

通過利用類型系統,我們把可能在生產中出現,從而影響客戶的一個運行時錯誤轉換成一個無害的編譯時錯誤。只有修復了這個錯誤,才能部署代碼。類型檢查器確保我們不會傳遞錯誤類型的值,因此代碼變得更加健壯。

當程序進入壞狀態時,就會發生錯誤。壞狀態是指無論何種原因,程序當前的所有活躍變量的組合變得無效。消除壞狀態的一種方法是限制變量能夠取到的值的數量,從而減小狀態空間,如圖1.4所示。

圖1.4 正確聲明類型時,我們能夠禁止無效的值。第一個類型太松散,允許我們不想使用的值。第二個類型的限制更嚴格,如果代碼試圖賦值給變量一個不想要使用的值,就無法通過編譯

我們可將運行中程序的狀態空間定義為其全部活躍變量的所有可能值的組合,即每個變量的類型的笛卡兒積。記住,類型可被視為一個變量可取的值的集合。兩個集合的笛卡兒積是由這兩個集合的所有有序對構成的一個集合。

安全性

禁止潛在壞狀態有一個重要的衍生作用:讓代碼變得更加安全。許多攻擊依賴于執行用戶提供的數據、緩沖區溢出和其他類似技術,而通過足夠強健的類型系統和合理的類型定義可以減輕這個問題。

代碼正確性不只是消除代碼中的輕微bug,也包括阻止惡意攻擊。

主站蜘蛛池模板: 潞城市| 渑池县| 汉阴县| 繁昌县| 阆中市| 安远县| 大庆市| 文山县| 吉安县| 长兴县| 乌鲁木齐市| 祁门县| 金寨县| 白山市| 阳江市| 永康市| 巩义市| 宜宾市| 中山市| 专栏| 河池市| 扎鲁特旗| 南投县| 吐鲁番市| 广水市| 车险| 通化县| 平陆县| 张家口市| 汉沽区| 鸡东县| 城口县| 谢通门县| 略阳县| 济南市| 北碚区| 花莲市| 太保市| 丰顺县| 大宁县| 库尔勒市|