哪种语言被认为是从头开始编写业余爱好操作系统的实际语言,它还支持创建512字节引导扇区?我假设普通的C是答案,虽然我脑子里有这个模糊的概念,C也可以使用.考虑到时间的推移,你们是否有任何关于替代但可能更优秀的语言的意见?其他人是否强烈建议普通的旧装配工?
并且,根据您的回答,您会建议将源代码编译为二进制文件的免费(甚至可能是开源)编译器?
PS:我完全清楚写一个操作系统是一项非常具有挑战性的任务,我相信我永远不会完成.我正在进行一项个人兴趣研究任务,并希望至少使用简单的控制台IO创建一个MBR和非常基本的内核.
解决方法
大多数现代编译器不再支持“分段16位”,并且没有一个能够处理诸如“此代码必须适合512字节”或处理诸如cpu模式切换和异常情况之类的限制.由于这些原因,为“PC BIOS”编写自己的引导加载程序的人(而不是使用像GRUB这样的东西)倾向于使用汇编方言(NASM,FASM,GAS).
这并不意味着不能使用其他语言(和其他编译器);我见过人们用各种语言编写内核(Pascal,C,C#等).它也仅限于低级代码(例如引导代码和内核).一旦超越了它,您几乎可以使用任何更高的部分(驱动程序,文件系统,GUI,应用程序).还有一些人发明了他们自己的语言,用于内核和/或更高级的操作系统.
我对替代但可能更优秀的语言有一些看法.我的观点是,“潜在优势”并不能证明高昂的“巴别塔”成本(大多数程序员因为语言差异而无法阅读大多数源代码),因为许多不同语言的存在对IT行业来说都是如此整个.对于操作系统项目,替代语言可能具有理论上的优势,但在实践中,这些优势超过了减少熟悉该语言并且可以自愿提供帮助的人员的缺点(当您遇到困难并需要帮助时)错误等;或者稍后当你需要志愿者贡献数千名司机时).
我使用普通的旧汇编程序(用于启动代码,内核代码,驱动程序等).我不推荐它;除非你在汇编方面比其他语言更有经验,否则你有其他理由不使用更高级别的语言,便携性不会成为问题.
我可能会推荐GCC(作为一个免费的开源编译器,用于编译构成OS项目的大多数不同/单独的二进制文件).但是,我还建议避免使用非标准语言扩展和任何“实现定义”行为(无论使用哪种语言和编译器),以便您可以随时切换到任何其他编译器(对于任何理由)更容易.