NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Windows 运行时的设计细节

  • 2011-09-28
  • 本文字数:2177 字

    阅读完需:约 7 分钟

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

两年前,微软从一个愿望开始了 Windows 运行时(WinRT)的研发工作,此愿望是,建立一个更好的开发平台,让开发者在此平台上使用具有丰富智能感知功能和优秀调试功能的工具来创造快速、流畅、可靠的应用程序,而且开发者可自由选择所使用的语言和库。最终结果是产生了一种架构以及一组可以从.NET 语言(C#、VB.NET、F#)、C++、以及 HTML/JavaScript 调用的 API。所有这些语言都会对 WinRT 的设计产生影响。

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

语言投射(Language Projection)表示对于每种已支持语言的 WinRT API 视图。通过 Visual Studio 11 的智能感知,在“Windows”命名空间下可找到那些推荐的用于创建 Metro 风格应用程序的 API。

在 BUILD 开发者大会上,Windows 运行时开发经理 Martyn Lovell 通过题为 “包围 Windows 运行时”的演讲介绍了 WinRT 背后的设计原则:

  • 任何耗时超过 50 毫秒的事情都应该通过使用了 Async 关键字的异步调用来完成,以确保流畅、快速的应用体验。由于即便当异步调用的情况存在时,许多开发者仍倾向于使用同步 API 调用,因此在 WinRT 深处建立了使用 Async 关键字的异步方法从而迫使开发者进行异步调用。
  • 应用程序彼此之间被更好地隔离开,从而使得一个应用程序的性能不会影响到另一应用程序,同时也是为了获得更好的安全性。隶属于某个应用程序的运行时对象不能被暴露给另一应用程序,除非通过借助标准的操作系统级的通讯信道 Windows 契约(Windows Contracts)来完成。
  • 基于平台的版本控制(Platform-based versioning)确保应用程序在不同版本的 Windows 上运行良好。版本控制信息包含在 WinRT 元数据中,而且智能感知会根据应用程序的目标版本来公开功能,因此开发者无需查阅其他文档就能知道,对于某个特定版本的 Windows 而言,到底有哪些类和方法是可用的。

关于类型,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 界面运行在一个不可重入的单线程之上,然而应用程序的其余部分可以从线程池中使用由运行时环境所自动提供的多线程。

Windows 运行时体验团队的 Harry Pierson 和公共语言运行时团队的 Jesse Kaplan 在 BUILD 开发者大会的另一题为“在C#和Visual Basic 中使用Windows 运行时”的演讲中,介绍了一些使用.NET 语言对WinRT 进行编程的细节。

据Pierson 透露,.NET 对于WinRT 的重大影响在于,许多设计准则被从.NET 中借用过来。例如,通过使用基于.NET 元数据格式更新版本的元数据增强了WinRT 库。就像Silverlight 一样,为了创建Metro 风格应用程序,WinRT 会使用XAML 框架。由于在运行时与.NET 之间存在直接映射:基本类型(primitives)、类(classes)、接口(interfaces)、属性(properties)、方法(methods)等等,并且开发者无法看到那些存在的差异,因此使用WinRT 的.NET 应用程序将会有宾至如归的感觉。

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

在Windows 8、或是后续版本的Windows 中将提供一种经典应用程序与新的触摸友好的Metro 风格应用程序共存的混合环境。基于Metro 风格的未来的Windows 应用程序将受益于Windows 运行时所提供的公共基础设施,开发者必须针对一套唯一的API 进行编程,而对于不同语言会略有差异。在与过去保持兼容性的同时,又为未来提供新功能方面,这是微软所做的最好尝试。

查看英文原文: Design Details of the Windows Runtime

2011-09-28 10:452503
用户头像

发布了 55 篇内容, 共 18.1 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

小程序游戏卡的“掉渣”,华为云耀云服务器L实例助你重回丝滑体验!

YG科技

Java基础面试题【分布式】Kafka

派大星

Java 面试题

从职场到创业,请查收华为云这份高效创业指南

YG科技

“跨”入蓬勃生长新时代,华为云耀云服务器L实例赋能跨境电商

平平无奇爱好科技

项目开发冲刺难度大?华为云这款轻量应用服务器助力大好“收官战”

平平无奇爱好科技

降维打击_友商_?华为云这款轻量应用服务器性能全面升级

平平无奇爱好科技

年终项目抢进度?华为云这款轻量服务器全面冲刺全年目标

轶天下事

小程序游戏如何选择服务器?华为云轻量服务器重塑体验

轶天下事

跨境电商网站运营最苦岗位?华为云这款轻量应用服务器轻松胜任

平平无奇爱好科技

年终企业采购潮来袭!华为云这款轻量应用服务器值得入手

轶天下事

不让竞品活了?华为云这款轻量应用服务器更强规格来袭!

YG科技

Kubernetes 漫游:理解 ConfigMap

Phoenix

Kubernetes, 云原生, eBPF

小程序开发更吸“金”,华为云这个轻量应用服务器功不可没

YG科技

全面宣战!华为云耀云服务器L实例推出更强规格

YG科技

英特尔CEO:以“系统级代工”满足“芯经济”时代客户需求

E科讯

高效率低成本!网站开发还得仰仗华为云这款宝藏工具

平平无奇爱好科技

还迷信传统服务器开发小程序游戏?华为云耀云服务器L实例才是“正道”

平平无奇爱好科技

跨境电商网站旺季爆单崩溃?华为云这款轻量应用服务器值得拥有

平平无奇爱好科技

数字化尽头是轻量应用服务器,华为云耀云服务器L实例打开无限可能

轶天下事

年底续费服务器太贵?华为云这款轻量应用服务器正是最佳入手时候

轶天下事

轻量应用服务器领域,这款产品何以被冠“国民级”美誉

平平无奇爱好科技

电商网站防崩溃秘诀来袭!华为云这款轻量应用服务器稳赚不赔

轶天下事

Amazon EC2 新手初探:初始设置之密钥对

王强

亚马逊云服务 Amaozn EC2

“出海”在即?华为云这份跨境电商运营指南让新手商家少走弯路

平平无奇爱好科技

双11电商节未“战”先“卡”?华为云这款轻量应用服务器是时候亮出“必杀技”

轶天下事

2023双十一爆单攻略,中小跨界商家别错过华为云捞金最佳机遇.

YG科技

Android下Linux创建进程的姿势(下)

江湖修行

android Linux Kenel 移动端 #面试 #前端

穿越经济寒冬,华为云这款轻量应用服务器助力企业破局新生

平平无奇爱好科技

2023年双11大促,华为云耀云服务器最佳抄底时间来袭!

YG科技

同程面试:说一下多态的实现原理?

王磊

Java 面试 java面试

Dapp技术开发介绍

区块链技术

Windows运行时的设计细节_.NET_Abel Avram_InfoQ精选文章