精華區beta C_and_CPP 關於我們 聯絡資訊
追加一發,這一發很重要,因為這是 C++ 非常自古以來就被誤會的點。
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:http://tinyurl.com/cvsv2a 03/14 12:53
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