linux之父又懟開發(fā)者:C標(biāo)準(zhǔn)就是一坨狗屎!
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在一個(gè) Linux 內(nèi)核 4.18-rc1 的 Pull Request 中,開發(fā)者 Andy Shevchenko 表示其在對(duì)設(shè)備屬性框架進(jìn)行更新時(shí),移除了 union 別名,這引發(fā)了 Linus 的暴怒。
這一次 Linus Torvalds 發(fā)怒的原因在于 Andy 給出的移除 union 別名的原因是“根據(jù)標(biāo)準(zhǔn)行事”。Linus 回復(fù)郵件認(rèn)為 Andy 這樣的解釋簡(jiǎn)直就是垃圾,并且還很危險(xiǎn),他解釋使用 union 別名本身其實(shí)就是一種在 gcc 中開發(fā)的傳統(tǒng)和標(biāo)準(zhǔn),甚至它實(shí)際上已經(jīng)是一種成文規(guī)定,并大罵對(duì)方白癡,同時(shí)大罵 C 標(biāo)準(zhǔn)是垃圾,言辭激烈。
“你為什么做出這樣的解釋呢,不要跟我說什么 C 標(biāo)準(zhǔn)描述得不清楚,C 標(biāo)準(zhǔn)有時(shí)就是一坨屎”,Linus 接著解釋:“你所謂的這個(gè)標(biāo)準(zhǔn),它對(duì)于別名規(guī)則的指導(dǎo)完全就是錯(cuò)誤的!它需要被完全地?zé)o視,并且每個(gè)編譯器都要為這樣腦殘的標(biāo)準(zhǔn)給出相應(yīng)的解決方案,這就是我們使用 -fwrapv 和 -fno-strict-aliasing 的原因。而你現(xiàn)在竟然說根據(jù)這樣一個(gè)標(biāo)準(zhǔn)來行事,你這樣的理由真的沒有任何意義。”
Linus 全程圍繞 Andy 給出的理由“根據(jù)標(biāo)準(zhǔn)行事”進(jìn)行抨擊,他的意思是當(dāng)標(biāo)準(zhǔn)與現(xiàn)實(shí)和代碼的可靠性相沖突時(shí),那么標(biāo)準(zhǔn)就是不重要的,“我一再?gòu)?qiáng)調(diào):當(dāng)標(biāo)準(zhǔn)與現(xiàn)實(shí)相沖突時(shí),那標(biāo)準(zhǔn)文檔就是衛(wèi)生紙,它就完全沒意義。事實(shí)上,在我面前衛(wèi)生紙比標(biāo)準(zhǔn)文檔還有用,至少它可以讓我的屎不蘸到屁股上”,郵件最后他又平靜地指出:“標(biāo)準(zhǔn)也需要質(zhì)疑。”
隨后在追加的第二封郵件中,Linus 表示他已經(jīng)將 Andy 的 PR 合并,并且特別說明自己不是不喜歡他的代碼,但是他還是“語(yǔ)重心長(zhǎng)”(語(yǔ)氣已經(jīng)緩和了很多)地解釋到:“我只是真的完全無(wú)法接受那種不顧現(xiàn)實(shí)的單方面的解釋。”
同時(shí)他也解釋了為什么說 Andy 給出這樣的理由是很危險(xiǎn)的,他認(rèn)為這理由聽起來就像是正確的,對(duì)于很多人來說,白紙黑字上的所謂標(biāo)準(zhǔn)是需要敬畏的,但是如果一些人不了解更多細(xì)節(jié),比如在這件事情中,他不知道其實(shí) union 別名就是 gcc 的標(biāo)準(zhǔn)做法,那他就被誤導(dǎo)了!”標(biāo)準(zhǔn)有它發(fā)揮作用的地方,但是它也有局限“,Linus 最后寫道。
Andy 回復(fù)郵件表示贊同 Linus 的說法,同時(shí)他也解釋其實(shí)在設(shè)備屬性框架中 union 別名確實(shí)是不合適的,所以才將它移除,而原因也不只是他之前說的“根據(jù)標(biāo)準(zhǔn)行事”,他在多個(gè)原因中可能選擇了不太說得過去的一個(gè)。
最后 Andy 還補(bǔ)充了 Linus 關(guān)于“呼喚標(biāo)準(zhǔn)“(Appeal to Standards)在編程上應(yīng)該被認(rèn)為是一種邏輯謬誤的看法,他認(rèn)為這不僅僅只局限于編程領(lǐng)域。
此次 Linus 的發(fā)飆,懟出了一番大道理,標(biāo)準(zhǔn)有它的約束作用,但也是有作用條件的,道理其實(shí)很簡(jiǎn)單,不用過多分析。