【问题标题】:Which language would you use in your OS?你会在你的操作系统中使用哪种语言?
【发布时间】:2010-11-02 07:52:28
【问题描述】:

这可能是一个更主观的问题,但是如果您编写自己的操作系统,您会使用哪种语言(不是 .NET 或 JDK 等 API)?哪种语言提供了灵活性、简单性,并可能提供硬件的低级接口?我在考虑 Java 或 C...

【问题讨论】:

  • Java 如何为您提供硬件的低级接口?
  • 只有少数几个我能想到用 Java 编码的操作系统的实例。有些嵌入式系统的硬件/软件可以像某些蓝光播放器一样引导 JVM。
  • 有多种 ARM 内核(ARM7TDMI 就是其中之一,IIRC),其中包括硬件中的 Java 字节码引擎的一部分。使用它需要软件支持,显然需要某个未知方的许可才能查看文档,因为 ARM 文档只说它存在。但是,在本机 ARM 指令中仍然有中断处理程序。
  • “Java 如何为您提供硬件的低级接口?” Java 本机接口。你可以用 Java 编写 99% 的操作系统,用低级语言编写 1%。
  • Java 是否为它设计并不重要。它有能力。

标签: programming-languages operating-system


【解决方案1】:

当然是C。

【讨论】:

  • 旁白:太有趣了,每当人们对答案投反对票时,我就会失去 2 个声望点。到目前为止,有 15 个赞成票和 5 个反对票左右,尚不清楚 SO 算法是如何工作的。但这个答案让我获得了荣誉徽章:很好的答案......非常酷。
  • 另外,请注意“C,当然”是比“绝对... C”更好的语言
  • 不是最高级别的......我会在 C 之上使用更强大的语言......但它有效!
  • C 是目前唯一适合生产操作系统内核的选择,尽管 D 也可能工作。
【解决方案2】:

哈斯克尔。

一旦你翻转了正确的硬件位,C 语言对于操作系统的其余部分来说是一种糟糕的语言。调度程序、文件系统、驱动程序等是复杂的高级算法,您不希望用汇编语言(或 C;同样的东西)编写它们。做对太难了。 (VM 子系统和内存管理器可能需要用低级编写,因为您需要以某种方式引导高级语言的运行时。)

无论如何,这不仅仅是我为 SO 提出的一个疯狂的想法。这是一个用 Haskell 编写的操作系统:http://programatica.cs.pdx.edu/House/

Lisp 是另一个不错的选择;与 UNIX 和 Windows 等“现代”操作系统相比,最初的 Lisp 机器(在运行时)具有无限的可调整性。

有时历史会忘记好的想法(通常以“最大性能”的名义),这让我很难过。

【讨论】:

  • Haskell 操作系统将比我们现在拥有的任何操作系统都快,因为语义不会像 C 语言那样在边界之间丢失。
【解决方案3】:

D 将是一个有趣的选择。从它自己的描述来看:

D 是一种系统编程语言。它的重点是将 C 和 C++ 的强大功能和高性能与 Ruby 和 Python 等现代语言的程序员生产力相结合。特别关注质量保证、文档、管理、可移植性和可靠性的需求。

D 运行时假定存在垃圾收集器,这不适用于内核的最低级别。但是,它适用于许多较高层。

【讨论】:

  • D 也有内联汇编,不是吗?
  • 实际上我上次听说 ldc,一个开源的 D 实现允许你禁用垃圾收集器。查看XOmB
【解决方案4】:

使用 Assembly 构建基本组件,如任务调度程序和驱动程序等,然后使用 C

构建更高级别的组件,如应用程序和工具

我相信这也是Windows XP 的构建方式(不确定Windows VistaWindows 7)。

【讨论】:

    【解决方案5】:

    绝对... C

    【讨论】:

      【解决方案6】:

      C、ASM、C#

      Singularity

      【讨论】:

      • 不一定。像 C 这样的低级语言将能够加载所需的库和服务来执行像 C# 这样的高级语言。它有点像 JVM,但它是内置的。
      【解决方案7】:
      • 低级,例如 HaskellD。在我看来,生产力高于性能。如果需要,您可以在 C++ 中重写慢速部分,甚至在以后进行汇编。
      • PythonRuby 中的高级。理想情况下,我还会为该语言提供一个非常快速的支持 JIT 的 VM,但这暂时不会发生在这两种语言中。如果速度不快,Lua 将是一个不错的选择。

      【讨论】:

      • Haskell 并不完全是低级
      • 额,够低级了。就像我说的,生产力高于性能。
      • 如果你没有感到疼痛,那你就做错了!哈哈典型的程序员。
      【解决方案8】:

      内核必须用低级语言编写,C 是目前最好的选择,因为它非常节省内存。更高级别可以使用 Java 或更理想的 Objective-C 和脚本语言(如 python 和 ruby​​ 或 lua)的组合来构建。

      【讨论】:

      • 内核“必须”是C?为什么?有许多高级语言可以编译为本机代码。
      • 必须足够低级才能直接与内存接口,我认为 C 是最好的选择。不需要直接与硬件交互并且对速度/内存不重要的所有内容都可以用更高级别的语言编写。
      【解决方案9】:

      老实说,我要么使用 C 语言,要么使用我自己设计或完全无缝地组合在一起的某些层次结构的语言。我要寻找的是从裸机级别开始的无缝体验,然后随着我向上移动问题空间,我可以转向更高级别的语言。我可能会选择类似:

      • C - 用于裸机,如驱动程序、内核等
      • Java/C# - 用于应用程序级的东西,例如管理控制台、操作系统应用程序
      • Python/PowerShell - 用于编写脚本活动,例如常见的管理任务(创建新用户等)

      就我个人而言,我认为 C/C#/PowerShell 的集成度更高,并且是我正在寻找的体验类型。当然,如果我如此雄心勃勃地写了一个操作系统,我手头就会有很多空闲时间,并且可能真的很喜欢首先处理语言堆栈。所以也许它会是 L/L#/LScript ...

      【讨论】:

        【解决方案10】:

        BitC 似乎有这个想法。尽管它的名字它似乎是汇编语言和 lisp 的中点。目标是使语言与机器语言具有很强的对应关系,但具有支持比大多数其他常见语言更强大的正确性推断的中间表示。这些语言是作为 Coyotos 项目的一部分创建的,该项目是一个具有安全性和可靠性的崇高目标的操作系统。使用在 BitC 中使用的 ir 可以极大地进行形式验证。

        【讨论】:

          【解决方案11】:

          Ada:

          Ada 是一种结构化、静态类型、命令式和面向对象的高级计算机编程语言,从 Pascal 和其他语言扩展而来。它最初由 CII Honeywell Bull 的 Jean Ichbiah 领导的团队设计,该团队在 1977 年至 1983 年间与美国国防部 (DoD) 签订合同,以取代当时国防部使用的数百种编程语言。 Ada 是强类型的,编译器在关键任务应用程序(例如航空电子软件)中的可靠性经过验证。

          Ada,因为它不仅是专门为此类项目开发的,而且还支持标准 C 中根本不具备的几个非常有用的高级特性(例如支持强类型、并发和抽象)。

          因此,即使随着项目的发展,您也不必解决语言限制(想想 C 中的封装、抽象、命名空间)。

          别误会,C 显然适用于很多项目,但是一旦项目获得一定规模(想想 Linux 内核、gcc、GNOME),您将不可避免地欣赏更高级语言的某些特性使开发过程不那么繁琐,也少了混淆。

          然而,在 C 语言中,这些特性通常会被过度且几乎不正当地使用预处理器(例如可以在 gcc 代码库中看到)模拟得非常糟糕,因此您可以看到很多嵌套宏,从实现的角度来看,实际上模拟了其他编程语言中的功能。

          此外,据我所知,Ada 是唯一一种实际上为使用ASIS 的源代码分析提供标准化支持的编程语言,但拥有这样的设施是实际能够维护的先决条件并从长远来看转换/重新设计代码库(考虑重构)。

          拥有像 ASIS 这样的接口,意味着您实际上可以实现“语义修补”,您可以在其中自动重命名文件、函数或变量/数据结构,并且它确实可以工作。

          【讨论】:

          • 大声笑你去我的大学吗?
          • 人们经常忘记的一点是,与 Ada 相比,C 对低级编程的所谓支持相形见绌。此外,根据打算编写的操作系统类型,考虑使用正式定义的 Ada 子集 SPARK 可能是谨慎的。
          【解决方案12】:

          Java ??没有在需要操作系统的虚拟机上运行 jave, 也许是 C 和一些 ASM ;)

          【讨论】:

          • 可以将java编译为本机代码。看看 gcj 。您可以使用 JNI 连接到较低级别的操作。
          • 我不知道 :) thx 的信息,但仍然不认为 java 是一个好主意 :)
          【解决方案13】:

          我会和D一起去看看它是否可以做到。

          【讨论】:

            【解决方案14】:

            出于实用性,我只会选择以下 3 个。

            • C(老式)
            • C++(C 加上一些东西。Windows 部分用它编写)
            • Java(中等级别的语言,它可能具有功能强大的垃圾收集器,可通过 G1 控制暂停)。

            【讨论】:

              【解决方案15】:

              如果我要启动一个新的操作系统,我会使用嵌入式行业推荐的 C++ 子集。您可以使用类之类的东西,并将其“用作更好的 C”,并且同样快。只是避免有大量开销的事情。如果您坚持使用基本上没有任何开销的某个子集,您甚至可以使用一些模板功能。在 Embedded.com 上查找 C++ 中几乎没有开销的功能,但可以让您比 C 更好地组织代码。

              【讨论】:

                【解决方案16】:

                奥伯伦?我想我有些时候太想念帕斯卡了。 C 支付了很长一段时间的账单,但我真的不喜欢它。

                【讨论】:

                • Modula-2 会很好。程序化,并且有适当的摆弄东西。
                【解决方案17】:

                当然是 Lisp!

                标题文字:有人说世界将在火中终结;有人说是段错误。

                【讨论】:

                  【解决方案18】:

                  对于操作系统,您需要最低级别的速度。因此,汇编、C、C++、Objective-C 或 Java 似乎是当前的选择。虽然 Java 是最近才发展得很快,但我很难想象一个有垃圾收集功能的操作系统。

                  如果我自己编写,那将是汇编和 C 的混合体。

                  【讨论】:

                  • 你的意思是java虚拟机最近有一些速度提升。那么,如果你实现了一个操作系统,那么运行你的 JVM 是什么?
                  • 显然操作系统可以分层构建。其中大部分可能是Java。这些天来,操作系统有很多东西。不仅仅是司机。
                  • 有C编译器可以自己编译,很多JVM已经知道编译成native,所以并不牵强...
                  • 操作系统可以配置为在本地运行 Java,就像 Windows 使用 CLR 或其他任何名称一样。原生 Java 操作系统当然值得深思。
                  【解决方案19】:

                  带有 JIT 的 C 或 C++ 微内核,用于高度动态的语言,如 Ruby,或者可能是原生支持原型模式的语言。甚至是该语言的设备驱动程序。

                  不是因为它实用,而是因为它真的很酷。就像 NeXTStep 使用 Obj-C 做几乎所有事情一样酷。

                  【讨论】:

                    【解决方案20】:

                    http://www.dwheeler.com/sloc/redhat71-v1/redhat71sloc.html - Linux 源代码中的语言份额。

                    【讨论】:

                      【解决方案21】:

                      C,原因有很多。其他候选人,如 D,都很棒。但是,C 有这个优势:有很多可用的开源 C 代码可以在您的项目中重用(比其他适合系统编程的语言要多得多)。

                      【讨论】:

                        【解决方案22】:

                        我会在使用一些现有的低级语言和基于 C# 编写我自己的语言但具有更好的泛型支持之间左右为难。 在第二种情况下,我会让每个方法都通用,但所有约束都将由编译器解决 - 允许像 Scala 中一样“鸭子类型”,但语言仍然应该是静态的。静态虚拟方法也会降低代码库。

                        我有这个想法很长时间了,但它似乎永远不可能在实时框架内实现,所以谁知道将来可能会发生。 :-)

                        【讨论】:

                          【解决方案23】:

                          有些人会说 Java。

                          请注意,openfirmware 部分是用 Forth 编写的,而且级别非常低。

                          保持开放的心态。

                          【讨论】:

                          • 嗯,FORTH 不是 FORTRAN。然而,尽管 FORTH 出现,但它是一种非常低级的语言。它被发明用于对望远镜和长时间曝光相机等设备进行编程控制,并在 8 位微处理器中运行。
                          • 哦,这很尴尬。谢谢 RB。
                          • 我无法自拔。我将不得不为你解决这个问题。 fortran -> Forth
                          【解决方案24】:

                          “内核必须用低级语言编写,C 是目前最好的选择,因为它非常节省内存。”

                          嗯... FORTH 呢?

                          FORTH 可以是低级和高级,因此您可以从头开始使用 FORTH 编写整个操作系统,并且在顶部仍然有一个不错的简单 REPL 脚本环境,也可以在 FORTH 中。

                          但是,任何体面的操作系统都应该支持多种语言,从 C 一直到 Python Ruby 和 Javascript。不过,让 FORTH 成为这一切的基础有很多好处。

                          编辑:我只会在具有单个已知硬件集的嵌入式环境中尝试此操作。试图编写一个可以与 Linux 或 Windows 竞争的操作系统是一项愚蠢的工作。

                          【讨论】:

                            【解决方案25】:

                            如果这不是一个假设性问题,并且您正在寻找创建自己的操作系统,我可能会选择 C,因为那里的大多数示例都是用 C 编写的。

                            另外,(而且我还没有构建一个操作系统,所以对它持保留态度),我认为将 c 运行时库移植到你的新操作系统要比说 .NET 容易得多。

                            【讨论】:

                              【解决方案26】:

                              Pascal + Oberon:它们具有 C 和 C++ 的强大功能,但使用起来并不令人生畏。这两种语言都被严重低估了。

                              【讨论】:

                                猜你喜欢
                                • 2020-11-17
                                • 2010-09-19
                                • 2014-02-25
                                • 2015-04-23
                                • 1970-01-01
                                • 2020-08-14
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                相关资源
                                最近更新 更多