5 .NET CLR与Java VM的异同
.NET CLR的本质和Java VM类似,都是虚拟机,这与Microsoft声称.NET Framework可以跨平台是对应的。
但是.NET CLR并不强调100%的平台无关性,托管执行的本质只是元数据驱动执行,尽管类型中方法的实现一般都使用CIL代码,例如C#和VB.NET的编译器只生成CIL代码,但不排除使用本机代码,例如Visual C++.NET的编译器可以生成同时包含CIL代码和本机代码的可执行文件,本机代码显然是平台相关的。
.NET Framework中,很多.NET框架类库的实现只是一种对Windows平台的包装,最终调用的还是Windows API或者Windows相关服务,例如企业服务(Enterprise Services)最终调用COM+企业组件服务。.NET框架类库是.NET应用程序调用的API,显然,使用了上述.NET框架类库的.NET应用程序是不可能离开Windows平台的。
.NET应用程序还可以直接调用Windows API,直接调用Windows API的.NET应用程序更不可能离开Windows平台。
可见Microsoft并不把跨平台作为.NET Framework追求的首要目标,.NET CLR是和Windows平台甚至硬件平台协同工作的,而Java VM的目标则是实现完全的跨平台,在各种硬件和软件平台上都有Java API的独立实现,可见二者的设计首要目标并不相同。
所以.NET CLR称为“Runtime(运行时)”,而Java VM称为“Virtual Machine(虚拟机)”还是很贴切的。
Microsoft会让.NET Framework完全跨平台吗?笔者看来现在不会,否则如何保持Windows平台的垄断地位?
.NET CLI定义的只是.NET Framework的子集,仅此而已。
6 .NET Framework 3.0
Windows Vista(Windows NT 6.0)将于2006年年底到2007年年初的时间正式发布,Windows Vista中包含了.NET Framework 3.0。
.NET Framework 3.0是WinFX正式发布时的称呼,.NET Framework 3.0提供了4个全新的子系统,对于程序员来说可以认为是4组全新的API,还包括全新的程序设计体系结构,它们分别是:图形用户界面子系统WPF(Windows表示层基础,Windows Presentation Foundation)、安全体系CardSpace、网络服务通信子系统WCF(Windows通信基础,Windows Communication Foundation)和工作流子系统WF(Windows工作流基础,Windows Workflow Foundation)。
实际上.NET Framework 3.0的核心仍然是.NET Framework 2.0,其底层仍然是.NET CLR 2.0,因此.NET Framework 3.0的发布对系统底层程序员的冲击相对比较小。从.NET Framework 3.0的核心仍然是.NET Framework 2.0看来,Microsoft无法放弃Windows API时代的大量资源,包括COM/COM+、DirectX等,.NET Framework在一段时期内仍然不会完全取代Windows API,系统底层程序员仍然大有可为。
引用本文开始处的一句话:无论商业的炒作如何进行,系统底层程序员应该保持清醒的头脑。