WinRT:Win32的面向对象替代品
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 注册商标(图)。
作者:Jonathan Allen 译者:高翌翔
查看英文原文:WinRT: An Object Orientated Replacement for Win32
相关博客文章:Windows Runtime(WinRT) 揭秘