了解rust的特性
用C写os是最适合,因为它最贴近底层,且有很多参考实例。rust也是一门系统级的语言,由于其复杂性,相对C还是需要有更多的语言上认识才能进行下一步。
第一, 写OS跟通常的编程最大的不同在于不能调用库函数,也即不能使用系统调用。所有的库要自己实现,比如打印,分配内存之类的。如果在C上可能都要亲历亲为了。但是rust会稍微方便一点,rust对系统之上的编程会提供std lib,对于没有系统的编程,猜测是为了适应系统编程的需要,它提供了core lib,可以找到很多同名的库函数。
第二,写OS必然不会牵涉到汇编代码,因为在能够使用高级语言之前,必须准备好栈,而汇编就可以用来设置栈。rust只提供了inline asm,也就是只能内嵌汇编。使用asm!或者global_asm!宏。
第三,编译程序都需要指定target,也就是程序最终要跑在什么平台上。这个平台是硬件平台+软件平台。硬件也就是在哪个架构上,比如x86,Arm。软件平台,一般是OS+工具链。rust已经实现了对多种平台的支持。使用命令rustc --print target-list显示rust支持的target。对于OS本身,硬件平台很容易确定,它自身所在的平台是rust未定义的,所以需要编写json文件来定义。使用
rustc +nightly -Z unstable-options --print target-spec-json可以查看当前的配置。