Re: 常見的 C++ 錯誤觀點

看板C_and_CPP作者 (眠月)時間16年前 (2009/03/13 15:26), 編輯推噓38(38090)
留言128則, 24人參與, 最新討論串4/4 (看更多)
追加一發,這一發很重要,因為這是 C++ 非常自古以來就被誤會的點。

03/06 21:11,
我覺得 Linus說的很中肯 C++擴充C 但不代表 C++比C優越
03/06 21:11

03/06 21:14,
遺憾的是 C++ 並非 C 的擴充。
03/06 21:14

03/06 21:22,
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

03/13 23:33, , 1F
看了很多新聞 也覺得他有點偏激
03/13 23:33, 1F

03/14 00:47, , 2F
沒有一點偏執狂是寫不出linux的...
03/14 00:47, 2F

03/14 00:57, , 3F
我很喜歡用Linux不過對這件事我必須反對Linus的偏見
03/14 00:57, 3F

03/14 10:15, , 4F
我覺得linus很中肯,因為他實際用c++試過寫linux kernel,但不
03/14 10:15, 4F

03/14 10:16, , 5F
可行。如果你要推翻他的話,那你必須用c++寫出linux kernel,
03/14 10:16, 5F

03/14 10:16, , 6F
光靠講故事是沒有說服力的,我只是就事論事,得罪得罪。
03/14 10:16, 6F

03/14 10:18, , 7F
"Get out and play in your little world."
03/14 10:18, 7F

03/14 10:35, , 8F
本文受教了, 然而原Po樓上回文會不會太過了?
03/14 10:35, 8F

03/14 10:38, , 9F
nice article... 回覆他人觀點稍微和緩些可能比較聽得下
03/14 10:38, 9F

03/14 10:47, , 10F
這不是我講的,這是 Linus 講的 XD 還有別的,像是..
03/14 10:47, 10F

03/14 10:48, , 11F
*YOU* are full of bullshit! 或是
03/14 10:48, 11F

03/14 10:48, , 12F
don't screw that up.
03/14 10:48, 12F

03/14 10:49, , 13F
you have to limit your project in C
03/14 10:49, 13F

03/14 10:50, , 14F
Linus 遇到別人談 C++ 就是這樣大腦發熱.. 懂了嗎..
03/14 10:50, 14F

03/14 10:51, , 15F
像我上面都已經說我不論那句話的對錯了,我不討論宗教問題
03/14 10:51, 15F

03/14 10:52, , 16F
我只是說C++的歷史,這沒什麼好同意還是說服的,這是事實
03/14 10:52, 16F

03/14 10:52, , 17F
但是PRAM就像Linus一樣大腦發燙的跳出來
03/14 10:52, 17F

03/14 10:53, , 18F
說你故事講得好不代表C++比C好,廢話,我根本沒在講C++好
03/14 10:53, 18F

03/14 10:55, , 19F
我只是單純描述C++不是從C來的,選C也是因為C很優秀
03/14 10:55, 19F

03/14 10:55, , 20F
但是就是有人會跳出來靠北,還靠北的完全無關
03/14 10:55, 20F

03/14 11:07, , 21F
意思好像差不多啊.. 還是多謝你的歷史課
03/14 11:07, 21F

03/14 11:08, , 22F
它都取名叫 C++ 了,那要說「這是全新的語言」就..
03/14 11:08, 22F

03/14 11:43, , 23F
所以JavaScript也一定要和Java有關係?XD
03/14 11:43, 23F

03/14 11:47, , 24F
關係的部份有人幫我講啦 比如「刻意」相容什麼的XD
03/14 11:47, 24F

03/14 11:49, , 25F
C++ 確實和 C 不同啊不然你用 C compiler 編編看 C++ XD
03/14 11:49, 25F

03/14 11:50, , 26F
不過歷史雖然這樣... 我是覺得從語言角度看
03/14 11:50, 26F

03/14 11:50, , 27F
要說 C++ extends C 也不是什麼[[很罪大惡極的事 XD
03/14 11:50, 27F

03/14 12:53, , 28F

03/14 12:54, , 29F
三年前看過的文章,Bjarne談C++歷史...我覺得很棒...XD
03/14 12:54, 29F

03/14 13:12, , 30F
從 C 出發,加入別的東西,這才叫 extend
03/14 13:12, 30F

03/14 13:13, , 31F
從別的地方出發,去相容於 C,這叫 fitting
03/14 13:13, 31F

03/14 13:13, , 32F
C++ 跟 C 是有關係,不過不是 extend,是 fit 很難懂嗎?
03/14 13:13, 32F

03/14 13:15, , 33F
我都講得這麼白話了,這不是意識形態的問題,這是事實
03/14 13:15, 33F

03/14 13:32, , 34F
我是不覺得講 C++ extends C 有什麼不好 這樣 C++ 會顯得
03/14 13:32, 34F

03/14 13:33, , 35F
比較不偉大嗎? 剛剛那篇 Bjarne Stroustrup 自己都說了
03/14 13:33, 35F
還有 53 則推文
03/14 19:57, , 89F
"C++ is a direct descendant of Simula and Algol,
03/14 19:57, 89F

03/14 19:57, , 90F
... I chose C as its syntax..."
03/14 19:57, 90F

03/14 19:57, , 91F
y大大要過生日了吧 別爭論了 @@
03/14 19:57, 91F

03/15 03:26, , 92F
推yoco大 擇善固執
03/15 03:26, 92F

03/15 11:13, , 93F
所以要拆板啦? C / C++ / MFC / ALT / dotNET 五個討論板
03/15 11:13, 93F

03/15 13:41, , 94F
有時候我會懷疑 擇"對"固執 真的有義意嗎?
03/15 13:41, 94F

03/15 13:42, , 95F
像"打拚"多少人寫成"打拼","消費券"多少人寫成"消費卷"。
03/15 13:42, 95F

03/15 13:45, , 96F
對於原問題,我沒有特別支持誰的說法,只是想知道這樣討論有
03/15 13:45, 96F

03/15 13:46, , 97F
沒有特殊的意義。
03/15 13:46, 97F

03/15 18:51, , 98F
口口聲聲靠北靠北 你說話也有點口德
03/15 18:51, 98F

03/15 18:51, , 99F
說起來你也是寫不出 c++ 的 linux kernel 吧 :D
03/15 18:51, 99F

03/15 18:57, , 100F
就算 linus 再怎麼大腦發燙,你又能怎麼樣? 如果你可以用 c++
03/15 18:57, 100F

03/15 18:57, , 101F
寫出個 linux kernel,你就可以說他的話是屁話。可惜你寫不出
03/15 18:57, 101F

03/15 18:57, , 102F
來,光會講一堆故事有什麼用?這世界不缺會說故事的小咖 :D
03/15 18:57, 102F

03/15 18:58, , 103F
你光會靠北 linus 頭發燙是沒用的
03/15 18:58, 103F

03/15 19:04, , 104F
前面那串一些用c++寫的kernel樓上都當沒看到就是了= =
03/15 19:04, 104F

03/15 19:06, , 105F
都過多久了還在戰os 太閒了是不是
03/15 19:06, 105F

03/15 19:26, , 106F
我是說這位 yoco315 要能用c++寫linux kernel ,才有資格說
03/15 19:26, 106F

03/15 19:26, , 107F
linus 腦發燙,光會說故事是沒屁用的 :D
03/15 19:26, 107F

03/15 19:26, , 108F
星期天閒著也是閒著,樓上的不也是很閒嗎 呵
03/15 19:26, 108F

03/15 19:33, , 109F
"C++寫linux kernel"跟"C與C++間的歷史" 有啥關連啊?
03/15 19:33, 109F

03/15 19:35, , 110F
直接放大絕 善哉善哉...
03/15 19:35, 110F

03/15 19:45, , 111F
"會xxx才有資格批評ooo" 真好用的大絕..
03/15 19:45, 111F

03/15 19:46, , 112F
yoco,我有點懶了,可以不吐他槽嗎?
03/15 19:46, 112F

03/15 21:17, , 113F
真正的大絕是 會寫 C++ Compiler 才有資格批評 C++ 吧
03/15 21:17, 113F

03/16 00:37, , 114F
我已經很有口德了 ._.a 因為是在這個版, 我收斂很多了
03/16 00:37, 114F

03/24 02:24, , 115F
可謂何到現在工程上的程式設計大多用C,而不用C++呢?
03/24 02:24, 115F

04/13 15:50, , 116F
我總覺得看書就像瞎子摸象一樣的。你看什麼書就被作者
04/13 15:50, 116F

04/13 15:52, , 117F
引導,甚至可能被作者的錯誤觀念騙。
04/13 15:52, 117F

04/13 15:53, , 118F
尤其是歷史這種東西,畢竟我們都是從書上得知c++的發展的
04/13 15:53, 118F

04/13 15:54, , 119F
誰知c++是否真的不是從c extend出來的,就算是獲不是又如
04/13 15:54, 119F

04/13 15:54, , 120F
何?能改變我的生活嗎?
04/13 15:54, 120F

04/13 15:56, , 121F
而我看得c++書都說c++早期叫"c with classes",就是擴展
04/13 15:56, 121F

04/13 15:57, , 122F
C的意思。至於classes的觀念從何語言來,也許是從您說的
04/13 15:57, 122F

04/13 15:58, , 123F
Simula與Algol但,確實是將c語言擴展,這應該沒人會反對
04/13 15:58, 123F

04/13 16:02, , 124F
從我看書得知,c++就是擴展c,至於您因為書上某句話而
04/13 16:02, 124F

04/13 16:03, , 125F
認為c++並非擴充c。也許是彼此對書的字句解讀的問題吧
04/13 16:03, 125F

04/13 16:04, , 126F
從我看書得知,我還是認為c++是擴展c的。
04/13 16:04, 126F

06/29 22:39, , 127F
樓上不要猜了,The Design and Evolution of C++ 弄來看吧
06/29 22:39, 127F

03/23 21:21, , 128F
朝聖這篇,這為啥會扔到輕鬆一下區阿......
03/23 21:21, 128F
文章代碼(AID): #19kdivHS (C_and_CPP)
文章代碼(AID): #19kdivHS (C_and_CPP)