Unix是用C还是C++编写的,还是两者兼而有之?

Kni*_*ott 6 c c++ unix

Unix中的许多系统调用都使用重载和默认变量.这个概念在C中不存在,所以Unix用C++编码也对吗?

mct*_*ylr 16

Unix最初是在1969年在贝尔实验室创建的,远在C++构思之前.(Src:Unix),您可以通过阅读Unix上的狮子会评论BSD 4.4-Lite(类似于BSD Net/2)来确认这一点,这可以通过tarballcvs(来自FreeBSD)获得.或者来自The Unix Heritage Society的档案,它来自非常古老的贝尔实验室/ AT&T版本.

根据C++的历史, Bjarne Stroustrup在大约1983年创建了C++,之后他就开始研究" C with Classes " .从Bjarne Stroustrup的常见问题解答中确认,C with Classes的最早日期是1979年.

我希望这澄清了Unix基于C++的想法的不可能性.请注意,自20世纪60年代以来,面向对象语言已经出现在Simula 67中,所以不要将对象和类与C++混淆.

  • 是的,差不多.最初的Unix是在8千瓦的PDP-7上用PDP-7组装编写的(1968-9).当贝尔在1970年购买PDP-11/20时,Unix被移植到PDP-11组件中,后来Unix在1973年被重写为C,同时仍在PDP-11上.Src:Dennis Ritchie http://cm.bell-labs.com/cm/cs/who/dmr/chist.html (4认同)
  • 实际上,UNIX是在1969年创建的,甚至是C(1972年)构思的.根据维基百科,原始的UNIX是用PDP-11/20汇编语言编写的,然后在1973年用C语言重写. (2认同)

Dig*_*oss 12

几乎是直的C一直向下......

Unix的所有主要版本都使用完全直接的C作为内核.(嗯,Mac OS X在一个界面中有一点C++.)

如果不计算桌面层,那么除了少数例外,核心库和实用程序也在C中.我能想到的唯一核心实用程序是用C++编写的groff.

现在,有了套餐,这是一个不同的故事......

  • 为了澄清,Mac OS X中的C++仅适用于设备驱动程序接口IOKit.Mach和BSD层是直的C. (2认同)

Bob*_*phy 5

当你谈论Unix-y操作系统的内核,如Linux,Solaris,Mac OS X,NetBSD,FreeBSD等时 - 它们通常都是C.而且我也不确定你的意思是重载或默认变量 - 当然不在内核调用中.

当DigitalRoss说Mac OS X在内核源代码中有Objective C时,我感到很惊讶,所以我下载了Darwin xnu内核源码的MacOS X 10.6.2版本,实际上,没有Objective C.但是,我有点震惊发现一点点C++.

无论如何,许多"用户空间"(非内核)程序依赖的东西,如虚拟内存,异常处理,设备I/O等,都是由内核完成的.但是内核不能用于那些东西,就像你不能用双手拿起你的鞋子一样抬起自己.

像C++和Objective C这样的面向对象语言广泛使用了内核无法为自己做的事情.这就是为什么内核主要是用C编写的.就我在xnu源代码中看到的C++而言,我确信它是非常非常谨慎地编写的,以避免在内核中做不安全的事情.

至于用C和C++编写的用户空间程序,我认为它主要是传统,个人偏好以及人们习惯的东西.作为一个精通两种语言的人,我认为这本身就很愚蠢.