使用ngen.exe编译内核

apo*_*his 3 c# ngen osdev

据我所知,Cosmos和SharpOS已经制作了自己的编译器来构建C#的二进制代码,但是你可以使用Microsoft的.NET AOT来做同样的事情吗?将C#编译为x86,即.我假设您将不得不遗漏使用语句,就像包含语句时的OS开发一样.任何反馈意见.谢谢

编辑:我想在内核开发中使用C#的主要原因是托管代码带来的内存管理,特别是单地址空间属性.是否有必要引导JIT编译器,然后编译C#?或者那时的环境是否仍然过于瘫痪?感谢您的反馈

Jus*_*tin 5

简答:不,使用ngen.exe/AOT编译器不足以编译内核.

答案很长:ngen.exe/AOT编译器会删除JIT编译器的工作,但CLR不仅仅是一个JIT编译器 - 即使没有引用任何其他程序集,它也提供了诸如内存管理,垃圾收集,类型之类的东西检查和异常处理(以及其他一些东西).

是的,使用ngen确实让你更接近在C#中生成一个内核,但它并没有让你更接近 - 你仍然需要解决大量其他问题,通过编写一个编译器可以更容易地解决这些问题.针对您的预期环境(而不是CLR).

更新:如果你想要C#的"托管"部分,那么你需要自己创建一个托管环境来运行你的代码,即垃圾收集器等...(或者试着像CLR一样运行,这会可能更难).这是一个相当艰巨的任务,甚至支持的底层操作系统中,这样做的时候,你操作系统更是这样(但绝不是不可能的-毕竟这是什么项目,如奇异和宇宙所做的).