打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C与C 语言之争:网友观点争论精彩语录之一 , C,C ,编程语言,孟岩,刘江,云风,争论,原创,马沛, ,
1、网友fastest286:

C++ 的编译速度让我不敢使用一些大型的优质库, 例如 ACE, 非常郁闷.
现在我开始使用 D 来写程序了, 感觉不错.
目前还没有什么好的 IDE, debugger 也只有 windows 下面好点. 平时的编程倒也不需要动用太多调试器, 只是出现非法访问的时候, 有一个会方便很多。平时开发的时候, 例如编译器自带的 unittest 和 codecoverage 分析, 配合 trace/log 代码, 基本上就够用了. 只是特殊时候有些麻烦, 例如, 昨天出现一个 gc时候报非法访问, gdb无法指对地方, 折腾得比较久, 用注释代码的方法找出了问题, 原来还是 C++ 习惯带来的问题, 一个类的析构函数,想着快些释放掉相关资源, 对内部子对象调用了 close. gc 是不保证对象和子对象的调用顺序的.

现在一点就不想用回 C++ 了. 这个编译器, 在 vmware 中编译自带的类库(带网络, container, 文件, io,甚至还有一个 cluster 系统), 总共不到10秒钟, 编译我自己的程序, 1秒钟都不用.快速的编译, 加上方便的 unittest,和用 python 写程序的快速写, 快速调的感觉相象.

2、网友benjiam:

语言不是宗教。
但语音是信仰。
linus 的水平 这里没人能比得上,他对c++ 的理解水平这里也没人能比得上。在越来越花哨的。编程面前,我们不要忘记我们只是操作电子开关 开关一些电子管而已。

3、网友andy_show:

个人认为,这个世界上最好的程序员肯定不是C++程序员。
C++好比一种威力强大的武功心法,但是太容易走火入魔,坦白的说,我写了十多年的程序,但是在现实中很少见到C++写的好的程序员,一个很重要的原因是C++的丰富的特性会把人引入歧途,你会不自觉的选择复杂的设计,现实中的很多代码是许多人在学习过程中写成的,而很多人在使用这些C++的特性的时候并不明确这么使用这种武功是否合适!这样的代码可能遍布很多以C++作为开发工具的产品中。

而如果让这些程序员从一开始就用C的方式去写,可能就不会范他们用C++时所犯的错误,从这个角度而言,C语言的简单性恰恰是一种优势。C++的复杂性会使很多人误用。而C语言的简单性,一般情况下都会迫使你使用比较简单的设计,例如C语言不能在语言层次上提供类继承的方式,那么它会迫使你更多的使用组合,而不是继承这样的重用方式,即使你可以用函数指针表的方式实现多态,也不可能象C++那样把类层次扩展了一层又一层。

在c语言中,函数指针表的在c语言中以更接近于定义接口的方式被使用。这些都是C语言的简单性迫使你做出的选择。而很多C++的程序员却在C++的丰富的特性前面忘了简单性原则的重要性。


4、网友middle:

C用来实现封装性很简单。比较难以用C直接实现的是继承和多态。不过在现实中继承和多态真的是可以用的少之又少的。很多所谓的继承和多态的“设计”完全可以用基于策略的方式来完成。基于策略的方式在C里用函数指针或者表驱动完全可以做到。

很多不得不用C++高级特性的“设计”,其实从一开始就使用Java甚至script更容易做到。OO并不是模块化和可维护性的唯一可行方式,甚至不是最优的方式。而C++的OO实现也不是很好的实现。

5、网友junhao:

C是精炼的,C++是灵活的,但也是让人头疼的,自己取舍吧。

6、网友lioqio:

个人编程感受:
1、在操作系统底层一般是不会使用C++语言的,最简单的例子是一个内核程序在得到一个自旋锁后调用C++语言的一些特征语句,由于封装,其内部存在内存分配(假设已经将new/delete重载到内核内存分配函数上去),这可能导致进入睡眠,后果可想而知,这在操作系统中是绝对不允许的。

2、在操作系统上层是可以用C++的,比如windows使用的Kernelstreaming,个人感觉远比Linux的V4L2漂亮多了。以及在OS/X的IO/Kit(ObjectC)和window的KMDF等内核驱动开发框架,使得驱动开发非常简便。(顺便说一下,从这点来看,是linux在学windows,windows在学apple:)

3、对于应用开发,如果规模大一些的本地软件开发,同时对性能又有较高的要求,那么请使用C++吧。因为C++在语言级别和库上边可以较大的提高开发效率,也有很好的可扩展性。C++比C有更多的花样可以往。

4、但说到底,我们一般用C++的特性,C完全都可以自己做。

7、网友psusong:

用C设计接口,用C++来实现,例子就是Windows里使用的标准DLL,我们一般这样做:DLL里提供一个NewInstance的接口,返回一个实例句柄,其他的接口函数的第一个参数都是一个实例句柄,另外还有一个DeleteInstance的接口函数,这样接口也能支持多实例。我也是这样做的,这样自己代码写起来爽,别人用起来也爽。

网友反对观点论

1、网友pass86:

C++机制很多,强大在于此。
面向对象
变相过程
基于对象
泛型编程

2、网友duyanning:

也太搞笑了吧,总拿全功能的std::string跟几乎啥也不能干的char*作比较,谁规定你只要用C++处理字符串就得用std::string了?
拜托,如果你的需求很单纯,如果你又很在意效率,你完全可以不用全能的std::string,std::string的存在并不能作为妨碍你创造适合你需要的your::string从而提升抽象层次的借口。

Torvalds理糙人更糙,我彻底失望了。

应当搞清楚,作为操作系统内核级的开发者,在不清楚自己所用的std::string实现都在背后做了些什么的情况下就敢用,这是他自己素质的问题,而不是他所用std::string实现的问题。如果不清楚std::string是怎样实现的,而std::string的行为对于你的程序又很关键的话,就请去调查,去弄清楚,然后选择要不要用,而不是抱怨std::string背着你如何如何。

假如他选择的不是C++的std::string而是某个用C写的字符串函数包,那他是不是也要因为不清楚这个字符串函数包的具体实现而要对“一切抽象及复用”进行否定呢?

Torvalds仅仅是在敌视C++吗?
他已经把他自己放在一切计算最根本的“抽象”的对立面上了。Torvalds长期以来对于C++和C++用户的侮辱让他看起来更像是个小丑。

3、网友1073X:

做系统软件开发的时候,重要的是理解系统的运作方式,那些漂亮的抽象手法和高级特性是次要的。这是怎么说的?软件本来就是一层一层又一层的,要在何种层次上开发,就应该在何种层次上理解。因为没有理解下层而不放心上层是完美主义者的心理障碍。

OO又不是只有抽象,C++比C明显的优势就是更合理的数据封装。不如说Torvalds对OO还没有入门。

4、网友fish6344

大家不必在意别人对C++语言的敌意!听听java、Delphi及C#等语言的发明者们的声音,无一不是在大谈他们的东东的好处,而C++是这也不好那也不好。但他们在自诩自已的语言效率极佳的时候,无一不拿C++作为参照(声称等同甚至超过C++)!

他们总用自已偏爱的语言的优点(未必是优点)去攻击C ++的缺点(也未必就是缺点),这其实说明他们在潜意识上已视C++为开发工具的标准,这点很象中国古时候那个卖矛和盾的人!即使是LinusTorvalds对C++的异议,我认为异议的实质也是他对OOP以及使用C++而滥用继承的人的不满,对C++语言的攻击反而略显苍白。

科学领域本身就是百家争鸣的世界,语言激烈点也未尝不可。但我觉得每一种语言都应该被我们所尊重。各种语言的存在,自然有其存在的理由。软件工程界至今,还没有哪一种语言可以堪称完美,没有哪一种语言万能,这是不争的事实!

C++在今天,的确今非昔比,但这并不是因为C++不够好、不如其它语言,主要原因是今天的电算环境和C++诞生时相比,发生了巨大的变化。互联网兴盛,硬件性能提升而价格下降等等因素导至java应运而生。C++作为一个80年代诞生的静态语言,加上它赋预使用者太多的权力(权力可是双刃剑啊!)、标准的约束性以及C++的教育状况,有今天的境况是完全自然的。

所以大家不必在意世人对C++的非议,我可以作这样的比喻:如果你想作一个原始社会的部落首领,请用汇编;如果你想当一个封建君主,请用C;如果你想作一个开明伟大的国家元首(当然你必须有超凡的驾驭权力的能力!),可以使用C++,如果想当大臣,知府什么的,那会有更多的选择...... 

我永远爱你-C++!
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
为什么时不时会看到「珍惜生命,远离 C 」?
「如何系统地学习 C 语言」从开发环境到C 进阶,应该怎么办?
Bill Gates 和 Linus Torvalds 同时推崇的编程语言,不可复制的经典
Linus Torvalds 的 C++ 水平如何,为什么他敢炮轰此编程语言?
folly学习心得
应用于windows的编程语言推荐
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服