新足迹

 找回密码
 注册

精华好帖回顾

· 蛋糕姐姐家的简易快捷家常晚餐之二,5月6日更新在第15页,烤鸡腿菇,蒸豆腐虾仁,苔条江白虾 (2012-5-1) chesecake · Gippsland与Wilsons Promontory复活节三日行 (2007-4-15) powermao
· 分享一份十分强大的翻书日志(随时添加) (2008-8-18) Tiger_Karen · 《权力游戏》之旅:克罗地亚 - 杜布罗夫尼克 (2017-1-1) garysu
Advertisement
Advertisement
查看: 4543|回复: 47

为什么现在还有很多的开源项目都在用C而不是C++来编程? [复制链接]

发表于 2013-1-23 23:47 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
按理来说,面向对象的C++的数据抽象、继承、数据封装和多态性等应该很适合开源社区里多人共同开发项目,但发现很多著名的开源项目例如Linux的内核等都是用C来写的,就连Linux的创建者Linus都说:

In fact, in Linux we did try C++ once already, back in 1992. It sucks. Trust me - writing kernel code in C++ is a BLOODY STUPID IDEA.

请问大家知道原因是什么吗?
Advertisement
Advertisement

发表于 2013-1-24 08:57 |显示全部楼层
此文章由 joerkky 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 joerkky 所有!转贴必须注明作者、出处和本声明,并保持内容完整
简单点就是数据抽象继承多态这些特点内核代码用不上。

形而上的原因是底层操作本质上是指令式的,你可以expose个object oriented的接口来调用,但是接口之下还是指令式的代码.

就像是.NET是object oriented的,但是.NET runtime library不会是用.NET代码写的一样。

评分

参与人数 2积分 +6 收起 理由
audreamer + 2 感谢分享
北风 + 4 感谢分享

查看全部评分

发表于 2013-1-24 10:08 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
joerkky 发表于 2013-1-24 08:57
简单点就是数据抽象继承多态这些特点内核代码用不上。

形而上的原因是底层操作本质上是指令式的,你可以ex ...

谢谢,如果Linux内核用不上这些数据抽象继承多态这些特点,但是对于应用层的软件,例如:Apache 和OpenLDAP 为什么也只用C而不用C++呢?

发表于 2013-1-24 10:59 |显示全部楼层
此文章由 psaux 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 psaux 所有!转贴必须注明作者、出处和本声明,并保持内容完整
audreamer 发表于 2013-1-24 10:08
谢谢,如果Linux内核用不上这些数据抽象继承多态这些特点,但是对于应用层的软件,例如:Apache 和OpenLD ...

Apache和OpenLDAP不能算是纯粹应用层的东西,他们本身80%的功能还是和底层的硬件做交互(e.g network, socket)。凡是需要和硬件进行交互的编程,OO是用不上的,也是不适合的。但是针对apache module的开发,就是应用层的东西了。

发表于 2013-1-24 11:06 |显示全部楼层
此文章由 jqleisure 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jqleisure 所有!转贴必须注明作者、出处和本声明,并保持内容完整
如果今天他们重新评估,可能会改变主意吧。 在编写大型软件上,OO 明显优于第二代语言。而且自从90年代后,c++ template metaprobleming 开始盛行,效率上也提高不少。

所以我觉得主要原因是:Legacy

发表于 2013-1-24 13:05 |显示全部楼层
此文章由 findcaiyzh 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 findcaiyzh 所有!转贴必须注明作者、出处和本声明,并保持内容完整
lz说的 "现在还有很多", 是指进两年的新软件吗?
Advertisement
Advertisement

发表于 2013-1-24 13:36 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
findcaiyzh 发表于 2013-1-24 13:05
lz说的 "现在还有很多", 是指进两年的新软件吗?

我指的是目前还是存在的,不是指新出的。如Apache,它也更新了几个版本,但是还是用C编。
头像被屏蔽

禁止发言

发表于 2013-1-24 13:38 |显示全部楼层
此文章由 一起去看海 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 一起去看海 所有!转贴必须注明作者、出处和本声明,并保持内容完整
用惯了c,c++简直是垃圾。

主要好的c程序员太少,只能退而求其次了。

发表于 2013-1-24 13:44 |显示全部楼层
此文章由 1969 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 1969 所有!转贴必须注明作者、出处和本声明,并保持内容完整
C++产生的机器代码太大,效率不高,C就好多了

退役斑竹

发表于 2013-1-24 13:50 |显示全部楼层
此文章由 大饼 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 大饼 所有!转贴必须注明作者、出处和本声明,并保持内容完整
等lz写过底层代码就知道了。
再说C++编译出来的bin也太大了,占得内存也多。

发表于 2013-1-24 17:34 |显示全部楼层
此文章由 1969 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 1969 所有!转贴必须注明作者、出处和本声明,并保持内容完整
另外再说一下,用c也可以编出很好的面向对象的程序,就是繁琐些,不过编过一次以后,有了模版以后就方便了
Advertisement
Advertisement

发表于 2013-1-24 21:07 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
1969 发表于 2013-1-24 17:34
另外再说一下,用c也可以编出很好的面向对象的程序,就是繁琐些,不过编过一次以后,有了模版以后就方便了 ...

那这样看来C++开发效率不及C#, 运行效率不如C,会不会慢慢被淘汰呢?

发表于 2013-1-25 09:52 |显示全部楼层
此文章由 1969 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 1969 所有!转贴必须注明作者、出处和本声明,并保持内容完整
audreamer 发表于 2013-1-24 20:07
那这样看来C++开发效率不及C#, 运行效率不如C,会不会慢慢被淘汰呢?

太上层的应用我不太熟,电子设备的应用层倒是适合C++的特性----比上不足,比下有余。所以,在某些领域它有被淘汰的可能,但是在某些领域应该还有生命力的
平生不修善果,只爱杀人放火
头像被屏蔽

禁止发言

发表于 2013-1-25 10:03 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
c都忘记光了
头像被屏蔽

禁止发言

发表于 2013-1-25 10:06 |显示全部楼层
此文章由 大脚印 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 大脚印 所有!转贴必须注明作者、出处和本声明,并保持内容完整
embedded,kernel多半都是c,越底层越c,根本用不着面向对象,那么低级哪来的对象啊

发表于 2013-1-25 11:16 |显示全部楼层
此文章由 findcaiyzh 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 findcaiyzh 所有!转贴必须注明作者、出处和本声明,并保持内容完整
大脚印 发表于 2013-1-25 10:06
embedded,kernel多半都是c,越底层越c,根本用不着面向对象,那么低级哪来的对象啊 ...


越往上走,还有开发效率更高的Java,C#,看来C++前途暗淡啊。
Advertisement
Advertisement

发表于 2013-1-25 14:11 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
1969 发表于 2013-1-25 09:52
太上层的应用我不太熟,电子设备的应用层倒是适合C++的特性----比上不足,比下有余。所以,在某些领域它 ...

能否举点关于在电子设备领域里,C++应用的例子吗?

发表于 2013-1-25 14:33 |显示全部楼层
此文章由 1969 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 1969 所有!转贴必须注明作者、出处和本声明,并保持内容完整
audreamer 发表于 2013-1-25 13:11
能否举点关于在电子设备领域里,C++应用的例子吗?

我知道以前手机里面的应用程序框架都是c++写的,一些PDA里的应用也是,呵呵,好像真的不多,不知道有没有人知道其它领域里面用C++的
平生不修善果,只爱杀人放火

发表于 2013-1-25 14:41 |显示全部楼层
此文章由 workinvm 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 workinvm 所有!转贴必须注明作者、出处和本声明,并保持内容完整
底层代码对性能要求高,C++ 在性能方面比 C 差很多。

发表于 2013-1-25 16:13 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
1969 发表于 2013-1-25 14:33
我知道以前手机里面的应用程序框架都是c++写的,一些PDA里的应用也是,呵呵,好像真的不多,不知道有没有 ...

现在手机开发都是Java,C#或Objective C的天下了。

发表于 2013-1-25 16:42 |显示全部楼层
此文章由 psaux 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 psaux 所有!转贴必须注明作者、出处和本声明,并保持内容完整
基于lamp stack开发环境的运营商绝大部分都用c++,skype被微软收购以前,他们的server side都是用c++写的,在某些方面c++有其他语言无法超越的优点,要说c++被淘汰,不可能的,现在市面上有哪种语言可以完全替代c++?
Advertisement
Advertisement

发表于 2013-1-25 16:49 |显示全部楼层
此文章由 opensolutionoz 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 opensolutionoz 所有!转贴必须注明作者、出处和本声明,并保持内容完整
对运行效率要求严格的东西,都用c,甚至汇编,有的核心还用机器码呢,01011101000100101

退役斑竹

发表于 2013-1-25 17:07 |显示全部楼层
此文章由 大饼 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 大饼 所有!转贴必须注明作者、出处和本声明,并保持内容完整
opensolutionoz 发表于 2013-1-25 16:49
对运行效率要求严格的东西,都用c,甚至汇编,有的核心还用机器码呢,01011101000100101 ...

agree with 前半句。
后面的机器码就是吹牛了。
专攻电子电路

发表于 2013-1-25 17:31 |显示全部楼层
此文章由 1969 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 1969 所有!转贴必须注明作者、出处和本声明,并保持内容完整
以前看过的,关于开发语言的图片,仅供参考

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

发表于 2013-1-25 17:38 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
1969 发表于 2013-1-25 17:31
以前看过的,关于开发语言的图片,仅供参考

哈哈,有意思。刚刚才发现图中有些箭头还是双向的。

发表于 2013-1-25 17:43 |显示全部楼层
此文章由 1969 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 1969 所有!转贴必须注明作者、出处和本声明,并保持内容完整
audreamer 发表于 2013-1-25 16:38
哈哈,有意思。刚刚才发现图中有些箭头还是双向的。

是,双向的两边互相不买账,其中就有c++和c#,不过我觉得ruby和最后那个html的最搞笑了
平生不修善果,只爱杀人放火
Advertisement
Advertisement

发表于 2013-1-25 20:00 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
1969 发表于 2013-1-25 17:43
是,双向的两边互相不买账,其中就有c++和c#,不过我觉得ruby和最后那个html的最搞笑了 ...

Ruby确实搞笑,居然只知道脚本语言的存在。对Ruby不太了解,有同学知道Ruby比较成功的项目吗。

发表于 2013-1-26 08:04 |显示全部楼层
此文章由 joerkky 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 joerkky 所有!转贴必须注明作者、出处和本声明,并保持内容完整
很多网站都是ROR开发的

发表于 2013-1-26 11:40 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
1969 发表于 2013-1-25 17:31
以前看过的,关于开发语言的图片,仅供参考

Java 没这么低吧?上个工作和现在的工作核心系统都是Java 做的,.net 就是开发一些边缘的应用。

发表于 2013-1-26 14:58 |显示全部楼层
此文章由 audreamer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 audreamer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Dan.and.Andy 发表于 2013-1-26 11:40
Java 没这么低吧?上个工作和现在的工作核心系统都是Java 做的,.net 就是开发一些边缘的应用。 ...

Win下C#运行效率比Java高很多吧。

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部