可能很多人不明白为什么微软用C++而不是自家的C#来写Windows?其实原因很简单。首先,Windows的开发时间远早于C#语言的定义。即使在当时可用,C#也不是用于实现操作系统的合适语言。现代版本的Windows桌面和服务器操作系统的代码库始于1988年的ProjectNT,当时新的32位抢占式多任务操作系统的代码从头开始。选择的编程语言主要是C,还有一些用于GUI组件的C++,以及一些汇编语言。基于此代码的操作系统于1993年随第一版WindowsNTWorkstation和WindowsNTServer首次发布。NT和2000的所有版本、WindowServer的所有版本(从1993年至今)以及从WindowsXP开始的所有桌面Windows版本(从2001年至今)都基于此代码。Windows附带的一些后来的用户模式应用程序已经用C#实现,但大多数系统仍然使用C和C++,以及一些汇编语言。直到2000年,即WindowsNT项目开始十二年后,C#语言才得到完全定义。(严格来说,NT项目最初是作为NTOS/2开始的,但是当16位Windows3投放市场时,该项目转移到以Windows为中心的焦点。)C#通常不会编译为本机代码。它被翻译成中间CIL语言,然后在程序执行时进行解释和/或即时编译。这种语言和其他类似的语言并不真正适合实现操作系统,因为这些操作系统需要直接在硬件上运行、管理页表、管理中断等。C和C++通常编译为高度优化的本机代码不需要运行时解释器或即时编译器,更适合实现操作系统。C#从未被设计为系统编程语言。在开发用户模式应用程序和服务时,它更侧重于安全性和生产力。顺便一提。NETFramework支持C#和其他语言,有的是用C#实现的,有的是用C和C++实现的。它调用Windows操作系统提供的API。即使今天使用C#编译器生成的高度优化的本机代码,返回并重写一个大型项目只是为了将其变成一种更新的编程语言也几乎没有意义。由于需要重写和完全重新测试数千行代码,成本和风险都很高,几乎没有任何好处。目前还没有做这样的事情的商业案例。只要现有语言得到完全支持并提供出色的工具,就真的没有理由用“更新”的语言重写代码。最后,从1975年的第一天起,Microsoft就一直从事编程语言业务。多年来,其主要业务是为各种基于微处理器的系统开发编程语言解释器、编译器和汇编器。自1980年代以来,他们拥有自己的C和C++以及其他语言(如BASIC、FORTRAN等)的编译器。他们的C和C++编译器非常稳定和成熟,并且不断发展,产生高度优化的机器代码。可能很多人会怀疑我是机器翻译,然后,我想告诉你,因为我也会看一些国外的文章,这篇文章中的一些理解是一个曾经在微软WindowsNT组工作的人人员。
