【发布时间】:2015-06-21 02:44:07
【问题描述】:
是否可以在没有操作系统的裸硬件上运行 CLR 的 JIT 或 AOT(Ahead-Of-Time)编译器的输出(因为它被称为本机代码或本机指令集)? .NET 框架库代码在什么时候被链接?
我的意思是没有操作系统是没有 Win32 API 调用的帮助。
【问题讨论】:
是否可以在没有操作系统的裸硬件上运行 CLR 的 JIT 或 AOT(Ahead-Of-Time)编译器的输出(因为它被称为本机代码或本机指令集)? .NET 框架库代码在什么时候被链接?
我的意思是没有操作系统是没有 Win32 API 调用的帮助。
【问题讨论】:
如果您删除 Win32,那么您需要将它为 CLR 所做的事情(如内存分配、控制台、文件系统和网络访问)替换为其他内容,否则它们将不起作用。
在这方面,.Net 和 C 之间的唯一区别可能是您可以编写一个有用的 C 程序,而无需任何这些。另一方面,CLR 只是假设存在内存分配和文件系统访问等功能,即使是最简单的 C# 程序也使用它们。
所以,不,我不相信你可以在没有基本操作系统的情况下运行普通的 CLR 程序。
另一方面,如果您没有绑定到普通 CLR,那么使用 AOT 编译器运行 IL 所需的支持非 CLR 代码并不多,如 Singularity 所示。
关于术语,术语“本机代码”是指使用 CPU 指令集直接在 CPU 上运行的代码。这并不意味着它的代码不包含任何操作系统调用。
【讨论】: