看板 Soft_Job 關於我們 聯絡資訊
※ 引述《ticks (ticks)》之銘言: : C++的問題之一在於它是個違建,還是二樓頂加到十樓的那種 : 為了相容舊的程式碼和標準,勢必要做很多非技術性的妥協, : 又叫做suboptimal design choices C++的繼承本來就是專門蓋違建的語法 繼承的次數越多,違建就蓋的越亂 這對Trace code的人來說是個大麻煩 假設一個類別被繼承了10次 Trace code 要把東西都抓清楚,就要看完10+1個類別定義 不像C一次呵成簡潔 更別提什麼多重繼承、動態靜態成員、Final不Final、複寫不複寫 Public、Private、回呼父類別成員的問題了 光搞這個就頭昏了,別人程式都寫完下班了,你還搞不清楚程式的開頭在那裡 但這還不是真正的災難開始 當你開始Debug的時候,才能體會何謂焦頭爛額 一堆寫C++人搞不清楚父類別就開始繼承的 也就是說,繼承之後所作的操作都是高風險的 什麼亂七八糟不可捉摸的Bug自然就層出不窮 所以那些人最喜歡講紀律啦,就像亂世的時候說法律很重要一樣的情況 類別繼承又不是Call API,Compile的時候 編譯器也是先將它們合併在一起再轉碼 其實這個事情就是Word的Copy, paste 在作的事 沒有那麼偉大啦 再回來講違建的事,違建越蓋越多,下場會是什麼? 不是倒塌,就是難以維護,最後拆掉重蓋 所以C++ Code 就是要不斷的重構(重構這個詞也是C++之後才有的) 這個場景的設計出發點本來就是錯的 後面發展的東西其實不用看太多,就能預期到悲慘的結果 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.71.206.217 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1423716105.A.FC6.html
GoalBased: 閣下之言乃是瞧不起我OOP教與重構劍法了? 02/12 12:47
csfgsj: 捅到馬蜂窩?這下麻煩大了 02/12 12:50
gary62107: 原來寫c不用重構啊… 02/12 13:20
gn01838335: 。。一一 02/12 13:32
zb26: 摩斯密碼?? 02/12 13:42
zb26: 我回憶了一下,寫C真的很少再重購 02/12 13:42
zb26: 倒是蠻常在調整演算法的 02/12 13:43
xtxml: 老樣子噓,這言論依舊一看就知道是OO適應不良 02/12 13:48
xtxml: Public、Private、動/靜態成員,連這都可以讓你搞昏頭 02/12 13:49
xtxml: 你離可以批判C++的等級還遠得很 02/12 13:49
typepeter: 其實我想知道原PO 作過什麼大專案 聽起來比googler還強 02/12 13:53
noonOut: 得了吧 c 寫大也很可怕 一堆 struct * 傳來傳去 02/12 13:54
noonOut: 這個 call 來自這麼 func ptr,這個 fun ptr 又從哪裡來 02/12 13:54
noonOut: 你光搞懂語意就昏了 沒有 type 的輔助去追 code 02/12 13:55
typepeter: 軟體工程不知有無體會 尤其大專案 02/12 13:56
noonOut: 典型自找麻煩 編譯器那麼強幹嘛不用 02/12 13:56
arenda: 自己不會用怪OOP 02/12 13:57
noonOut: c++ 不是搞 oo,c 也可以搞 oo,gtk 自己看,那才是恐怖 02/12 13:57
noonOut: 如果你要討論 oop,那是另一個維度的問題 02/12 13:57
noonOut: 用不著讓大家都以為你不懂 02/12 13:58
shortoneal: 你在罵的東西不是C++吧 02/12 14:01
BlazarArc: OOPS 02/12 14:03
BlazarArc: C可怕的應該是macro hell XD 02/12 14:03
BlazarArc: 要當C++ hater 先看完yosefk.com吧 02/12 14:05
BlazarArc: http://yosefk.com/c++fqa/fqa.html 02/12 14:05
superpai: 翻譯:我很弱 02/12 14:37
zb26: C寫的大型專案...就linux kernel啊,確實複雜。但來自於 02/12 14:53
zb26: 現代核心的複雜本質。用C++恐怕專案已崩潰 02/12 14:53
zb26: C++的曾經的最大專案應該是MFC? 主推者微軟已經轉向C# 02/12 15:00
bndan: 批評C++就算了 連OO都一起罵...一一" 02/12 15:18
realmeat: c include 順序不對可能都會哀嚎 lol 02/12 15:31
realmeat: 我一直認為 c 很考驗程式設計師對程式的掌控能力 02/12 15:32
Lordaeron: 所胃:大型專案是指? 專案金額? 專案人數? 專案程式行 02/12 15:33
Lordaeron: 數? 02/12 15:33
zb26: 參予者規模+行數+影響力 02/12 15:56
zb26: 元PO沒罵OO,他應該是在指責C++很具爭議的OO實作 02/12 15:57
zb26: linux kernel 裡面一堆OO,繼承,多型,都是純C寫的 02/12 15:58
noonOut: c++大型專案:三大瀏覽器,jvm…我應該要加一句「要是用c 02/12 15:59
noonOut: 寫恐怕已經崩潰」嗎?你也知道這無法驗證。 02/12 15:59
zb26: nokia的symbian有人說是c++不良專案之一 02/12 16:01
zb26: 以前公司買過一套obigo 是C++寫的,本身品質好,後來RD主管 02/12 16:02
noonOut: 告訴我一個寫不出不良專案的語言 02/12 16:02
zb26: 要求嚴格也發展得還可以,正反利都有. 02/12 16:02
zb26: linux kernel那段不是我的意見,那是linus老大的堅持 02/12 16:03
zb26: noon我又不是要說服你不用C++. C++自然而然的已經不再是非用 02/12 16:04
zb26: 不可。以前MFC當紅,非MFC不可,現在早已不是那種局面 02/12 16:05
zb26: 實務上如果工作需要,或是有很好的非用不可LIB(這比較少見), 02/12 16:07
zb26: C++我也能用能寫,盡量避開不良部分就是了. 02/12 16:07
noonOut: 是的。我在意的是存在某個選擇,這個選擇有某些特性,所 02/12 16:10
noonOut: 以我不喜歡舉反例或攻擊這個不行那個不行。但既然對話變 02/12 16:10
noonOut: 成這樣我就只好這樣講。你罵c我一樣會出來講。 02/12 16:10
zb26: 可能你很喜歡這個語言跟他伴隨的能力吧,元PO寫的這些缺點 02/12 16:16
zb26: 正式JAVA後來進免避免,然後看起來也挺成功的部分 02/12 16:16
zb26: 正是Java後來盡量避免 02/12 16:17
noonOut: 這是我一直在講的,你可以用 c++ 寫出好東西,省時,方便 02/12 16:21
noonOut: ,快,但你要很清楚你在幹嘛。 02/12 16:21
noonOut: java 我從不諱言他「某些情況」比c++快,但當c++寫的好 02/12 16:24
noonOut: 時候這些情況我相信不是普遍,你可以拿數據來推翻我 02/12 16:24
zb26: java後來居上的原因並不是他比C++更適合開發桌機應用,或是 02/12 16:25
zb26: 有更多gui framwork.反而是大環境變了 02/12 16:25
zb26: 運算能力儲存能力等比增加,JVM效能改進,分散式應用興起 02/12 16:26
zb26: 等等等等這些 02/12 16:26
noonOut: 我不想顯得一副我很 "c++教" 但我看不下去一些簡單的反 02/12 16:26
noonOut: 去扼殺一種選擇 02/12 16:27
noonOut: 去扼殺一種選擇 02/12 16:27
noonOut: 是 你說的對 我不想戰 java,因為我也覺得他是好東西 02/12 16:28
Lordaeron: 哪幾少行+多少人數+多有影響力, 才叫"大專案"? 02/12 17:23
zb26: 都是你問我答,我怎麼覺得你有點在找麻煩??? 02/12 17:36
zb26: 哪些是有影響力的專案,這麼大年紀了分不清楚嗎? 02/12 17:37
Lordaeron: 咦,分不清楚呢,什麼叫影響力,如何量度? 02/12 17:53
Lordaeron: 再說,你問的JAVA CPU, ARM JAVA CPU我全都給你了呢. 02/12 18:02
Lordaeron: 怎麼沒逆天了!! 02/12 18:02
zb26: 嗯嗯嗯嗯 02/12 18:19
zb26: 長大吧! 02/12 18:19
zb26: java cpu, Jazelle會是另外的有趣的題目.不過你也沒真心 02/12 18:21
zb26: 要討論,找麻煩我就不奉陪了,你自己玩 02/12 18:21
zb26: noon有些想法讓我不禁想,究竟C++強大的部分在於它特有的 02/12 18:24
zb26: 部分,譬如多重繼承,還是他兼容C又可以OO的部分 02/12 18:25
descent: http://airs.com/ian/cxx-slides.pdf write gcc in c++ 02/12 18:40
descent: 可以參考一下裡頭提到的東西 02/12 18:41
noonOut: 我的思考邏輯跟 c 差不了太多,就像上面說的,c 也可以寫 02/12 19:15
noonOut: oo,我的思考差不多,但用 c++ 的語言特性來管理 scope 02/12 19:15
noonOut: e 和產生 code 或傳遞型態,stl 是順道用,反正我隨時可 02/12 19:15
noonOut: 以選擇改用其他的 02/12 19:15
CaptainH: c 要模擬繼承就要搞一堆padding,更加麻煩 02/12 19:52
CaptainH: 有沒有哪個知名project從c++改用c之後變得更好的啊? 02/12 20:03
zb26: 沒聽說中途改的...那樣不如重寫... 02/13 09:55
zb26: 一開始就要選定了,如果是嵌入式平台+有效能需求,直接選C了 02/13 09:56
zb26: 這時候有OO需求就要用C裡面寫OO的技巧 02/13 10:01
zb26: 呼應noon的,可以把C++當JAVA寫,但無法阻止豬一般的隊友 02/13 10:15
zb26: 亂寫 XD 02/13 10:15
zb26: 這問題無解,尤其嵌入式平台,如果踩記憶體了,把機器碼 02/13 10:16
zb26: 展開來看,C很好DEBUG,如果是C++就要開始找父親大作戰XD 02/13 10:17
zb26: 我們在爭語言特性是純學術討論,實務上常是平台先決 02/13 10:18
gomi: 現在C擅長的領域 C++無能為力 C++擅長的地方 卻有其他替代方 02/13 10:48
gomi: 案可以選擇 02/13 10:48