推 softwind:我覺得 Linus說的很中肯 C++擴充C 但不代表 C++比C優越03/06 21:11
→ tinlans:遺憾的是 C++ 並非 C 的擴充。03/06 21:14
推 Chevelle:C++ 如果不是 C 的擴充為什麼要叫 C++?03/06 21:22
事實上的確不是,
因為 C++ 是 Simula 跟 Algol 的混合體在 C 語言上面的實作品。
C++ 的主要概念都是來自於 Simula 跟 Algol 兩種語言,
但是當時這兩個語言都有些缺點,比方說執行效能跟移植問題。
C++ 當時的目標是融合這兩個語言的優點,
然後希望能作到非常方便的可移植性以及高效能。
如果事情不是在 1979 年,是在 2009 的今天,
你想要發明一個語言,到處都可以跑,請問你會怎麼作?
你會想要在每一種機器上面都實作你的語言的編譯器?
當然不是,這樣太要命了,
最簡單的作法是在 JVM 上面跑,因為 JVM 到處都有。
時間回到 1979 年,當初還沒有 JVM,
那最普遍的平台是什麼?是 C。
最初的 C++ 是以 C 為載體,
「把 C 語言當作一個平台」,一個高效能,高移植性的平台,
使用一個 preprocessor,把 C++ 程式碼轉成合法的 C 語言程式碼,
這樣就可以透過本來就已經高效能且存在於很多平台的 C 編譯器直接被使用。
另外,如果是在今天,
你想要你的新語言能儘快被大家接受,你會怎麼作?
開發一個語言的語法跟現在常見的完全不同(像是 FORTH)?
還是把語法設計成 C-like?當然是後者。
C++ 當初的考量也是這樣,
但是他做的更極端,他選擇幾乎 100% 跟 C 相容(還是有不相容的地方),
於是程式設計師可以快速的接納 C++,不用重新學。
事實上當初 C++ 有考慮以別的語言為載體,但是最後選定的 C。
也就是說,當初 C++ 發展時所蘊含的「觀念」,跟 C 沒有關係,
那是一個全新的語言,只是選擇用 C 當載體,在「語法」上刻意設計的跟 C 相容,
事實上也有把 C++ 編成 P 語言(一種簡單,容易移植的語言)的編譯器唷~
事實上,C++ 發展時也有考慮過跟 C 不相容的語法,
但是使用者的反彈非常明顯,你知道的,
程式設計師都很懶,大家都懶得學新東西,
大家都希望我本來就會的東西,到了新的地方還是可以完全套用。
幾乎所有跟 C 不相容的嘗試最後都被使用者打回來,
不然 C++ 理想上的語法會比現在更精練許多。
而 C++ 這個名字,
其實是 C++ 已經發展好一段時間才取的,
原因是因為「語法上跟 C 很像」,
請千萬不要再誤會 C++ 是從 C 來的了。
PS. 「C++擴充C 但不代表 C++比C優越」
這句話姑且不論實際上正確不正確,
但是 Linus 講話一點都不中肯,他的偏見是有名的,加油好嗎。
「Linus 講話一點都不中肯」
這句話才是公認的中肯。
--
To iterate is human, to recurse, divine.
遞迴只應天上有, 凡人該當用迴圈. L. Peter Deutsch
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.106.19
→ fuha:看了很多新聞 也覺得他有點偏激 03/13 23:33
→ pico2k:沒有一點偏執狂是寫不出linux的... 03/14 00:47
推 littleshan:我很喜歡用Linux不過對這件事我必須反對Linus的偏見 03/14 00:57
推 PRAM:我覺得linus很中肯,因為他實際用c++試過寫linux kernel,但不 03/14 10:15
→ PRAM:可行。如果你要推翻他的話,那你必須用c++寫出linux kernel, 03/14 10:16
→ PRAM:光靠講故事是沒有說服力的,我只是就事論事,得罪得罪。 03/14 10:16
→ yoco315:"Get out and play in your little world." 03/14 10:18
→ ChampYen:本文受教了, 然而原Po樓上回文會不會太過了? 03/14 10:35
→ ChampYen:nice article... 回覆他人觀點稍微和緩些可能比較聽得下 03/14 10:38
→ yoco315:這不是我講的,這是 Linus 講的 XD 還有別的,像是.. 03/14 10:47
→ yoco315: *YOU* are full of bullshit! 或是 03/14 10:48
→ yoco315: don't screw that up. 03/14 10:48
→ yoco315: you have to limit your project in C 03/14 10:49
→ yoco315:Linus 遇到別人談 C++ 就是這樣大腦發熱.. 懂了嗎.. 03/14 10:50
→ yoco315:像我上面都已經說我不論那句話的對錯了,我不討論宗教問題 03/14 10:51
→ yoco315:我只是說C++的歷史,這沒什麼好同意還是說服的,這是事實 03/14 10:52
→ yoco315:但是PRAM就像Linus一樣大腦發燙的跳出來 03/14 10:52
→ yoco315:說你故事講得好不代表C++比C好,廢話,我根本沒在講C++好 03/14 10:53
→ yoco315:我只是單純描述C++不是從C來的,選C也是因為C很優秀 03/14 10:55
→ yoco315:但是就是有人會跳出來靠北,還靠北的完全無關 03/14 10:55
推 Chevelle:意思好像差不多啊.. 還是多謝你的歷史課 03/14 11:07
→ Chevelle:它都取名叫 C++ 了,那要說「這是全新的語言」就.. 03/14 11:08
推 legnaleurc:所以JavaScript也一定要和Java有關係?XD 03/14 11:43
推 Chevelle:關係的部份有人幫我講啦 比如「刻意」相容什麼的XD 03/14 11:47
推 HudsonE:C++ 確實和 C 不同啊不然你用 C compiler 編編看 C++ XD 03/14 11:49
→ HudsonE:不過歷史雖然這樣... 我是覺得從語言角度看 03/14 11:50
→ HudsonE:要說 C++ extends C 也不是什麼[[很罪大惡極的事 XD 03/14 11:50
→ Cloud:三年前看過的文章,Bjarne談C++歷史...我覺得很棒...XD 03/14 12:54
→ yoco315:從 C 出發,加入別的東西,這才叫 extend 03/14 13:12
→ yoco315:從別的地方出發,去相容於 C,這叫 fitting 03/14 13:13
→ yoco315:C++ 跟 C 是有關係,不過不是 extend,是 fit 很難懂嗎? 03/14 13:13
→ yoco315:我都講得這麼白話了,這不是意識形態的問題,這是事實 03/14 13:15
推 Chevelle:我是不覺得講 C++ extends C 有什麼不好 這樣 C++ 會顯得 03/14 13:32
→ Chevelle:比較不偉大嗎? 剛剛那篇 Bjarne Stroustrup 自己都說了 03/14 13:33
→ Chevelle:a dialect of C called "C with Classes" 03/14 13:33
→ yoco315:沒有不好,只是不對 03/14 13:36
→ yoco315:也沒有偉大不偉大的問題,只是單純「不是這樣」而已 03/14 13:36
→ yoco315:另外方言怎麼取,也改不了 C++ 不是 extend C 的事實 03/14 13:37
→ yoco315:事實上就不是阿 XDDDD 我就不懂為什麼一堆人要找一推東西 03/14 13:39
→ yoco315:來說你看這你看那你看你看你看你看.. 看再多也不是阿 orz 03/14 13:39
推 Chevelle:我比較希望在那篇裡可以找到你所謂的 fitting 說法啊 03/14 13:40
→ Chevelle:人家都說是從 C 來的 難道還要說不是嗎? 03/14 13:40
→ yoco315:那篇是the design and evolution of c++ 的摘錄加上新發展 03/14 13:42
→ yoco315:你大可直接去看 d&e c++, 不是就不是 @"@ 03/14 13:43
推 Chevelle:你是說這個"摘錄"跟書裡講的完全不一樣嗎? 03/14 13:46
→ yoco315:不,顯然是你只看了一點點東西所以產生誤解 03/14 13:49
→ yoco315:如果你對於 C++ 發展的過程有更多了解,不會講出這種話 03/14 13:49
→ yoco315:你想找到所謂 fitting 哪裡來,那為什麼不看的更全面一點? 03/14 13:50
→ yoco315:既然要學 C++, 那學得全面一點,完整一點,有更正確的認知 03/14 13:51
→ yoco315:不是更好嗎?我不懂為什麼很多人要堅持錯誤的理解.. @"@ 03/14 13:51
→ yoco315:事實上從OS串開始,我就很訝異(其實已經不訝異了) 03/14 13:52
→ yoco315:很多人一直堅持著錯誤的看法,我覺得很奇怪.. 03/14 13:53
→ yoco315:為什麼學習一個東西,不去唸書看正確的東西.. 03/14 13:53
→ yoco315:而是只憑著自己的想像在堅持一些很奇怪的東西? 03/14 13:54
→ yoco315:不就是因為不懂,所以才在學嗎?那為什麼要學又不學對的? 03/14 13:54
→ yoco315:對 C++ 的來源有正確的理解跟認識,到底是哪裡不好? 03/14 13:55
推 HudsonE:滑稽而已啊... lol 03/14 13:55
→ yoco315:我不懂為什麼很多人在不了解狀況的時候還可以講話很大聲@@ 03/14 13:56
推 Chevelle:我比較信 Stroustrup 說的啦 03/14 13:57
→ yoco315:阿要學就好好學,一直爭有什麼好處 -_-?? 03/14 13:57
→ Chevelle:這篇裡好像沒有看到有人在學 - -" 03/14 13:58
→ yoco315:那當然,問題是你誤解了 03/14 13:58
→ yoco315:所以希望你要就去看的更完整一點.. 03/14 13:59
推 Chevelle:你可以說這樣講不好,不過你不能說這麼講是「錯」的吧 03/14 14:02
→ Chevelle:Stroustrup 自己都沒有講得如此斬釘截鐵了... 03/14 14:03
推 Chevelle:"C++ is a direct descendant of C that retains almost 03/14 14:05
→ Chevelle:all of C as a subset." 03/14 14:05
→ yoco315:我上面講了,這是「語法」上跟 C 相容的結果 03/14 14:11
→ yoco315:C++ 本質上大都是 Simula 的 C 語言移植 03/14 14:12
→ yoco315:我老實講個不客氣的,上面那篇53頁的文章才po多久 03/14 14:12
→ Chevelle:對了,descendant 好像不是「擴充」出來的,這算我的疏失 03/14 14:12
→ yoco315:坦白說我覺得你只是匆匆爬過,與其這樣 03/14 14:12
→ yoco315:為什麼不去完整的看 desing and evo of C++ ? 03/14 14:13
→ yoco315:有更深入跟全面的認識不是更好嗎? 03/14 14:13
→ yoco315:我這樣講是很不客氣,不太禮貌,這樣我是在質疑你 03/14 14:15
→ yoco315:是在質疑你用剛裝的半桶水跟我討論.. 事實上你可能不是 03/14 14:16
→ yoco315:但是坦白說我你給我的感覺就是這樣.. 如果誤會你我很抱歉 03/14 14:16
→ jaw109:拜讀此文, 小弟受教了, 在此謝過~~~~ 03/14 16:21
推 wowtiger:用 C 的檔案給 C++ Compiler 應該會 warning 一堆吧 03/14 16:34
推 Chevelle:我是不覺得我說的有那麼「不對」啦,您說的我也認同咩 03/14 16:38
推 wowtiger:我個人是覺得錯很大 因為 C++ 要求太多了 C可以C++卻不行 03/14 16:57
推 Chevelle:我沒說過可用 C++ compiler 去 compile C 的 source 啊 03/14 17:01
推 Chevelle:「擴充」或許太狹義,不過 C++ 「就是從 C 來的」啊 03/14 17:08
→ Chevelle:難道要說是 (accidentally/reluctantly/somewhat) 03/14 17:10
→ Chevelle:has a syntax close to C? 03/14 17:10
推 carlcarl:爭到最後 真不曉得你們在幹麼 有點無聊= = 03/14 17:55
推 ilovebbs:....有點歡..囧 03/14 18:42
推 Chevelle:"C++ is a direct descendant of Simula and Algol, 03/14 19:57
→ Chevelle:... I chose C as its syntax..." 03/14 19:57
→ Chevelle:y大大要過生日了吧 別爭論了 @@ 03/14 19:57
推 hylkevin:推yoco大 擇善固執 03/15 03:26
推 chrisdar:所以要拆板啦? C / C++ / MFC / ALT / dotNET 五個討論板 03/15 11:13
推 zxvc:有時候我會懷疑 擇"對"固執 真的有義意嗎? 03/15 13:41
→ zxvc:像"打拚"多少人寫成"打拼","消費券"多少人寫成"消費卷"。 03/15 13:42
→ zxvc:對於原問題,我沒有特別支持誰的說法,只是想知道這樣討論有 03/15 13:45
→ zxvc:沒有特殊的意義。 03/15 13:46
推 PRAM:口口聲聲靠北靠北 你說話也有點口德 03/15 18:51
→ PRAM:說起來你也是寫不出 c++ 的 linux kernel 吧 :D 03/15 18:51
推 PRAM:就算 linus 再怎麼大腦發燙,你又能怎麼樣? 如果你可以用 c++ 03/15 18:57
→ PRAM:寫出個 linux kernel,你就可以說他的話是屁話。可惜你寫不出 03/15 18:57
→ PRAM:來,光會講一堆故事有什麼用?這世界不缺會說故事的小咖 :D 03/15 18:57
→ PRAM:你光會靠北 linus 頭發燙是沒用的 03/15 18:58
推 zerodevil:前面那串一些用c++寫的kernel樓上都當沒看到就是了= = 03/15 19:04
推 zerodevil:都過多久了還在戰os 太閒了是不是 03/15 19:06
推 PRAM:我是說這位 yoco315 要能用c++寫linux kernel ,才有資格說 03/15 19:26
→ PRAM:linus 腦發燙,光會說故事是沒屁用的 :D 03/15 19:26
→ PRAM:星期天閒著也是閒著,樓上的不也是很閒嗎 呵 03/15 19:26
推 kaomark:"C++寫linux kernel"跟"C與C++間的歷史" 有啥關連啊? 03/15 19:33
推 asoedarren:直接放大絕 善哉善哉... 03/15 19:35
推 zerodevil:"會xxx才有資格批評ooo" 真好用的大絕.. 03/15 19:45
推 littleshan:yoco,我有點懶了,可以不吐他槽嗎? 03/15 19:46
推 wowtiger:真正的大絕是 會寫 C++ Compiler 才有資格批評 C++ 吧 03/15 21:17
→ yoco315:我已經很有口德了 ._.a 因為是在這個版, 我收斂很多了 03/16 00:37
推 discipile:可謂何到現在工程上的程式設計大多用C,而不用C++呢? 03/24 02:24
推 ImOnLine:我總覺得看書就像瞎子摸象一樣的。你看什麼書就被作者 04/13 15:50
→ ImOnLine:引導,甚至可能被作者的錯誤觀念騙。 04/13 15:52
→ ImOnLine:尤其是歷史這種東西,畢竟我們都是從書上得知c++的發展的 04/13 15:53
→ ImOnLine:誰知c++是否真的不是從c extend出來的,就算是獲不是又如 04/13 15:54
→ ImOnLine:何?能改變我的生活嗎? 04/13 15:54
→ ImOnLine:而我看得c++書都說c++早期叫"c with classes",就是擴展 04/13 15:56
→ ImOnLine:C的意思。至於classes的觀念從何語言來,也許是從您說的 04/13 15:57
→ ImOnLine:Simula與Algol但,確實是將c語言擴展,這應該沒人會反對 04/13 15:58
推 ImOnLine:從我看書得知,c++就是擴展c,至於您因為書上某句話而 04/13 16:02
→ ImOnLine:認為c++並非擴充c。也許是彼此對書的字句解讀的問題吧 04/13 16:03
→ ImOnLine:從我看書得知,我還是認為c++是擴展c的。 04/13 16:04