产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

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:452611
用户头像

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

关注

评论

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

共享

mtfelix

28天写作

模块一学习总结

Only

「架构实战营」

在 Ubuntu 上安装使用极狐GitLab Runner

极狐GitLab

CI/CD runner 极狐GitLab

架构实训营

ren

Spring中的事务Transactional,这样用真的对么?

xcbeyond

事务 28天写作 12月日更

AI安全领域的“雨山机车大赛”,改变了什么?

脑极体

全员客户成功

boshi

随笔杂谈

web安全之CSRF

喀拉峻

网络安全

JavaScript中的这些内置对象

你好bk

JavaScript 大前端 数组 html/css 12月日更

自我改变的意义

卢卡多多

28天写作 技术改变生活 12月日更

【架构师训练营】模块一作业

樰巳-堕~Horry

架构实战营 「架构实战营」

LongAdder解析

程序员历小冰

28天写作 并发’ 12月日更

了解学习 JSX 的工作方式

devpoint

React JSX 12月日更

《重学Java高并发》手写一个生产者消费者线程模型

中间件兴趣圈

Java高并发 生产者消费者模型

模块一学习总结

whoami

「架构实战营」

如何“对抗”听众的短时记忆

将军-技术演讲力教练

List 去重的 6 种方法,这个方法最完美!

王磊

【LeetCode】字母异位词分组Java题解

Albert

算法 LeetCode 12月日更

大白话解析 MySQL 中的 MCCC 机制

悟空聊架构

MySQL MVCC 28天写作 悟空聊架构 12月日更

[Pulsar] F# client的ProtobufNativeSchema实现

Zike Yang

Apache Pulsar 12月日更

IT 好文&好课分享

hackstoic

非专业的系统安全规范

张老蔫

28天写作

如何提升工作意义感?

石云升

28天写作 职场经验 12月日更

浅谈指标体系建设(二)

圣迪

指标体系 指标

保存并提交修改后的容器镜像

liuzhen007

28天写作 12月日更

2021年度人工智能最佳产品TOP10!百度飞桨EasyDL再获业界认可

百度大脑

人工智能

声网 X 远程超声:实时音视频解决基层“看病难” 推动医疗资源均衡化

声网

人工智能 音视频

【AI最前线】精准优质-资讯|分享|热议第43期

百度大脑

人工智能

36 K8S之角色控制访问

穿过生命散发芬芳

k8s 28天写作 12月日更

模块一作业

撿破爛ぃ

「架构实战营」

.NET 6新东西--nuget包验证

喵叔

28天写作 12月日更

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