大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

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

关注

评论

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

VMware vCenter Server 8.0U3e 发布 - 集中管理 vSphere 环境

sysin

vcenter

后端程序员逆袭之路:巧用 AI 工具,拿下高薪 offer

飞算JavaAI开发助手

顶尖认证!Cloud Ace 培训师荣膺 Google Cloud 两项重量级培训师大奖

Cloud Ace 云一

云计算 谷歌云 谷歌云培训

2025上海国际电子元器件展览会

AIOTE智博会

新报告显示西班牙俱乐部在本土青训球员留用方面处于领先地位

新消费日报

Cloud Ace 荣获 2025 年 Google Cloud 大中华区年度国家合作伙伴大奖!

Cloud Ace 云一

Google Cloud 谷歌云 企业云服务 Google Cloud Next'25

从 Greenplum 到 StarRocks:头部金融客户如何通过架构升级实现“实时分析自由”?

镜舟科技

数据架构 金融 分析型数据库 StarRocks 实时分析

VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)

sysin

esxi

手把手教你安装部署金仓数据库KingbaseES

金仓技术

数据库 电科金仓 KingbaseES 金仓数据库

深入研究:京东图片搜索商品API详解

tbapi

京东API 京东拍立淘API 京东图片搜索API 京东图片API

刚学吉他的人怎么跟谱练习 如何用Guitar Pro软件深入了解乐谱

阿拉灯神丁

吉他学习 吉他谱 Guitar Pro Guitar Pro8 Mac乐谱制作软件

Lalamove基于Flink实时湖仓演进之路

Apache Flink

大数据 flink 实时计算

VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版

sysin

esxi

面试官:如果某个业务量突然提升100倍QPS你会怎么做?

不在线第一只蜗牛

程序员 面试

2025年智能合约玩法创新白皮书:九大核心模块与收益模型重构Web3经济范式

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

外贸企业怎么选网络专线? SD-WAN五大优势助力企业出海!

Ogcloud

SD-WAN 企业组网 SD-WAN组网 sd-wan专线 SD-WAN厂家

金仓数据库KingbaseES单机扩集群部署方案介绍

金仓技术

数据库· 电科金仓 金仓数据库

镜舟科技亮相 2025 中国移动云智算大会,展示数据湖仓一体创新方案

镜舟科技

人工智能 数据库 数据架构 中国移动 镜舟科技

如何使用AI辅助开发CSS3 - 通义灵码功能全解析

阿里巴巴云原生

css3

如何使用AI辅助开发CSS3 - 通义灵码功能全解析

阿里云云效

高并发秒杀系统设计:关键技术解析与典型陷阱规避

飞算JavaAI开发助手

AI应用突围,中小企业的新周期已至

新消费日报

JVM实战—线上FGC的几种案例

量贩潮汐·WholesaleTide

JVM

企业跨地域多分支组网难?SD-WAN轻松解决!

Ogcloud

SD-WAN SD-WAN组网 SD-WAN厂商 sd-wan专线 SD-WAN厂家

VMware ESXi 8.0U3e 发布下载 - 领先的裸机 Hypervisor

sysin

esxi

VMware vSphere 8.0 Update 3e 下载 - 企业级工作负载平台

sysin

vSphere

Android 16 应用适配指南

冉冉同学

android 安卓

观测云多步拨测最佳实践

观测云

可用性监测

DeepSeek大模型Prompt工程深度实践(开发者空间Notebook版)

华为云开发者联盟

昇腾 DeepSeek 华为开发者空间

商汤「日日新 V6」发布,国内最强多模态推理;三星新款「球球」机器人将接入 Gemini AI丨日报

声网

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