Windows Runtime - 面向对象化的C++(并不是意味着托管)

 Windows 8的开发平台整体上分为两部分:一是全新的WinRT,界面搭配Metro style,二是传统的Win3二、.NET(SL)、IE三大平台,界面为传统窗体风格。其中全新的WinRT被微软视为开发者的将来。web

  WinRT平台开发又细分为两大方式:一是C/C++搭配XAML,或C#/VB搭配XAML,二是JavaScript搭配HTML/CSS。C、C++、C#、VB、Javascript所有能够直接调用WinRT APIs,这样微软将Native(本地)、Managed(托管)、Dynamic(动态)三大语言运行机制统一了起来。可见,WinRT是微软将Win3二、.NET(SL)、IE三大平台进行整合的产物。编程

  回顾历史,Win32是微软最先推出、发展时间最久的一个开发平台。C++搭配Windows SDK或C++搭配MFC等类库或VB均是Win32平台的开发方式。而COM技术,也做为那个时代的组件模型,为微软的发展创建了不可磨灭的功勋。2000年,微软推出.NET战略,.NET平台开始走入主流。WinForm、WPF以及以后的Silverlight均是.NET时代的产物。而Assembly组件模型,也逐步地在不少领域替代COM技术。数组

  Win32时代,我称之为“PC时代”。那时的硬件性能广泛较低,因此Win32平台具备很是高效的性能。可是开发效率低下,内存管理复杂,COM技术晦涩难懂、没有统一的数据传递模型等这些问题,使Win32难以适应网络发展的须要。因而微软推出.NET战略,“网络时代”来临。.NET平台从2000年开始,到如今,已经发展了10年左右,微软依次给咱们带来了.NET1.一、.NET2.0、.NET3.0、.NET3.5。安全

  .NET4.0。.NET平台解决了Win32平台的问题,设计了很是优雅的开发接口和庞大类库,开发效率提高了,内存管理引入了GC,Assembly组件模型很是简单,并且还解决了COM技术形成的DLL Hell问题,也带来了统一的数据传递模型XML。可是.NET平台从一开始,就暴露了缺点,因为.NET是创建在Win32基础上的托管API接口,性能降低,系统资源消耗严重,并且和Win32平台交互困难。随着硬件的提高、.NET平台的不断发展优化,性能获得部分提高,跨平台调用方案也必定程度解决了Win32平台的交互问题。可是这些改变,没有根本解决问题,即使微软后来又推出了“改良的.NET平台”——Silverlight,但.NET平台的缺点仍是随着“移动时代”的来临,再次暴露无疑。此时WinRT上场了!网络

  那么,WinRT给咱们带来了什么呢?WinRT是“移动时代”需求的产物,那确定会充满“移动时代”的色彩。第一,WinRT给咱们带来了界面上的革命:Metro。新的Metro风格界面更加适合触摸屏操做,更加适合多尺寸的显示屏,全屏的显示方式突出了之内容为中心的理念。第二,WinRT给咱们带来了全新的系统级Native API,WinRT APIs是Native的,并且直接创建在系统内核之上,而且还自动得到硬件加速,包装很是相似.NET,既高效又易用。第三,WinRT采用了MVC模式,作到了界面和逻辑的很好分离。XAML和HTML5做为两大界面标记语言同时被采用。第三,WinRT给咱们带来了新的组件模型:C++组件扩展。该组件模型是COM和Assembly技术的结合体,可同时被Native、Managed和Dynamic三种类型的语言直接调用。WinRT APIs自己就是使用的C++组件扩展技术实现的,因此作到了C、C++、C#、VB、Javascript的直接调用。WPF、SL、网页应用都可以较小代码调整,便可在WinRT平台运行。第四,WinRT同时支持X86/6四、ARM架构,便可在PC上运行,又可在Pad上运行。第五,WinRT全面采用了异步技术。在WinRT中,微软一直遵循一个简单的规则:若是一个API预计耗时超过50毫秒,那么API就是异步的,这样就能确保Metro UI上的操做体验是最好的。第六,WinRT程序在不显示的时候,自动转换为挂起状态,不占用CPU,节省了电能消耗。session

  对于传统平台开发,也稍微作下介绍。IE平台更新到了IE10版本,.NET平台更新到了.NET4.5版本。另外,专门提下,传统的网页插件技术已经不能在Metro风格的IE中得到支持。而新的插件技术或者是否还提供插件技术尚不得而知。多线程

  开发工具对应的是Visual Studio 11 和 Expression Blend 5。架构

  WinRT是一个新的API 集合,具备如下特性:异步

  • 它实现了Metro UI规范的UI库
  • 为Windows开发人员提供一个简单的UI编程模型,你不须要学习Win32API的那些复杂的API了
  • 它使用XAML-base的UI系统
  • API都设计成了异步的
  • 它和.NET同样是个沙箱的API,自成体系,用于建立AppStore上的应用程序。
  • API的元数据格式是ECMA335,和.NET同样的标准。这是否是意味着之后Mono也能够在xUnit上去实现这样的API呢?

  WinRT包装的新的用户界面系统,和Win32API同样是Com的上层。工具

  Windows运行时(WinRT)是为了在Windows上给用户提供一种流畅且安全的应用体验。WinRT会受到.NET、C++、以及JavaScript三者的影响。WinRT不会取代CLR或Win32,而是为那些使用不一样语言编写的应用程序提供统一支持,以便它们可以使用新的Metro风格用户界面运行于Windows之上。 

  WinRT不是为了取代.NET或Win32提供的全部功能,可是它是一个公共平台,以便那些使用不一样语言编写的应用程序可以使用新的Metro风格界面来运行。当混合C#应用程序基于WinRT建立Metro风格用户界面时,程序中将仍能执行LINQ查询,对于存储、网络、新式应用程序的安全性等方面一样能执行LINQ查询。完整的运行时架构以下图所示:

  在类型上,WinRT必须提供语言无关的类型——integer(整数)、enumerations(枚举)、structures(结构)、arrays(数组)、interfaces(接口)、generic interfaces(泛型接口)、以及runtime classes(运行时类)。引入了被称之为HSTRING的新字符串类型,该类型容许在不进行任何数据复制的状况下,在应用程序与运行时环境之间传输字符串。

  每一个WinRT对象都会对应一些接口,其中有两个接口属于每一个对象:IUnknown接口,熟悉的COM接口;以及IInspectable接口,用于根据对象所包含的元数据来发现有关该对象的信息。一个对象可能经过接口提供其余功能,然而运行时类会把这些接口集中公开出来。例如,一个FileInformation对象拥有由FileInformation类公开的IStorageItemInformation、IStorageItem、IStorageFile三个接口。

  WinRT对象在编译时被公开给C++应用程序,而对于C#或VB.NET应用程序而言,对WinRT对象的绑定一部分是在编译时完成的,另外一部分则是在运行时完成的。HTML或JavaScript应用程序只有在运行时能够看到WinRT对象,并且元数据是动态生成的。

  Metro界面运行在一个不可重入的单线程之上,然而应用程序的其他部分能够从线程池中使用由运行时环境所自动提供的多线程。

  开发者能够用C#语言建立可供C++或JavaScript的WinRT应用程序使用的Windows运行时组件,然而需要遵照一系列规则:“结构体只能拥有公共数据字段;只容许对XAML控件使用继承,其它类型都必须使用sealed关键字;只支持系统提供的泛型。” 

相关文章
相关标签/搜索