您在操作系统中使用哪种语言?

时间:2009-06-11 23:23:11

标签: programming-languages operating-system

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

26 个答案:

答案 0 :(得分:32)

当然是

答案 1 :(得分:12)

Haskell中。

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

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

Lisp是另一个不错的选择;原始的Lisp机器(在运行时)比UNIX和Windows等“现代”操作系统更具可调性。

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

答案 2 :(得分:8)

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

  

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

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

答案 3 :(得分:6)

使用 Assembly 构建任务计划程序和驱动程序等基本组件,然后使用 C 构建更高级别的组件,例如应用程序和工具

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

答案 4 :(得分:5)

绝对...... C

答案 5 :(得分:5)

C,ASM,C#

Singularity

答案 6 :(得分:3)

    Haskell D 之类的
  • 低级。在我看来,生产力超过绩效。如果需要,您可以在C ++中重写慢速部件,甚至可以在以后组装。
  • Python Ruby 中的
  • 高级。理想情况下,我还有一个非常快的JIT支持的VM用于该语言,但这种语言暂时不会发生。如果速度阻碍, Lua 将是一个不错的选择。

答案 7 :(得分:2)

内核必须用低级语言编写,C是迄今为止最好的选择,因为它的内存效率很高。更高级别可以使用Java或更理想的Objective-C和脚本语言(如python和ruby,或lua)的组合构建。

答案 8 :(得分:2)

BitC似乎考虑到了这一点。尽管它的名字似乎是汇编语言和lisp的中点。目标是使一种与机器语言具有强烈对应性的语言,但具有支持比大多数其他常用语言更强的正确推理的中间表示。这些语言是作为Coyotos项目的一部分创建的,Coyotos项目是一个具有高度安全性和可靠性目标的操作系统。使用BitC中使用的ir可以显着地进行形式验证。

答案 9 :(得分:2)

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

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

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

答案 10 :(得分:1)

Oberon的?我想有时候我会错过帕斯卡尔。 C支付了相当一段时间的账单,但我并不喜欢它。

答案 11 :(得分:1)

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

  • C(老式的)
  • C ++(添加了C的东西.Windows部分写入了此内容)
  • Java(中级语言,可能有一个功能强大的垃圾收集器,可以暂停G1)。

答案 12 :(得分:1)

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

答案 13 :(得分:1)

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

答案 14 :(得分:1)

Ada

  

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

Ada,因为它不仅专门为此类项目开发,而且还支持几个非常有用的高级功能(例如支持强类型,并发和抽象),这些功能在标准C中根本不可用。 / p>

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

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

然而,在C语言中,这些功能通常最终会被过度使用预处理器(例如可以在gcc代码库中看到)所模仿,这样你就可以看到很多嵌套宏,从实现的角度来看,实际上模拟了在其他编程语言中找到的功能。

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

拥有类似ASIS的界面,意味着您可以实际实现“语义修补”,您可以在其中自动重命名文件,函数或变量/数据结构,它实际上可以正常工作。

答案 15 :(得分:1)

如果我要开始新的操作系统,我会使用嵌入式行业推荐的C ++子集。您可以使用类之类的东西,并将其用作“更好的C”并且速度一样快。避免那些有巨大开销的事情。你甚至可以使用一些模板功能,如果你坚持一个基本上没有任何开销的特定子目录。在embedded.com上查看C ++中几乎没有开销的功能,但是可以比C中更好地组织代码。

答案 16 :(得分:1)

当然是Lisp!

With Apologies to Robert Frost

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

答案 17 :(得分:0)

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

我已经有了很长一段时间的想法,但它在实时框架中似乎永远不可行,所以谁知道将来也许。 : - )

答案 18 :(得分:0)

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

另外,(我还没有构建一个操作系统,所以考虑到这一点),我认为c运行库将比.NET更容易移植到新的操作系统。

答案 19 :(得分:0)

Pascal + Oberon:他们拥有C和C ++的强大功能,但使用它们并不令人畏惧。这两种语言都受到了极大的赞赏。

答案 20 :(得分:0)

“内核必须用低级语言编写,C是迄今为止最好的选择,因为它的内存效率非常高。”

嗯...... FORTH怎么样?

FORTH可以是低级别和高级别的,所以你可以从头开始用FORTH编写一个完整的操作系统,并且在FORTH上仍然有一个很好的简单的REPL脚本环境。

然而,任何体面的操作系统都应该支持许多语言,从C语言到Python Ruby和Javascript。尽管如此,为其创造基础仍然有很多好处。

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

答案 21 :(得分:0)

C ,原因有很多。像D这样的其他候选人都很棒。但是,C具有以下优势:您可以在项目中重复使用大量可用的开源C代码(远远超过适用于系统编程的其他语言)。

答案 22 :(得分:0)

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

答案 23 :(得分:0)

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

不是因为它很实用,而是因为它非常酷。酷酷的NeXTStep很酷,因为Obj-C几乎可以用于所有事情。

答案 24 :(得分:0)

有些人会说Java。

请注意,openfirmware部分写入Forth,并且它的级别非常低。

心胸开阔。

答案 25 :(得分:0)

对于操作系统,您希望速度处于最低级别。因此,汇编,C,C ++,Objective-C或Java似乎是当前的选择。虽然最近Java速度很快,但我很难想象一个带垃圾收集的操作系统。

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