C++ 最受尊敬的语言和自由编译器,用于创建业余操作系统?

C++ 最受尊敬的语言和自由编译器,用于创建业余操作系统?,c++,c,compiler-construction,assembly,C++,C,Compiler Construction,Assembly,希望这是一个快速回答的好问题 哪种语言被认为是从头开始编写爱好者操作系统的实际语言,它也支持创建512字节的引导扇区?我假设C是答案,尽管我头脑中有这个模糊的概念,也可以使用C++。随着时间的推移,你们中有人对替代性但潜在的优越语言有什么看法吗?其他人会高度推荐普通的老装配工吗 根据您的回答,对于将源代码编译成二进制代码,您会推荐哪种免费(甚至是开源)编译器 PS:我完全意识到编写操作系统是一项非常具有挑战性的任务,我相信我永远不会完成。我正在进行一项个人感兴趣的研究任务,我想至少用简单的控制台

希望这是一个快速回答的好问题

哪种语言被认为是从头开始编写爱好者操作系统的实际语言,它也支持创建512字节的引导扇区?我假设C是答案,尽管我头脑中有这个模糊的概念,也可以使用C++。随着时间的推移,你们中有人对替代性但潜在的优越语言有什么看法吗?其他人会高度推荐普通的老装配工吗

根据您的回答,对于将源代码编译成二进制代码,您会推荐哪种免费(甚至是开源)编译器

PS:我完全意识到编写操作系统是一项非常具有挑战性的任务,我相信我永远不会完成。我正在进行一项个人感兴趣的研究任务,我想至少用简单的控制台IO创建一个MBR和非常基本的内核。

C和汇编

对于C编译器,我推荐使用gcc编译器。 对于X86程序集,我建议使用nasm assmebler。如果您更喜欢AT&T语法而不是intel语法,还可以使用gcc附带的gas

引导扇区必须写入汇编

内核可以用任何语言编写。您可能需要在那里进行汇编,但如果愿意,也可以使用更高级的语言(如C)

如果你想要一些非常简单的东西,你可以用汇编来编写

更多信息:

我认为C(特别是GCC)是最常用的编译器

大多数现代编译器不再支持“分段16位”,也没有一个真正适合处理诸如“此代码必须适合512字节”之类的限制,或者处理CPU模式切换和异常情况之类的事情。出于这些原因,为“PC BIOS”编写自己的引导加载程序(而不是使用GRUB之类的东西)的人倾向于使用汇编语言(NASM、FASM、GAS)

这并不意味着不能使用其他语言(和其他编译器);我见过人们用各种各样的语言编写内核(Pascal,C++,C等)。它还限于低级代码(例如引导代码和内核)。一旦你超越了这一点,你几乎可以将任何东西用于更高的部分(驱动程序、文件系统、GUI、应用程序)。还有一些人发明了自己的语言用于内核和/或更高版本的操作系统

我对替代性但潜在的高级语言有自己的看法。我的观点是,“潜在的优越性”并不能证明许多不同语言的存在对整个IT行业造成的高昂的“巴别塔”成本是合理的(因为语言的差异,大多数程序员无法阅读大多数源代码)。对于操作系统项目来说,替代语言可能具有理论上的优势,但在实践中,这些优势被减少熟悉该语言并愿意提供帮助的人数的劣势所抵消(当你陷入困境,需要帮助解决bug等问题时;或者稍后当你需要志愿者帮助数千名司机时)

我确实使用普通的旧汇编程序(用于启动代码、内核代码、驱动程序等)。我不推荐使用它;除非您比任何其他语言都更熟悉汇编,并且您有其他原因不使用更高级的语言,并且可移植性不会成为问题


我可能会推荐GCC(作为一个免费的开源编译器,用于编译构成OS项目的大多数不同/独立的二进制文件)。但是,我也建议避免使用非标准语言扩展和任何“实现定义”行为(无论使用哪种语言和哪种编译器),以便您可以在任何时候(出于任何原因)更轻松地切换到任何其他编译器。

我将从linux开始,因为您需要移植的许多开源内容都是为该平台编写的

我得到了newlib,因为它比gclib更容易实现,但没有gclib那么好,然后我想,我正在重新构建Linux,并转而使用其他人的

至于免费编译器,它们在Linux上几乎都是免费的。正如这里的其他人提到的gas或As是汇编程序,但设置交叉编译和选择可执行格式可能需要在确定最终的工具集之前完成。出于可靠性、速度和移植第三方应用的原因,我的目标是实现在我的自定义操作系统上构建环境,这可能会阻止更高级别的编码工具出现。因此,您确实需要了解可以从源代码构建自己的工具。Linux from Scratch()是交叉编译的一个很好的介绍—相同的体系结构,不同的(交叉)环境


在一个临时构建的操作系统上实现gclib有着严重的障碍,但这仅仅是我大约3年前的经历,所以事情可能已经发生了变化,需要瞄准的可移植代码平台的数量肯定已经大幅增加。

你需要一点汇编程序来引导加载,你需要一个自定义的链接脚本以使所有的东西都到位,但是原则上没有什么阻止你使用C++作为主要的开发语言。但是,你将没有任何库,只要记住这一点。努力是在移植编译器的运行时支持库(例如CRT)。在这个新的操作系统上工作。你最好先移植C版本。它要小得多。是的,这个鸡和蛋的问题通常会提前结束这样一个项目。如果你能使用C(更不用说发抖的C++),我会感到惊讶编译器来构建主引导记录的内容。空间量很小,你需要它的每一寸。这就是上帝创建汇编程序的原因。如果MBR可以从磁盘读取任意大的数据块,那么你就可以构建