C_and_CPP 板


LINE

这串讨论似乎变成C与C++之争 最精采的是看到yehsd、yoco315(按字母顺序排序)两人的激烈攻防 这串讨论我反覆地看过两次,再上google参考前人对C/C++的见解 比对之下,个人觉得yehsd、yoco315两位的论点太虚了,不着边际,搔不到痒处 两位可能都是一等一的高手,程式底子十分深厚,但是两位的言论流於意气之争 几乎没什麽重点可言 讨论什麽constructor是不是空的实在是很无聊,就算是空的又如何? 我个人比较倾向於认为:C++不适合用来写OS,用C写才是王道 但yehsd似乎也提不出多棒的观点来证明C++的不好 以下是我向yoco315提出「用C++不适合写OS」的理由 1.效能也许会较差(这一点两位y兄争了很久):  说真的,我完全不能证明C++比C效能还差,甚至我可以证明,C效能永远不比C++好  证明如下:  若set_Y为C中效能优於C++的子集合,已知C++为C的超集,set_Y必然也是C++的子集  set_Y at C > set_Y at C++,固set_Y为空集合  总之,C做得到的C++也做得到,C++的效能没理由较差  一般认为C++效能较差是有几点现实上的考量:  a. C++太多太杂太难掌握,让程式人员浪费太多时间在语言本身而非问题的最佳解上 b. C++会偷偷增加一些程式码来维持本身的OO特性,一不小心就多出了不必要的code c. C++会偷偷增加一些程式码来维持运算子过载特性,一不小心就多出了不必要的code  d. 用C++物件导向实作的函式库,很方便使用没错,但代价就是负担太大(如Qt) e. ...应该还有很多我不知道的 2.C++程式不易读  C++远比C复杂太多了,太多好用的功能叠加在一起就变得很难用  例如:运算子过载(重载?)   Integer a = 1; // a为1 Integer b = 3; // b为2 printf("a+b=%d", a+b); //印出3 运算子过载真是太好用了,而且程式一看就懂,真是太好维护了,但是如果…   Man a_man("大雄"); // 定义一个男人   Woman a_woman("静香"); // 定义一个女人 int money = MAX_VALUE;   printf("干这是什麽鬼:%s", a_man + money + a_woman);  这种code要怎麽维护?先回头找一下Man与Woman中operator + 的定义  再确认与int作运算表示什麽,再查一下书看看运算的顺序的先後关系,如果operator  中又用到其他operator的过载,又要再去查,为了追一个问题,又引起n个问题,为  了确认n个问题,又出现n^2个问题…没完没了。程式很简洁没错,但是要怎麽debug?  难道每一行程式都要猜猜看吗? 好的物件导向远比C好维护,不过C++决对不是好的物件导向语言(这句话一言难尽) 3.物件导向不适合底层程式 了解物件导向的人就知道,它是较贴进人类思维的程式写作方法,反之,它就不是  一个贴近底层机器运作原理的编程原则,机器语言、组语才是最贴近底层运作机制的  语言,想要用OO来描述机器的行为、自然法则、各式各样的protocol…等等诸如此类  的运作机制容易流於天马行空,任意妄为。如果硬要用物件导向来实作底层机制,可  能十个人有十二种不同的见解,没人看得懂彼此的程式,因为每个人对机制的感受都  不一样,物件结构的分析各有各的看法,没完没了。  当然,不用物件导向也是可以写C++程式,但那还不如用C来的单纯  (但个人偏爱用完全无继承机制的物件架构来写C++,来当作是C的加强版) 4.C++的复杂度太高  C公认的圣经只有一本,内文也才两佰多页,一本C++的入门书就一仟多页(C++ Primer) C++的功能及其运作细节多如牛毛,写了10年的程式也许还会看到自已不懂的语法,或是 debug时发现某个平常不会注意的细节在作怪,这如果只是开发一般的AP还好,如果是开 发OS这种大型、不易物件化的程式时,事情就大条了。因为: a.开发人员太多,每人都用一种冷门的技巧,那要trace code就要买十本C++在身边才行 b.总有人喜欢卖弄技巧,喜欢来个多重继承,自行定义运算子,把程式的复杂度弄得很高  自以为很强,等到程式成长到自已无法控制(可能久了也忘了)才双手一摊说:比尔盖兹  对不起,我要去Google上班了 c.自已乖一点不要写出太复杂的程式就好了吗?不!因为C++支援太多种技巧、style,  所以有时候不得不乖乖配合别人的程式风格,想维持单一模组风格的一致性也很因难 OS不是少数几个人就能写出来的程式,一定要有不少人力来大量的分工才能完成 ,但高度的分工之後又必需维持紧密的偶合关系,是一项复杂度很高,极易失败的专案 ,如果再用一个复杂度相对较高的C++工具来写的话,就难上加难了 最後,我很好奇某人说:C++的sort大胜C的qsort,理由何在? ※ 引述《yoco315 (眠月)》之铭言: : ※ 引述《yehsd (急)》之铭言: : : [再次感谢版友 adrianshum 提醒, 我应该说的详细点] : : 和这句, 有没有矛盾点? : : [我想说的是, ctor 是空的, 还是会有 default ctor, 这点如同 adrianshum : : 所言. 如果在 instantiation 时指定了自订的 ctor, compiler 就不会去 generate : : default ctor. 所以 littleshan 所说的: constructor 是 compiler 帮你自动 : : 呼叫的指的应该是 default ctor? 因为这个 ctor 才是 compiler 会自动呼叫的, : : 希望我没误解 littleshan 所说的 ^^] : 我觉得你这个人不错, : 虽然不太懂 C++,但是会念书,也会想,以後会很强。 : 我觉得你不错, : 所以我现在愿意花时间打字讲些很基本的东西给你看, : 首先,一「空的」函数,在经过最佳化以後是不会被呼叫的, : 不管他是你自己手写的,还是编译器自动生成的都一样, : 这是非常基本非常常见非常简单的最佳化, : 也就是说你所谓那一百万次的函数呼叫成本其实不存在。 : : 这是 C++的优点, 但是也有可能是双面刃. : 你不能这样说话的, : 你得告诉我另外一面是什麽? : 不然这个句型太强大了,什麽都能套下去, : 我可以说「C 的不用初始化是一个双面刃」,或说「C 的速度是一个双面刃」, : 但是我不跟你讲原因,你会不会觉得我很笑? : C++ 出来的早,只是「建议你」初始化, : 现在新出来的语言,几乎都强迫你一定要初始化, : 你看,C++ 很卑微的。 : : 看到这边, 我只能说我可能真的没你那麽懂 C++, 小弟不才, : : 用 C++ 开发一个比 C 写出来还快的OS, 这个重责大任就交给比较懂的人罗. : 现在懂的不多没关系,你可以再多念一点, : 如果你 CPPPL 真的念得很透的话,应该不会讲出上面那些话, : 使戳使挫在书里面对 C++ 的效能提到很多了。 : 最後是跟程式无关的…… : 自己书看不够的时候,尽量少叫别人看书,感觉不太好,你知道我的意思。 : 一个人有料的时候,自己可能不会知道。 : 但是一个人没料的时候,旁边的人都看得很清楚。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.136.212.64
1F:推 milo9:老板 鸡排一份(拉板凳)...code size和memory没有人提一下 03/07 02:34
2F:→ xam:证明1就证错方向了..没抓到重点.. end 03/07 02:40
3F:推 zerodevil:『一个人没料的时候... (下略)』 03/07 02:44
4F:推 Fenikso:所以说写成add(a_man, money)就不用往前翻找定义是吧.. 03/07 02:49
5F:→ Fenikso:难维护是人的问题 扯到c++干什麽 03/07 02:49
6F:→ soma:我也不知道理由何在 但似乎有很多人测试过 03/07 02:51
8F:→ guest0079:感谢楼上,文中提到 STL's sort ran faster than C's 03/07 03:15
9F:→ guest0079:qsort, because C++'s templates generate optimized 03/07 03:15
10F:→ guest0079:code for a particular data type... 03/07 03:16
11F:→ guest0079:所以C++较快是因编译器作最佳化或是语言本身提供的好处 03/07 03:18
12F:→ guest0079:C不做最佳化是因为语言本身的限制吗? 03/07 03:19
13F:→ weiyucsie:可能一样要配合macro来写吧XD 03/07 03:58
14F:→ weiyucsie:不过刚刚想到简单的实作 code可能会像是inline一样重复 03/07 04:13
15F:→ weiyucsie:感觉至少c++可以内嵌sort中比较的部份(可能比较简单) 03/07 04:21
16F:推 suhorng:嗯,而C的qsort则是每次比较都有函式呼叫,输就输在这里 03/07 10:49
17F:→ suhorng:我不知道qsort有没有结合insertion sort,不过sort有 03/07 10:49
18F:→ suhorng:只是... 有必要用C++写作业系统吗... 如果不必要用到OO的 03/07 10:50
19F:→ suhorng:高阶特性,应该不需要用到C++ ? 03/07 10:50
20F:推 Chevelle:答案大家都知道 只是大家信的教不同而已.. 03/07 10:56
21F:推 yoco315:我想转 joke 03/07 11:28
你这句话的句型太强大了
22F:推 StubbornLin:c语言要写出看不懂的程式码也不难 使用者滥用 03/07 11:28
23F:→ StubbornLin:、恶搞 总不能全怪到语言头上吧= =| 03/07 11:29
24F:→ StubbornLin:你如果要说难懂 去看看template写的meta programming 03/07 11:30
25F:→ StubbornLin:之类的 03/07 11:30
26F:→ StubbornLin:还有C做得到C++也做得到 没理由C++效率比较差这证明.. 03/07 11:32
27F:→ StubbornLin:听起来就好像 你会吃饭 我也会吃饭 没理由我的薪水 03/07 11:32
28F:→ StubbornLin:比你低是一样的= =| 03/07 11:32
1.你说的没错,使用者滥用,不能怪到语言头上,但是如果语言提供一推方法让人滥用 要要怪到语言头上,版上的众高手不会滥用语言,所以不会觉得C++不好,我可以理解 2.C++让人看不懂,是指没办法像C一样用瞄的就可以知道在写什麽,C++存在太多种可能  性,当维护要trace code时就显得麻烦 3.我也知道编译器的好坏、编译选项、目标平台的instruction set、library的实作方式  …等等都会影响程式的效能,不过我必须强调,本文主要讲的是语言本身的特性,而非  强调C与C++的编译器及编译环境,我也知道这才是效能好坏的重点,不过我还是要把  我的命题锁定在语言本身的特性上,我文中也都是以这个命题在讨论 ※ 编辑: guest0079 来自: 220.136.212.64 (03/07 12:05)
29F:推 yoco315:老实说你讲的都是十年前早就在newgroup上面被打爆的论点 03/07 12:10
30F:→ yoco315:十几年前的java就是用这些说嘴,後来都自己打嘴了 :X 03/07 12:11
31F:→ yoco315:我没有不礼貌的意思,你跟y能写出这些东西都不错 03/07 12:12
32F:→ yoco315:只是这些论点实在过时到让人觉得怀念 03/07 12:13
33F:推 Fenikso:所以说c++不适合写os的理由是programmer太笨不会用c++ 03/07 12:18
34F:→ alishas:用没OO的语言来实作物件导向负担不是更大... 03/07 12:41
35F:推 buganini:呃 要怪就全部怪在compiler头上就好了 所有的程式语言 03/07 13:36
36F:→ buganini:都是turing equivalent 极限最佳化结果应该都一样 03/07 13:37
37F:→ buganini:所以都是compiler不好 *flee* 03/07 13:37
38F:→ tinlans:这什麽啊?我写了 13 年 C++ 你讲出来的我都没遇过。 03/07 15:11
39F:推 Ebergies:这篇明明很中肯 03/07 15:16
40F:推 H45:看到 OO 我整个火都起来了 03/07 15:54
41F:推 Bencrie:GTK用得很开心啊 XD 03/07 19:14
42F:推 alishas:可惜使用者用的不开心 03/07 20:45
44F:→ alishas:html 03/07 20:46
45F:推 amozartea:只认同3, 1,2,4都是人的问题 不是语言的问题 06/15 02:23







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP