【问题标题】:What languages are Windows, Mac OS X and Linux written in?Windows、Mac OS X 和 Linux 是用什么语言编写的?
【发布时间】:2010-10-09 11:31:37
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: windows linux macos programming-languages operating-system


【解决方案1】:
  • Windows:C++,内核在 C 中
  • Mac:Objective C,内核在 C 中(IO PnP 子系统是嵌入式 C++)
  • Linux:大多数东西都用 C 语言编写,许多用户级应用程序使用 Python 编写,KDE 全部使用 C++

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

【讨论】:

  • 我应该补充一点,Gnome 也几乎是 C。
  • Gnome 也喜欢使用 C# (Mono)。
  • 我相信linux内核也有汇编器。
  • 没错,每个内核都至少有一些汇编器
  • 为了让事情一目了然——Apple 内核的 IOKit 子系统(用于驱动程序)使用(受限子集)C++。在所有这 3 个方面,即 Windows、Mac 和 Linux,许多最重要的用户级应用程序都是用 C 或 C++ 编写的。据称,例如,MS 试图在 .NET 中重做 Office,但又回到了 C++。并且 linux 内核使用了许多类似 C++ 的习语,但都是用 C 手工制作的,例如驱动程序代码中的继承。
【解决方案2】:

Linux:C. 组装中的某些部分。

[...] 它主要是用 C 语言编写的,但大多数人不会把我写的东西称为 C。 它使用了我能找到的 386 的所有可能的功能,因为它是 也是一个教我有关 386 的项目。如前所述,它 使用 MMU 进行分页(尚未到磁盘)和分段。它是 使其真正依赖 386 的分段(每个任务都有一个 用于代码和数据的 64Mb 段 - 4Gb 中最多 64 个任务。任何需要的人 超过 64Mb/任务 - 坚韧的 cookie)。 [...] 我的一些“C”文件 (特别是 mm.c)几乎和 C 一样多的汇编程序。 [...] 不像 minix,我也碰巧LIKE中断,所以处理中断 没有试图隐藏他们背后的原因。 (Source)

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

Mac OS X,在内核层,主要是一个旧的、免费的操作系统,称为 BSD(具体来说,它是 Darwin,一种 BSD、Mach 和其他一些东西的混合体)......几乎完全是 C,加入了一些汇编程序。(Source)

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

Windows:C、C++、C#。汇编器中的一些部分。

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

Unix: C. 组装中的某些部分。 (Source)

【讨论】:

  • Darwin (IOKit) 中的驱动子系统严重依赖于用 C++ 子集编写的类 COM 对象模型。
  • @Tahlor 是的。当 VB 甚至没有用于位移的运算符时,你怎么能在 VB 中编写像内核这样的低级东西呢? This is what Raymond Chen said。 Windows 应用不同
【解决方案3】:

Mac OS X 在一些库中使用了大量的 C++,但由于害怕 ABI 破坏而没有公开。

【讨论】:

  • 什么?无论如何,有一半的程序在每个新版本上都停止工作。
  • 您能否为“Mac OS X 在某些库中使用大量C++” 声明提供某种引用?我只是觉得很难相信你的话!很抱歉我持怀疑态度。
  • @AnishRamaswamy 查看IOKitWebKitGLKit。还可以浏览dyld。这些都是非常重的 C++。
  • 我确定 OSX 内核是 C 而不是 C++,事实上我遇到的所有操作系统都有 C 内核
【解决方案4】:

我知道这是一篇旧文章,但 Windows 绝对不是用 C++ 编写的。其中有很多 C++,但我们技术上定义为操作系统的东西不在 C++ 中。 Windows API、Windows 内核(这两者本质上都是操作系统)是用 C 语言编写的。几年前,我收到了一些 Windows 2000 和 Windows XP 的泄露代码。代码还不够完整,无法编译内核或 API,但我们能够编译单个程序和服务。例如,我们能够成功编译 Notepad.exe、mspaint.exe 和 spoolsv.exe 服务(打印后台处理程序)。全部用 C 编写。我没有再看,但我确信泄漏的代码仍然存在,因为那里可能仍然可用的 torrent 文件。

【讨论】:

    【解决方案5】:

    哇!!! 9 年的问题,但我刚刚在 Windows 命令行历史上遇到了一系列内部article,我认为其中的某些部分可能与问题的 Windows 相关:

    对于那些关心这些事情的人:很多人问 Windows 是用 C 还是 C++ 编写的。答案是——尽管 NT 采用基于对象的设计——就像大多数操作系统一样,Windows 几乎完全是用“C”编写的。为什么? C++ 在内存占用和代码执行开销方面引入了成本。即使在今天,用 C++ 编写的代码的隐藏成本也令人惊讶,但在 1990 年代后期,当内存成本约为 60 美元/MB(是的……每 MEGABYTE 60 美元!)时,隐藏的内存成本vtables 等很重要。此外,虚拟方法调用间接和对象取消引用的成本可能会在当时对 C++ 代码造成非常显着的性能和规模损失。虽然仍然需要小心,但现代计算机上的现代 C++ 的性能开销已经不是什么大问题了,考虑到它的安全性、可读性和可维护性的好处,这通常是一个可以接受的权衡……这就是为什么我们将控制台的代码稳步升级到现代 C++。

    【讨论】:

      【解决方案6】:

      Windows:主要是 C 和 C++,部分是 C#

      【讨论】:

      • .NET 随 Windows 一起提供。很多 .NET 都是用 C# 编写的。
      • 有传言称,Windows 的未来版本(可能是 Windows 8)将部分 C++ 代码替换为 C#/.NET。
      • 他们已经(几乎)完全用 C# 管理了一个工作操作系统。这叫奇点。 research.microsoft.com/en-us/projects/singularity
      • Luc M:是的,Windows 中有 C# 代码。到处走走,你会找到的。 .Net 随操作系统一起提供,但这并不意味着操作系统是使用 .Net 编写的。 Windows 不是奇点。研究原型和实际操作系统之间存在巨大差异。
      • @1800Information - C# 从那里编译为机器代码 JIT 在运行时编译为机器代码?我认为你是一个困惑的人。有字节码,有虚拟机:en.wikipedia.org/wiki/Common_Intermediate_Language
      【解决方案7】:
      • Windows:C++
      • linux:C
      • mac:目标 C
      • 机器人:JAVA、C、C++
      • Solaris:C、C++
      • iOS 7:Objective-C、Swift、C、C++

      【讨论】:

      • Android 是用 Java 编写的?真的吗?
      • 安卓:Java (UI)。来源:en.wikipedia.org/wiki/Android_(operating_system)
      • 讨论的是操作系统。没有系统编程语言就无法构建操作系统。用 Java 做系统编程是不可能的。
      • 是的。系统的某些部分可以用 Java 构建,并且一些示例已经存在,例如 JavaOS,尽管它并不成功。我并不是说你可以用 100% java 构建操作系统。
      • @JamRisser Android 使用 C 语言的 Linux 内核。该系统几乎直到最深层都是用 Java 编写的。 Dalvik VM 是 Google 编写的 Java 虚拟机,使用 C 或 C++ 编写。
      【解决方案8】:

      你说得对,MacOSX 的核心是 Objective-C。

      Windows C++

      Linux C

      关于脚本语言,不,它们非常高级。

      【讨论】:

      • C 中的 Windows:内核、驱动程序、API。我猜只有 C++ 中的系统应用程序和工具。所以更清楚地说只是 C
      【解决方案9】:

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

      【讨论】:

        【解决方案10】:

        我已经阅读或听说过 Mac OS X 主要是用 Objective-C 编写的,其中一些较低级别的部分,例如内核,以及用 C 编写的硬件设备驱动程序。我相信 Apple “吃掉了它的自己的狗粮”,这意味着他们使用自己的Xcode Developer Tools 编写 Mac OS X。 GCC(GNU Compiler Collection) compiler-linker 是 xCode 用于大部分编译和/或链接可执行文件的 unix 命令行工具。在其他可能的语言中,我知道 GCC 可以编译来自 C、Objective-C、C++ 和 Objective-C++ 语言的源代码。

        【讨论】:

          【解决方案11】:

          作为对 Mac OS X 核心的补充,Finder 在 Snow Leopard 之前并未使用 Objective-C 编写。在 Snow Leopard 中,它是用 Cocoa、Objective-C 编写的

          【讨论】:

            【解决方案12】:

            查看标题One Operating System Running On Multiple Platforms 下的说明:

            Most of the source code for Windows NT is written in C or C++.
            

            【讨论】:

              【解决方案13】:

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

              只要看看 Windows 的源代码,你就会明白……

              【讨论】:

              • “只需查看 Windows 的源代码”,如果您是少数允许/能够这样做的人之一...
              • Torrents中有很多Windows源代码部分,也有一些评论
              【解决方案14】:

              Windows c++ 10% C# Perl Linux C MAC 目标 c 安卓 Java C++ Solaris c c++

              希望你能得到答案。

              【讨论】:

                猜你喜欢
                • 2015-09-23
                • 2023-04-08
                • 1970-01-01
                • 1970-01-01
                • 2012-01-20
                • 1970-01-01
                • 2011-02-14
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多