標籤:

理論上任何代碼都可能沒有bug么?


理論上任何代碼都存在bug, 這一個論斷是放到一個更大的時空範圍來說的,從硬體角度來看,沒有cpu可以長期工作,設計壽命大約只有十年,長期工作一定會壞掉。

另外輸入輸出指令存在半導體晶元硬體上出錯的概率。對於現代cpu來說,因為cpu架構內部存在多處時鐘非同步的介面,理論上非同步介面必然存在一個半導體因素導致的錯誤概率,這個搞晶元設計的課程中都會講到,不同廠家的cpu在非同步介面處的硬體設計功力體現了產品的最終性能,這塊是半導體晶元設計的關鍵技術之一,同頻率下apple的cpu設計在類似的地方只需要增加一個時鐘周期的時延,那麼華為cpu類似的規範就需要三個時鐘周期的時延才能滿足出錯概率的設計要求,所以目前公認apple的cpu設計水平最高。上述理論錯誤導致現實中的cpu不是理想模型,任何輸入輸出都存在一個微小概率的出錯,此錯誤概率與頻率和時延相關,這也是航天cpu的頻率只有區區20兆hz的原因,降低頻率就可以大幅度降低這種理論上輸出錯誤的概率。

由於多核cpu技術的發展,cpu單晶元集成上百個cpu, 各個cpu的頻率也開始不同,cpu內部引入了更多的非同步介面,cpu的晶元越做越大,cpu內部的理論延遲也越來越大,cpu晶元內部現在也是一個分散式硬體系統,受cap理論限制,各個cpu看到的數據各不相同,內部數據的差異性可能需要數十個納秒的時間才能完全同步,是一個最終一致的模型。所以多線程軟體設計的要求也比以前更高。例如:某些當年在奔騰四下穩定運行多年的多線程代碼拿到更快的cpu架構下可能就不穩定了。

狹義上代碼足夠小,投入大量的時間和人力資源,人員有足夠技術水平,是可以消除掉全部已知的軟體bug的。


所謂的bug就是,你覺得它完全沒問題了但是後面被人翻出來是個bug,所以是不是bug沒法下結論,項目越大越多bug


讓我來開個大招。理論上任何代碼都有bug。

萬一編譯器或者運行環境就有bug呢?


你的代碼能為所有可能的操作帶來正確的反饋那就是沒有bug


理論上任何代碼都可能存在bug

我曾經給一個學妹指(zhuang)導(bi),然後hello world報錯了


以前看到一本書,具體怎麼說記不清了,大意說是,程序就是按照人類的思維來跑的,代碼就是按照人類的思維來編的,因為人類的思維都有漏洞,所以程序也一定有漏洞。


生態圈中人本身就是一個BUG級別的物種存在

Bug寫代碼 怎麼說?


代碼不屬於自然科學 屬於設計範疇,只要是人設計出來的東西都會有缺陷,當然缺陷也是相對的,如果這麼冷的天你家空調不能制熱,你肯定認為它有bug,但是最早的空調僅用於製冷功能,制熱功能是後來才有的,空調剛有的時候 不能制熱 你會認為這是bug嗎


「理論上」 「可能」

理論上這兩個詞可能可以造很多句。


代碼和說謊一樣,是禁止不了識破(出bug)的,當然,你可以說多幾個謊話來圓謊(加判斷),但是,還是阻止不了


推薦閱讀:

還在用著5年前的cpu和顯卡,是一種什麼感受?
熊寫代碼這三年:閱讀寫作與技術成長
編寫整潔的 PHP 代碼

TAG:編程 | Bug | 代碼 |