AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

Javacv 音视频小工具 - 下载抖音视频

声网

Java 音视频 ffmpeg javacv

WeTest21年焕新钜惠活动福利你领到了吗?

WeTest

“盘古”走向产业山峦,打开了一串AI落地的新脑洞

脑极体

☕️【Java专题系列】「回顾RateLimiter」针对于限流器的入门到精通(含实战和算法原理介绍)

码界西柚

限流算法 Guava 9月日更 Gatelimitor

5 分钟,使用内网穿透快速实现远程桌面

星安果

内网穿透 Frp 远程控制

观测云品牌正式亮相,携手中国信通院共推国内可观测性概念与技术发展!

观测云

40 个 SpringBoot 常用注解:让生产力爆表

Java 面试 框架 Spring Boot 2

坚持客户第一!

鉴释

产品研发 静态代码分析

通过Kubernetes监控探索应用架构,发现预期外的流量

阿里巴巴云原生

Kubernetes 云原生

计算机操作系统学习笔记 | 进程与程序

Regan Yue

操作系统 9月日更

英特尔北京2022年冬奥会体验中心落成

科技新消息

百分点数据科学实验室:白酒零售行业商品搭售方案

百分点科技技术团队

2021最新版 Java面试题大全1000+面试题附答案详解,看完跳槽吊打面试官

Java 程序员 架构 面试 计算机

JavaScript 进阶(二)下下之深浅拷贝

Augus

JavaScript 9月日更

为什么渗透提权这么难

网络安全学海

php 网络安全 信息安全 渗透测试 安全漏洞

ONNX 浅析:如何加速深度学习算法工程化?

拍乐云Pano

人工智能 深度学习 音视频

【IM开源推荐】前微信技术专家打造的开源的即时通讯组件OpenIM

OpenIM

直播|实时音视频抗弱网技术揭秘

百度开发者中心

最佳实践 音视频 直播

Moviepy音视频剪辑:黑白视频的帧图像格式探究

老猿Python

Python 音视频 图像处理 引航计划 Moviepy视频剪辑处理

这本阿里JDK源码,已在阿里内部疯拿3个金奖,过这村没这店!

Java 程序员 架构 面试 计算机

使用分布式锁的正确姿势

张大彪

分布式锁

开源应用中心|这款小而强大的开源博客程序,简直让人爱不释手!

开源

相约重庆,2021 DEMO CHINA创新中国峰会倒计时六天

创业邦

博睿数据赋能数字化转型,用户体验升级需要有“温度”的技术

博睿数据

9月23日Atlassian大中华区用户大会20+位重磅嘉宾,15+场干货演讲大放送!

Atlassian

DevOps 敏捷 Jira ITSM Confluence

为什么要坚持日更?

石云升

9月日更

2021年8月券商App行情刷新及交易体验评测报告

博睿数据

捷报!亚马逊云科技DGL项目荣获2021OSCAR开源尖峰案例

亚马逊云科技 (Amazon Web Services)

云计算 开源

容器持久化存储训练营”启动倒计时!3天攻破K8s难点

阿里巴巴云原生

Kubernetes 容器 原生云

网络先行与创新之城:当“IPv6+”成为千行百业的数字化支点

脑极体

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