Windows,Mac OS X和Linux用什么语言编写?


273

我只是想知道谁知道构成Windows,Mac OS X和Linux的编程语言以及操作系统的每个部分使用的语言(即:内核,插件体系结构,GUI组件等)。

我假设每种语言都有多种语言,显然我知道Linux内核是用C编写的。

我在这里完全猜测Mac OS X包含很多Objective-C代码,因为它是Apple的NeXT派生的语言。

Windows,我听说包含C,C ++和Intel Assembly。Linux或Mac OS是否包含任何汇编代码?

另外,操作系统开发人员是否使用诸如Ruby,Python等脚本语言来编写操作系统的某些部分的脚本?操作系统的哪些部分将用每种语言编写?



这样的SO交流可能有助于回答问题的最后一部分。
Bikramjeet Singh,

Answers:


269
  • Windows:C ++,内核位于C中
  • Mac:Objective C,内核在C中(IO PnP子系统是Embedded C ++)
  • Linux:大多数事情都在C中,许多userland应用程序都在Python中,KDE都是C ++

所有内核也将使用一些汇编代码。


13
我应该补充一点,Gnome也几乎是C。
内森·奥斯曼

17
侏儒还调情了C#(单声道)。
赫里斯托·伊利耶夫

6
我相信linux内核也有汇编程序。
GL2014 2013年

9
的确,每个内核都至少会有一些汇编程序
Ana Betts 2013年

4
为了使事情变得清晰起来,Apple内核的IOKit子系统(用于驱动程序)使用了C ++(的有限子集)。在Windows,Mac和Linux这3种平台上,许多最重要的用户环境应用程序都是用C或C ++编写的。据说,例如,MS尝试在.NET中重做Office,但又回到了C ++。而linux内核使用许多类似C ++的习惯用法,但都是用C手工编写的,例如驱动程序代码中的继承。
ErikAlapää2015年

94

Linux:C.组装中的某些零件。

[...]主要用C语言编写,但是大多数人不会称呼我写C语言。它使用了我能找到的386的所有可能的功能,因为它也是一个向我教授386的项目。 ,它使用MMU进行分页(尚未到磁盘)和分段。正是这种细分使其真正依赖386(每个任务都有一个64Mb的代码和数据段-4Gb中最多64个任务。任何需要超过64Mb /任务的人-坚韧的cookie)。[...]我的一些“ C”文件(特别是mm.c)几乎与C一样多。…与minix不同,我也碰巧喜欢中断,因此在处理中断时不会试图隐藏他们背后的原因。(资源)

Mac OS X:Cocoa主要用于Objective-C。用C编写的内核,某些部分在汇编中。

Mac OS X在内核层主要是一个较旧的免费操作系统,称为BSD(特别是Darwin,是BSD,Mach和其他一些东西的混合体)...几乎完全是C,有点的汇编程序抛出。(源)

Cocoa的大部分内容都是在Objective-C中实现的,Objective-C是一种面向对象的语言,经过编译可以以惊人的速度运行,但采用了真正的动态运行时环境,使其具有独特的灵活性。因为Objective-C是C的超集,所以很容易将C甚至C ++混合到您的Cocoa应用程序中。 (资源)

Windows:C,C ++,C#。汇编器中的某些零件。

对于Windows,我们几乎完全使用C,C ++和C#。一些代码区域是手工调整的/手写的汇编。(资源)

Unix:C.组装中的某些零件。(资源)


3
达尔文(IOKit)中的驱动程序子系统在很大程度上依赖于用C ++子集编写的类似于COM的对象模型。
赫里斯托·伊利耶夫

@Tahlor是的。当它甚至没有用于移位的运算符时,如何在VB中编写像内核这样的低级东西?这就是雷蒙德·陈所说的。Windows应用程序有所不同
phuclv

15

Mac OS X在某些库中使用了大量的C ++,但由于担心ABI会被破坏,因此并未公开。


13
什么?无论如何,有一半程序会停止在每个新发行版上运行。
kinokijuf

7
您能否为“ Mac OS X在某些库中使用大量C ++”语句提供某种引用?我很难接受您的要求!抱歉,我对此表示怀疑。
2014年

5
@AnishRamaswamy看到IOKitWebKitGLKit。也可以一窥dyld。这些都是C ++繁重的工作。
Maxthon Chan

1
我确定OSX内核是C而不是C ++,实际上我遇到的所有操作系统都有C内核
twigg 2015年

10

我知道这是一篇老文章,但是Windows绝对不是用C ++编写的。其中包含许多C ++,但是我们技术上定义为操作系统的不是C ++。Windows API,Windows内核(本质上都是操作系统)都是用C编写的。几年前,我得到了一些泄漏的Windows 2000和Windows XP代码。该代码还不够完善,无法编译内核或API,但是我们能够编译各个程序和服务。例如,我们能够成功编译Notepad.exe,mspaint.exe和spoolsv.exe服务(打印后台处理程序)。所有内容都是用C编写的。我再也没有看过,但是我确信泄漏的代码仍然可以幸存,因为那里仍然可以使用torrent文件。


9

Windows:主要是C和C ++,有些是C#


1
.NET随Win​​dows一起提供。C#中有很多.NET。
乔纳森·帕克

有传言称,Windows的未来版本(可能是Windows 8)将用C#/。NET替换一些C ++代码。
乔纳森·帕克

他们已经用C#完全(几乎)管理了一个有效的OS。这叫做奇点。research.microsoft.com/en-us/projects/singularity
Randolpho

Luc M:是的,Windows中有C#代码。戳一戳,您会发现它。.Net随操作系统一起提供,但这并不意味着该操作系统是使用.Net编写的。Windows不是奇异之处。研究原型与实际操作系统之间存在巨大差异。
恢复莫妮卡·拉里·奥斯特曼

2
@ 1800Information-C#在运行时从那里将JIT编译为机器代码?我认为你是一个困惑的人。有字节码,有虚拟机:en.wikipedia.org/wiki/Common_Intermediate_Language
Brock Woolf

9
  • Windows:C ++
  • Linux:C
  • mac:目标C
  • android:JAVA,C,C ++
  • Solaris:C,C ++
  • iOS 7:Objective-C,Swift,C,C ++

Android用Java编写?真?
nirvanaswap '16


3
讨论是关于操作系统的。没有系统编程语言就无法构建操作系统。用Java进行系统编程是不可能的。
Jam Risser '02

嗯 系统的某些部分可以用Java构建,尽管JavaOS并不成功,但已经有一些示例,例如JavaOS。我并不是说您可以使用100%java构建操作系统。
Shukant Pal

2
@JamRisser Android使用Linux内核,该内核使用C语言编写。该系统几乎用Java编写,直到最深层次。Dalvik VM(由Google编写的Java虚拟机)使用C或C ++。
peterh-恢复莫妮卡

7

哇!!!9年的问题,但我刚刚遇到了一系列有关Windows命令行历史的内部文章,我认为其中一部分可能与问题的Windows方面有关:

对于那些关心此类事情的人:许多人问Windows是用C还是C ++编写的。答案是-尽管NT是基于对象的设计-像大多数OS一样,Windows几乎完全是用C编写的。为什么?C ++在内存占用量和代码执行开销方面带来了成本。即使在今天,用C ++编写的代码的隐藏成本也可能令人惊讶,但在1990年代后期,内存成本约为60美元/ MB(是的……每个MEGABYTE为60美元),vtables等的隐藏内存成本非常高。此外,虚拟方法调用间接和对象取消引用的成本可能会导致当时C ++代码的性能和规模上的巨大损失。尽管仍然需要谨慎,但是现代C ++在现代计算机上的性能开销却很少受到关注,并且考虑到其安全性,可读性和可维护性优势,通常是可以接受的折衷……这就是为什么我们稳定地将控制台的代码升级到现代C ++。


6

没错,MacOSX的核心是Objective-C。

Windows C ++

Linux C

关于脚本语言,不,它们相当高级。


7
Windows in C:内核,驱动程序,API。我猜只有C ++中的系统应用程序和工具。所以说C
abatishchev

5

我已经读过或听说过,Mac OS X主要是用Objective-C编写的,其中包括一些较低级的部分,例如用C编写的内核和硬件设备驱动程序。我相信Apple“吃了自己的狗粮”,表示他们使用自己的Xcode开发人员工具编写Mac OSX 。的(GNU编译器集合)GCC编译器-连接基是unix命令行工具xcode的用于大多数其编译和/或可执行程序的链接。在其他可能的语言中,我知道GCC可以从C,Objective-C,C ++和Objective-C ++语言编译源代码。


4

Linux内核主要是用C语言编写的(我想像是一些汇编语言),但是一些重要的用户空间实用程序(程序)是用Bash脚本语言编写的Shell脚本。除此之外,要定义“ Linux”有点困难,因为您基本上是通过选择所需的点点滴滴并将它们放在一起来构建Linux系统的,并且根据单个Linux用户的需求,您几乎可以使用任何语言。(正如Paul所说,Python和C ++发挥着重要作用)


3

作为Mac OS X核心的补充,Finder在Snow Leopard之前还没有用Objective-C编写。在《雪豹》中,它是用可可,Objective-C编写的



1

Windows显然不是用C#编写的(!)

只需查看Windows的源代码,您就会看到...


36
如果您是允许/能够执行此操作的少数人之一,则“仅查看Windows的源代码” ...
Joachim Sauer

1
Torrents中有很多Windows源代码部分,也有一些评论
abatishchev,2009年

4
多年前,部分Windows代码已经泄漏出去。例如,参见以下旧线程:< kuro5hin.org/story/2004/2/15/71552/7795 >。:)
放松
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.