有一陣子沒寫C++代碼,重拾起來竟感到陌生得可怕,尤其是模板實現更是讓人心虛。各種編譯錯誤接踵而至,效率低下更讓我後悔專案初期選用C++並大量引入STL。然而專案已成型,若要推倒重寫純C版本,無論時間還是精力都不允許。選擇程式語言猶如選擇伴侶,即使後來發現不合拍,也得堅持到專案結束;所幸語言的選擇只綁定一個專案,隨專案結束而釋懷,不像伴侶是一輩子的事,更需慎重抉擇。
煩惱之餘,重讀林納斯·托瓦茲(Linus Torvalds)當年炮轟C++的經典言論,聊以自慰。他在2007年的郵件列表中直言:「C++是門爛透了的語言,更糟的是大量水平不濟的程式設計師使用它,輕易就能製造出極爛的代碼。哪怕選C語言唯一的理由只是為了把C++程式設計師擋在門外,那也是個巨大的理由。」他進一步指出C++會誘導極差的設計選擇:濫用STL、Boost等庫,導致除錯痛苦、抽象層效率低下,最終若想寫出高效、可移植的系統級C++,只能限制在C語言已有的特性子集內。
林納斯早於1992年嘗試在Linux核心引入C++,結論是「寫核心代碼用C++是個血腥的蠢主意」:異常處理根本壞掉、編譯器喜歡在背後隱藏記憶體分配、用C語言同樣能寫出物件導向代碼(如檔案系統)卻不必忍受C++的垃圾。他的結論直擊要害:對於Git這類以效率為首要目標的專案,C++純屬大錯特錯;順便把看不清這點的人氣走,反而是額外優勢。
雖然林納斯的言辭犀利甚至偏激,但對於在C++模板與STL泥沼中掙扎的開發者,這番話確實能帶來某種共鳴與釋懷。語言無優劣,唯適合與否;選定了,就專注於在限制中寫出最好的代碼吧。