在一個 Linux 內核 4.18-rc1 的 Pull Request 中,開發者 Andy Shevchenko 表示其在對設備屬性框架進行更新時,移除了 union 別名,這引起了 Linus 的暴怒。linux
這一次 Linus Torvalds 發怒的緣由在於 Andy 給出的移除 union 別名的緣由是「根據標準行事」。Linus 回覆郵件認爲 Andy 這樣的解釋簡直就是垃圾,而且還很危險,他解釋使用 union 別名自己其實就是一種在 gcc 中的傳統和標準,甚至它實際上已是一種成文規定,並大罵對方白癡,同時大罵 C 標準是垃圾,言辭激烈。程序員
「你爲何作出這樣的解釋呢,不要跟我說什麼 C 標準描述得不清楚,C 標準有時就是一坨屎」,Linus 接着解釋:「你所謂的這個標準,它對於別名規則的指導徹底就是錯誤的!它須要被徹底地無視,而且每一個編譯器都要爲這樣腦殘的標準給出相應的解決方案,這就是咱們使用 -fwrapv 和 -fno-strict-aliasing 的緣由。而你如今居然說根據這樣一個標準來行事,你這樣的理由真的沒有任何意義。」編程
Linus 全程圍繞 Andy 給出的理由「根據標準行事」進行抨擊,他的意思是當標準與現實和代碼的可靠性相沖突時,那麼標準就是不重要的,「我一再強調:當標準與現實相沖突時,那標準文檔就是衛生紙,它就徹底沒意義。事實上,在我面前衛生紙比標準文檔還有用,至少它可讓個人屎不蘸到屁股上」,郵件最後他又平靜地指出:「標準也須要質疑。」框架
隨後在追加的第二封郵件中,Linus 表示他已經將 Andy 的 PR 合併,而且特別說明本身不是不喜歡他的代碼,可是他仍是「語重心長」(語氣已經緩和了不少)地解釋到:「我只是真的徹底沒法接受那種不顧現實的單方面的解釋。」blog
同時他也解釋了爲何說 Andy 給出這樣的理由是很危險的,他認爲這理由聽起來就像是正確的,對於不少人來講,白紙黑字上的所謂標準是須要敬畏的,可是若是一些人不瞭解更多細節,好比在這件事情中,他不知道其實 union 別名就是 gcc 的標準作法,那他就被誤導了!」標準有它發揮做用的地方,可是它也有侷限「,Linus 最後寫道。開發
Andy 回覆郵件表示贊同 Linus 的說法,同時他也解釋其實在設備屬性框架中 union 別名確實是不合適的,因此纔將它移除,而緣由也不僅是他以前說的「根據標準行事」,他在多個緣由中可能選擇了不太說得過去的一個。文檔
最後 Andy 還補充了 Linus 關於「呼喚標準「(Appeal to Standards)在編程上應該被認爲是一種邏輯謬誤的見解,他認爲這不單單隻侷限於編程領域。get
這次 Linus 的發飆,懟出了一番大道理,標準有它的約束做用,但也是有做用條件的,道理其實很簡單,不用過多分析。不去像 Andy 那樣談論到寬泛的領域,做爲平常依據各類標準編程文檔行事的程序員,歡迎你留言吐槽/讚美/...標準的那些事。編譯器