一张破图胜过长篇大论(译文:关于Windows 8的新编程体系)

2023-12-26 13:30

本文主要是介绍一张破图胜过长篇大论(译文:关于Windows 8的新编程体系),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

译者:linger(sysu大三 )

  注:本文是DOUG SEVEN写的关于Windows 8新的编程体系的一篇文章《A bad picture is worth a thousand long discussions》的译文。

  在Build会议中,我跟顾客,还有其他的参与者,Microsoft的mvp,Microsoft的地方主管,Microsoft的工程团队成员谈了很多。其中谈的最多的是,Windows 8的平台和工具的技术盒子图。如下所示:

  现在我告诉你,我曾画过很多这种软件架构图,当然并不是很容易画出来的。这种图从技术的角度来说永不可能是精确的。显然没有一种简单的方式对这种复杂的系统来画一张技术上精确无误的框架图。结果是,你的框架图是会漏掉很多盒子的(漏掉很多在整个体系中实际存在的技术)。不幸的是,那正是这里所发生的事(Windows 8的技术盒子漏掉了一些实际存在的技术)。

  谈话中其中之一的话题是围绕着技术盒子中绿色部分(即是Metro风格的应用程序)为何没有出现.NET和CLR。是不是在Metro风格的应用程序中,VB,C#在编译和运行过程都不兼容WinRT?这意味着.NET框架的终结么?

  还有一些研究过二进制码的质疑是否有两个CLR。Windows 8究竟在搞什么呢?

  昨晚我跟.NET CLR的团队的成员们交流过(这里不说出他们的名,不过请相信我,他们肯定明确知道这个体系是如何运行的),下面是一些内部消息。

  基本事实:

  只有一个CLR。每个应用程序或者应用程序池围绕着一个进程旋转,而CLR就是在该进程内部工作的。这意味着,同时运行的一个Metro风格的应用程序和一个桌面模式的应用程序用的是相同的CLR二进制码,只不过是CLR的两个不同的实例。

  .NET4.5在桌面模式的应用程序和Metro风格的应用程序都可以用到。不过有点不同。Metro风格的应用程序使用的是最适合称之为另一个.NET的Profile (比如说桌面模式的应用程序使用的是.NET Client的Profile ,而Metro风格的应用程序使用的是.NET Metro的Profile)。事实上并不是不相同,但在Metro风格的应用程序中.NET的实现像是另一个Profile一样。

  不管一个桌面模式的应用程序或者Metro风格的应用程序是不是.NET的app, 但都是编译成相同的MSIL(微软中间语言代码)。并不存在一个特殊的Windows 8的Metro的中间语言代码(就像CLR那样,只有一个MSIL)。

  下面是一张更准确的图(当然还是技术上不是精确的框架图)

 

  在这张图中,你可以看到CLR和.NET4.5都用到了用C#和VB写的桌面模式的app(蓝色部分)和Metro风格的app(绿色部分)。Silverlight仍然只能在桌面模式作为IE的插件运用到(当然,离开浏览器,它在桌面模式下还是支持的)。这幅图中另一个新添加的是DirectX,原来第一张图是完全没有存在的。DirectX在高级app中是一种很重要的技术,比如游戏。DirectX使得C++可以访问控制GPU。

  最大的疑惑,正如我所提到的,是跨越了了蓝色部分和绿色部分的.NET的使用。为什么会存在.NET Metro Profile(我起的名)呢?因为Metro风格的app运行在一个特殊app的容器中,该容器限制了应用程序的访问权限,从而保护了终端用户,防止受到恶意程序的攻击。就本身而论,Metro Profile其实是.NET Client Profile的一个子集,只不过是去掉了一些app容器中对于Metro风格程序不允许的权限。开发者如果习惯了.NET的话,会发现很容易使用WinRT,就像是这样子的,有一些引用的集合,然后去使用那些集合中的成员。

  Additionally, some of the changes in the Metro Profile are to ensure Metro style apps are constructed in the preferred way for touch-first design and portable form factors. (该句不知该怎么翻译)比如File.Create()。以前如果你使用.NET来创建一个新文件的话,你会使用File.Create(string fileLocation) 在磁盘上创建一个新文件,然后使用一个stream reader来创建以字符串形式存在的文本的内容。这是一个同步操作(你调用了该函数,进程就阻塞在那里,直到函数返回)。而如今的Metro风格的app的理念是,应该利用异步的编程来减少比如IO延迟之类的东西,比如上面提到的文件系统的操作。这意味着,.NET Metro Profile提供给你的不是同步操作FileCreate()。不过,你仍然可以调用File.Create()(或者是File.CreateNew()我也想不起来函数名),不过是异步操作。一旦回调函数被使用,你仍然可以打开一个stream reader然后对文件的内容视作一个字符串来处理,就像你所做的那样。

  最后,所有这些意味着,你会有一些选择,但你不会因此牺牲多少。你仍然可以建立.NET和Silverlight的app,正如你所习惯的那样,当然他们还可以在Windows上跑很多年。如果你想建立一个Metro风格的app,你有四种选择:

  1. Xaml和.NET(C#或者VB)。你不会放弃很多.NET的东西(记住,你只是抛弃那些在app容器中所禁止的那些),你还可以使用WinRT来访问传感输入和其他的系统资源。

  2. Xaml和C++。你可以使用你在Xaml和C++的技能来使用WinRT。当然你就感觉不到了.NET的好处,不过,有些人喜欢管理自己程序的垃圾回收。

  3. Html和Javascript。你可以利用你在UI方面的能力,在Javascript中调用WinRT来访问系统资源和传感输入。

  4. DirectX和C++。如果你在开发一个刺激好玩的游戏,你可以利用DirectX和通过C++跟WinRT来访问设备传感器和系统资源。

  以上是译文,若那些译的不好,敬请指正。下面在提供一些关于Windows 8的编程链接:

  WinRT and .NET in Windows 8

  Analyzing Windows 8 and WinRT

  A bad picture is worth a thousand long discussions

  Why is WinRT unmanaged?

这篇关于一张破图胜过长篇大论(译文:关于Windows 8的新编程体系)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/539576

相关文章

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win

Windows环境下安装达梦数据库的完整步骤

《Windows环境下安装达梦数据库的完整步骤》达梦数据库的安装大致分为Windows和Linux版本,本文将以dm8企业版Windows_64位环境为例,为大家介绍一下达梦数据库的具体安装步骤吧... 目录环境介绍1 下载解压安装包2 根据安装手册安装2.1 选择语言 时区2.2 安装向导2.3 接受协议