WinRT:Win32的面向对象替代品
http://www.infoq.com/cn/news/2011/09/WinRT-API
WinRT不是另一个抽象层;它就像Win32 API一样,直接驻留在内核之上。自从1993年Win32伴随Windows NT被引入以来,这标志着对于Windows核心的首次重大突破。WinRT与Win32截然不同,它代表了新的语义学应用程序执行环境。
不像Win32是用C语言思想设计的,而WinRT API是用C++编写的,并且从一开始的设计就是面向对象的。一致性、易用性、以及性能都是新的运行时API的重要方面。WinRT API中的每个对象都支持反射,以便甚至连诸如JavaScript等动态语言都可有效地使用它们。随之而来还有统一对象模型,这对于基于库的C++而言是个稀罕物。
附注:Win32 API并未被移除,而且那些使用传统应用程序执行环境的较早的应用程序将继续按预期方式工作。
C++开发
在C++中编写用户界面将首选XAML。所有与XAML一起使用的库都已被移植到C++,并且被编译为本地x86版本。使用XAML和C++编写的Metro风格应用程序并不运行在.NET之上,它们就像其他任何Visual C++应用程序一样,被直接编译为x86版本。
调用UI控件的方法就像在C++中调用任何其他对象的方法一样。在机器码级别上,某个指令将this指针推送到堆栈上,然后通过虚函数表(v-table)调用相应函数。这使得即使在低功耗设备上也能达到最优的性能。
支持一些现代的C++应用程序所用的库,例如Boost。
重叠窗口不复存在
对话框是来自上一版Windows的核心概念,而在WinRT中它将不复存在。对于微软而言,性能成本和可用性问题已不再是理所当然的。希望使用这种模式的应用程序将要开发其他的方式来传递信息,例如消息框的方式。
另一并未纳入WinRT的库是GDI。如果某个应用程序要使用Metro风格界面,那么它需要按自上而下的方式来做,将Metro风格与经典用户界面相混合的情况是不可能出现的。
PlayTo契约
另一被公开的契约是PlayTo(由……发挥)。这使得应用程序可发送如音频及视频等媒体文件到某个charm[1]。然后那个charm将允许用户选择某个他们想用的应用程序来查看该文件。据推测,媒体文件不仅限于物理文件,而是任何可表示为数据流的媒体形式。
C#/VB:平台调用(P/Invoke)之终结
从.NET中调用本地函数通常涉及建立结构和操纵指针。而在WinRT环境下,所有的API被公开为许多可通过C#及VB直接使用的对象。这把.NET开发者置于与C++开发者平等的层面上。
应用程序的响应速度对于微软而言是非常重要的。所有耗时超过50毫秒的操作系统级别的API调用将被公开为异步操作,正是为了向开发者传递这种价值观。
JavaScript
对于Windows 8而言,第四大语言就是JavaScript。尽管它不使用XAML,但它就像本地及.NET应用程序一样,拥有对底层WinRT API的直接访问权。这不仅是个像PhoneGap一样的容器,JavaScript开发者还可获得与其他开发者所使用的同样丰富的API。
由于是JavaScript,因此所选择的UI工具包是HTML和CSS而非XAML。IE 10及Metro风格的JavaScript应用程序使用的是同一渲染引擎,尽管那些应用程序实际并不运行在浏览器中。JavaScript应用程序看起来就像任何其他Metro风格应用程序一样。
JavaScript中的用户控件几乎与C++及.NET中的控件不相上下。有些控件对于HTML渲染引擎而言是固有的,而另外一些控件则是用JavaScript编写的。这些基于JavaScript的控件都是基于div的,非常像那些使用jQuery创建的控件。
应用程序容器和应用程序权限
Metro风格应用程序运行在被称为“应用程序容器”(app container)的环境中。这似乎取代了由基于Win32应用程序所使用的窗体环境。
大多数API调用被直接发送给底层内核。然而,有些调用将被通过系统代理(system broker)路由。系统代理确保应用程序只能访问那些经用户已批准的功能。例如,当某个应用程序首次尝试访问摄像头时,服务代理(service broker)将提示用户以获取他们的批准。应用程序必须包括一份清单,其中注明该应用程序可能需要的所有限制服务。这种模式对于移动设备开发者而言将是非常熟悉的。
所有Metro风格应用程序都会运行在WinRT的应用程序容器中,而且会受到系统代理的监控,甚至连那些用C++编写的应用程序也不例外。该思想是为了限制应用程序破坏系统的能力。虽然也许并不是不可能的,但是在WinRT下创建恶意软件与在Win32中相比将会难得多。
所有Metro风格应用程序必须进行数字签名
不允许匿名应用程序。应用程序为了测试可进行自签名,但是当它们出现在应用商店里时,它们就必须使用真实证书进行签名。
译注
[1] charm,微软已将“CHARM”注册为计算机、软件产品、电气和科学产品类商标。微软将CHARM描述为计算机程序、图形用户界面软件和操作系统程序。在触摸版Windows 8中,charms在屏幕右侧;在传统版(使用鼠标和键盘)Windows 8中,charms出现在屏幕左侧。charms包括:Search(搜索)、Share(分享)、Start(开始)、Devices(设备)、Settings(设置)。详见微软申请Windows 8功能charm注册商标(图)。
查看英文原文:WinRT: An Object Orientated Replacement for Win32
译者 高翌翔 基于.NET平台进行Web应用程序设计、开发,关注敏捷开发和架构设计,及各种提高代码可维护性的最佳实践。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)