異常的語義

2021-09-01 01:33:31 字數 493 閱讀 3107

分析下程式裡在哪些方面會出現非預期情況:

硬體、邏輯和預言。

預言是啥?好像沒聽過?其實它是常見的東西,如timeout,timeout就是乙個預言,這段**要在這段時間內完成。預言是最最根本的異常**,所有其它異常都因他產生

硬體,如網路,這方面的非預期情況可以劃給異常。為什麼?因為有乙個隱藏的預言,硬體正確。有可能用非預言定義硬體出錯嗎?不可能,因為硬體可能在任何時候出錯。

邏輯,這個劃給bug?其實這裡是要細分的:客戶端邏輯錯誤,本地邏輯錯誤,服務端邏輯錯誤

客戶端邏輯錯誤,需要預言客戶端正確嗎?多數情況不是,因為可以通過檢查進行分類,除非這個分類不可解(如停機問題)或不值得(考慮了效能)

本地邏輯錯誤,這個劃給bug吧,再不划給bug沒東西劃給bug了

服務端邏輯錯誤,其實等於服務端的本地邏輯錯誤,這麼說他是bug,可是世界上的事常常不完美,有時他是黑盒,有時他被偽裝成預言(偽裝成timeout很容易成功,囧),因此雖然他是bug,卻常常要當做異常來處理

值語義與物件語義

值語義 value sematics 指的是物件的拷貝與原物件無關,就像拷貝int一樣。c 的內建型別 bool int double char 都是值語義,標準庫里的complex pair vector map string等等型別也都是值語義,拷貝之後就與原物件脫離關係。物件語義 object...

訊息佇列的消費語義和投遞語義

所謂的消費語義,指的就是如下三種情況 其實類似還有乙個投遞語義 說句實在話,其實還是老問題,只是換了一種問法!ok,開始我們的正文 我們先做如下約定 我們先從投遞語義開始講起,因為要先把這個概念講明白了,才能講消費語義。恰巧,kafka實現了這三種語義,我們以kafka來說明。如何保證訊息最多投遞一...

go 型別的值語義和引用語義

go語言重大部分型別都是基於值語義,包括 1.基本型別 byte,int,bool,float32,float64,string等 2.復合型別 陣列array,結構體struct,指標pointer等 重點來了,c c 中,陣列傳遞是引用語義,但在go中,陣列和基本型別沒啥區別,都是值語義,也就是...