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

2023-12-26 13:30

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

一张破图胜过长篇大论(译文,关于windows 8的编程)

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

原文地址:http://dougseven.com/2011/09/15/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的容器中,该容器限制了应用程序的访问权限,从而保护了终端用户,防止受到恶意程序的攻击。就本身而论,MetroProfile其实是 .NET Client Profile的一个子集,只不过是去掉了一些app容器中对于Metro风格程序不允许的权限。开发者如果习惯了.net的话,会发现很容易使用WinRT,就像是这样子的,有一些引用的集合,然后去使用那些集合中的成员。

 

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

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

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

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

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

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

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

http://www.kuqin.com/windows/20110925/312121.html

 

http://blog.csdn.net/lmyhao/article/details/7303753

 

http://blogs.microsoft.co.il/blogs/sasha/archive/2011/09/15/winrt-and-

net-in-windows-8.aspx   WinRT and .NET in Windows 8

这哥们的博客好多关于win8的编程

 

http://ardalis.com/Analyzing-Windows-8-and-WinRT

AnalyzingWindows 8 and WinRT

 

http://dougseven.com/2011/09/15/a-bad-picture-is-worth-a-thousand-long-

discussions/

Abad picture is worth a thousand long discussions 好文章

 

http://stackoverflow.com/questions/7457371/why-is-winrt-unmanaged

stackoverflow关于Why is WinRT unmanaged?的各种说法

 

 

 

 

 

 

 

 

 

   

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



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

相关文章

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

揭秘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.