<分区>
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,
visit the help center 指导。
关闭 11 年前 。
希望这是一个很好的快速回答问题。
哪种语言被认为是从头开始编写业余操作系统的实际语言,它还支持创建 512 字节引导扇区?我假设纯 C 是答案,尽管我脑子里有一个模糊的概念,即也可以使用 C++。鉴于时间的流逝,你们中的任何人对替代但可能更高级的语言有任何看法吗?其他人会强烈推荐普通的老式汇编器吗?
根据您的回答,您会推荐哪种免费(甚至可能是开源)编译器来将源代码编译成二进制文件?
PS:我深知编写操作系统是一项非常具有挑战性的任务,我相信我永远也做不完。我正在进行一项个人兴趣研究任务,并且希望至少创建一个 MBR 和非常基本的内核以及简单的控制台 IO。
我会说 C(特别是 GCC)是用于此目的的最常用编译器。
大多数现代编译器不再支持“分段 16 位”,并且没有一个真正适合处理诸如“此代码必须适合 512 字节”之类的限制或处理诸如 CPU 模式切换和异常情况之类的事情。由于这些原因,为“PC BIOS”(而不是使用 GRUB 之类的东西)编写自己的引导加载程序的人倾向于使用汇编语言(NASM、FASM、GAS)。
这并不意味着不能使用其他语言(和其他编译器);我见过人们用多种语言(Pascal、C++、C# 等)编写内核。它也仅限于低级代码(例如引导代码和内核)。一旦你超越了这一点,你几乎可以使用任何东西来制作更高的部分(驱动程序、文件系统、GUI、应用程序)。还有一些人发明了他们自己的语言以用于内核和/或操作系统的更高部分。
我确实对替代但可能更高级的语言有意见。我的观点是,“潜在的优势”并不能证明 IT 行业存在许多不同语言的高“通天塔”成本(由于语言差异,大多数程序员无法阅读大部分源代码)整个。对于 OS 项目,替代语言可能具有理论上的优势,但在实践中,这些优势被减少熟悉该语言并可以自愿提供帮助的人数的劣势所抵消(当您遇到困难并需要帮助时)错误等;或者稍后当您需要志愿者贡献数千名驱动程序时)。
我确实使用普通的老式汇编程序(用于引导代码、内核代码、驱动程序等)。我不推荐它;除非您对汇编的经验比任何其他语言都要丰富,并且您有其他原因不使用更高级别的语言,并且可移植性不会成为问题。
我可能会推荐 GCC(作为一个免费和开源的编译器,用于编译构成操作系统项目的大多数不同/独立的二进制文件)。但是,我还建议避免使用非标准语言扩展和任何“实现定义”行为(无论您使用哪种语言和哪种编译器),以便您可以随时切换到任何其他编译器(对于任何原因)更容易。