你只能用C语言编写操作系统吗?

15

我知道C语言及其超集允许您进行低级别的访问,但您可以使用其他语言。例如Visual Basic、C#甚至是Java?我只是好奇,因为自C语言诞生以来好像应该出现了更好的东西。


15
比C语言更好?异端。 - Stephen Canon
3
@Sam:“需要虚拟机才能运行它。”啊,Jazelle,你被如此快地遗忘了吗? - Steve Jessop
@ Sam Dufel,硬件本身可以支持字节码,Java也可以编译为本机代码来引导加载。Reed Copsey的答案是正确的。 - bestsss
3
Lisp机器有一个用Lisp编写的操作系统(尽管它可能有点不同寻常)。如果这对你有意义的话。但是不能说Lisp是“自从C问世以来才出现的”:-) - Steve Jessop
1
属于超级用户吗?不是。S&A,也许可以。重复的问题已经在许多其他问题中得到了回答(是否定的)。相关:完全使用汇编语言编写操作系统的优势是什么? 为什么人们不使用C ++制作操作系统(解释了他们确实使用C ++)您会在您的操作系统中使用哪种语言?以及许多其他问题。 - dmckee --- ex-moderator kitten
显示剩余8条评论
11个回答

8
你可以使用任何语言编写操作系统,只要你拥有将其编译到该平台所需的引导程序。

例如,JNode是一个基于Java的操作系统(带有少量汇编语言)。


7

3
不一定。您可以扩展C#编译器(有开源实现)以使其能够从C#生成引导代码。如果我没有记错的话,微软有一个完全由C#编写的操作系统(虽然我可能记错了)。 - Brennan Vincent
我记得阅读过它使用汇编语言、C语言(也许还有一些C++)作为硬件和内核之间的“胶水代码”,但主要是使用C#。 - 0xHenry
正确。它被称为 Singularity。 - Jeff Hubbard
1
并且附上一个链接:http://research.microsoft.com/en-us/groups/os/singularity/ :) - 0xHenry
实际上,我相信大多数用 C 写的操作系统都使用一些汇编代码,主要是为了进行硬件交互。因此,即使是 C 也需要一些"粘合代码"。 - sleske


3
你可以使用几乎任何编程语言。但是,如果要使用任何托管式编程语言,则可能需要一些汇编和/或C粘合代码。
你可以在OSDev wikiforum上获取大量信息。
有一个项目甚至创建了直接编译为机器码的C#编译器,因此内核中可能没有太多(甚至没有)C或其他代码。对于任何内核来说,一些汇编基本上是必需的。

2

我相信你可以,但是正如你所说,C语言被用于低级访问。然而,Visual Basic、Java和C#是为在框架下工作而设计的。


那么VB、C#和Java如何成为“可视化语言”呢? - Babak Naffas
太好了!我想我误解了“Visual”这个术语,抱歉,我会进行编辑。 - Carlos Valenzuela

2

也许有一些工具可以将字节码(或C#中的IL)编译成当前处理器架构可以理解的机器级代码。但是我自己不知道有哪些工具。


1

有几种语言可以直接用来编写操作系统,例如C++、D和汇编语言。

如果你想使用像C#、Java或VB这样的语言,你需要一个运行时环境(在某些情况下包括JIT编译器)。这意味着你必须编写这些运行时,并且你不能在像Java这样的语言中完成。你必须用C/C++/Assembly这样的语言编写你的运行时代码,然后你的运行时可以加载你的Java/VB代码。

另一种选择是编写一个新的编译器,将C#/Java/VB编译成机器码或汇编语言。这样做是可行的,但是,在操作系统/执行级别上使用VB或Java等语言会遇到很多麻烦,因为它们不允许像C/C++那样进行内存访问,也不允许直接运行CPU指令。


1

汇编语言是答案!仅使用 C 无法生成漂亮的引导扇区,因为您没有可用的正确输出格式。但大多数操作系统认为 C 是大多数部分的好语言。



0

从所有的答案来看,似乎是可以的,但它不会像用C语言编写一个简单或容易。最有可能需要硬件支持,或者至少需要一些C或C++的“粘合代码”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接