Scott Guthrie谈Silverlight(一)

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Scott GuthrieSilverlight(一)

译者:程化

Scott Guthrie:微软.NET研发部门的公司副总裁,负责Visual Studio开发工具,以及用微软.NET框架创建客户端和Web程序相关技术的研发。虽然身为高层管理人员,然而,Scott Guthrie保持了对技术细节相当的把握能力,只要看过他的博客,相信你对这点就会深有体会。

Charles:好的,我们又回到了Visual Studio世界。你是谁?这里都在发生什么事?

Guthrie:没问题。我的名字是Scott Guthrie,微软研发部总经理。基本说来,我管理着若干团队,他们创造了CLR.NET Compact FrameworkASP.NETWindows Presentation FoundationWindows FormsIISCommerce ServerSilverlight,以及开发Web ClientVisual Studio工具。

Charles:不可思议。啊,我们刚刚采访过你的老板,Soma,在Channel 9上谈了Orcas,恭喜你的工具发布了Beta 1版。

Guthrie:本周要出三个大东西。Orcas Beta 1,这已经发布到Web上了。和Windows Longhorn一起工作的IIS 7,明天,周三,应该就在Web上了,也许是你看到这个视频的前一周。Silverlight也要发布了,那应该是下周,也就是看到这个视频的那周。最近几周真是头疼。

Charles:让我们谈点关于Silverlight的东西,比如,我们退回一步,给我讲讲什么是Silverlight,怎么样?

Guthrie:没问题。Silverlight基本上提供了一个跨平台,跨浏览器的插件。它可以在MacWindows上工作。它可以在IEFirefoxSafari上工作,将来还可以在Opera上工作。基本上,它使你能够创建在浏览器中运行的,比现在丰富得多的用户体验。你可以加入媒体,这意味着非常丰富的视频和音频支持;你可以流化视频,在视频上添加非常炫的效果,从而用非常非常丰富的方式在你的站点上把视频融合进来。它提供了非常丰富的矢量图形系统,这样你就可以做出很炫的图形,构建出用HTML无法实现的那种用户界面。它被设计为在一个Web页面中工作,所以很显然,你也能够使用HTML。我们将在MIX上宣布的一件重大事情是,我们将发布和Silverlight协同工作的.NET框架版本。你可以针对各种体验编程,不管是HTML、媒体还是矢量图形;不管是在客户端还是跨平台的方式。你可以使用任何托管语言,你可以用C#VB,你可以用PythonJavaScript,你还可以用Ruby

Charles:好的。回到问题上。首先,我想问的问题是,这需要一个大大的下载包,对吗?大家也会问,.NET框架怎么能够在Mac上运行?

Guthrie:好的,Silverlight有很多特性,如果你加上所有的图形特性,所有的媒体特性,所有的运行时特性,所有的语言特性,这是一个相当大的特性集。从.NET框架的角度来看,我们把LINQ包括了进来,我们还有网络协议栈,有线程模型,我们有基础类库,我们有许多特性。我们设计整体体验的方式是,把包含所有这些特性的下载包压缩到4M大小。随着经验增加,我们可能重新划分各部分,因此核心可能还会更小些。但是,我们下周发布的,包含了所有这些特性的Alpha版本,估计大小是4M,它被设计为花20秒或更少的时间就可以安装到系统上。基本上你有一个网页,点击一个链接,下载下来,这中间没有用户授权文件之类的东西,从开始到结束,都是非常用户友好的安装,基本上从开始下载到安装到系统中,我们希望花2030秒,然后就可以用了。

Charles:这太让人吃惊了。从Windows的角度来看,我现在可以从某种程度上马上联想到你们如何裁剪基本类库来达到要求,也许用的是微型CLR,也许不是?

Guthrie:我们并没有使用微型CLR,实际上,不管是Mac还是Windows版本的Silverlight,其正式下载都不要求在你的系统上安装有.NET框架。它也不要求在你的系统上安装有某种媒体播放器。下载包中有在vanilla操作系统(译者注:Apple的操作系统)上运行所需要的一切,不用额外安装任何东西。

Charles:太令人惊讶了。

Guthrie:是的,我们做了许多工作。但是,我想要指出的另一件事是,我们随Silverlight一起发布的CLR版本是基于当前人们在使用的完整桌面版CLR

Charles:哪个版本?Orcas

Guthrie:啊,基本上是,你可以认为它来自Orcas源代码分支。基本上那是你运行Visual Studio,运行Blend,运行ASP.NET同样的浏览器,同样的类型系统,同样的即时编译器,垃圾收集器也是在Windows上发布的客户端版本,它给了你非常、非常、非常棒的性能。一般说来,我认为性能有多好依赖于你使用的测量基准,但是可以说在某些情况下,它的性能比JavaScript要高3001000倍。听起来很夸张?但这是因为我们可以运行非常高效的代码,你知道,比起同类竞争性插件产品来说,要快1015倍。所以,这是个非常快的执行引擎。而且,你有可用的、丰富的.NET编程环境。性能是一回事,然而,有丰富的特性也很重要,你可以用LINQ加入数据,你可以用WPF把数据绑定到界面控件上,你可以加入媒体,你可以在所有这些东西上应用向量变换,所有这些都在浏览器中,在沙盒环境下,这非常强大。

Charles:这简直不可思议地强大。

Guthrie:是的,我们非常兴奋,能够创建它和发行它,感觉非常好。

Charles:真酷,再次,我们回顾一下刚谈的东西,作为一个.NET开发人员,我可以用自己喜欢的.NET语言,写出非常有趣的编译后Web程序,使用Web UI,这叫做Silverlight。这简直不可思议,我认为这太非凡了,我想问的是,你们是怎么做到的?我是说,你是怎么让CLR和相关的技术可以运行在不同平台之上的,当然,CLR一开始就被设计为平台无关。那么,让我们谈谈这事,IL、别的什么?你们怎样做的?

Guthrie:好的。.NET框架中二进制代码的工作方式就是控制IL文件格式和引入的语义。CLR一直就被设计为基本上CPU中立、平台中立,所以,从核心架构的角度来看,我们做了很多工作。从运行时的角度来看,我们也做了很多工作,大约从.NET 2.0版本开始,我们就引入了一个类似于平台抽象层,作为框架的一部分,我们称之为平行层。在核心引擎中,任何时候我们需要进行OS操作时,我们都通过这个平台抽象层进行。这给了我们用不同层替换平行层的能力,基本上我们让顶层代码总是可以运转。我们架构CLR的基础,以及我们的目的,就是能够从单一源代码出发,产生出针对不同平台的二进制文件版本。包括针对不同版本的Windows,我们也可以使用同样的平台抽象层方法。所以,我们在这儿做了很多工作,给了我们很大的灵活性。这也意味着我们加进去的所有益处,CLR拥有的性能收益,甚至是为多核运行、多CPU运行所作的考虑,为客户端应用创建的超级高效的垃圾收集,所有这些好处,在Silverlight中都可以自动获得,这极大地有助于性能,极大地丰富了某些特性集。

Charles:有趣。你提到了架构,这就使事情深入了。那儿有一张白板。请你画给我们看看,画画Silverlight从架构上来看是怎样的,比如,你刚刚提到的东西至少已经有个轮廓了,CLR的架构,我们习惯在底层使用CLR和基础类库,但是,这里用的东西更紧凑些。我对了解这些东西很有兴趣,比如,这里的CLR和桌面系统的CLR不是一回事,对吗?

Guthrie:对,二进制文件不是一个,和桌面版本的二进制文件不同,但是,它们来自同一个代码树分支。我们确实有条件处理,在核心代码树上,我们可以为SilverlightCLR,为完整桌面版本的CLR进行构造。是的,我们确实从SilverlightCLR中排除了一些特性,比如,我们没有统一的角色,因为对跨平台应用和浏览器来说,这没有意义。我们也没有.NET 2.0中的服务器垃圾收集器,这是专门为服务器场景进行了优化的垃圾收集器,针对ASP.NET这样的东西,我们不需要发布它,因为在这里,只需要在浏览器中运行。而且,对于程序加载语义,也就是如何加载代码的机制,我们重写了相当一部分,我们没有Fusion,没有全局程序集缓存,所以,这里当然存在一些变化,但是,从类型系统的角度来看,从即时编译器的角度来看,以及从垃圾收集器的角度来看,基本上都来源于同样的代码树路径。在表层,基本上我们有裁剪过的完整版本.NET框架类库。你没有现在CLR拥有的1500020000个类或API,有的是它的一个子集,经过针对构造基于浏览器程序进行特别裁剪的子集。但是,我们有集合、IO,以及线程,以及正则表达式引擎,以及XML协议栈,网络协议栈,我们也有同样的命名空间,同样的核心类型或类,它们都和现在你构造一个客户端应用程序所使用的相同。但是,我们在Silverlight包中没有一些东西,例如,NT服务器的API,或者那些对于在沙盒环境下运行的浏览器明显没有意义的东西。当你从UI的角度来看时,有基础的WPF的子集,UI框架,同样意义下的CanvasXMAL、元素概念。这些概念都一样,命名空间也相同。我们的目标是:如果你针对这些子集编程,你构造出的代码将不光能够在Silverlight中运行,也能在完整的WPF应用中运行。在Silverlight中,我们努力要保证的一件大事就是:真正最大化你的技能集合。你了解现在的.NET,很好,你已经了解了要将自己的应用以非常丰富的方式运行在浏览器中是多么的容易,不需要学习一大堆新API。同样,一旦你学会了使用SilverlightAPI,你就知道自己也可以将这些知识应用到完整的.NET框架应用程序上。所以,我认为从现有的.NET开发人员的角度来看,收获是巨大的,因为这意味着你可以在客户端运行.NET代码,在Web服务器上运行.NET代码,在数据库中运行.NET代码,在独立的WPF客户端运行.NET代码,你可以在所有这四个不同的层次使用相同的语言,相同的工具集。一旦你学会了如何使用泛型,泛型集合,了解了如何使用LINQ,或者知道如何使用线程,诸如此类,你可以把这些知识用到任何地方。

Charles:那么,插一句,在Silverlight中,你们确实支持Systme.threading

Guthrie:我们确实有System.threading命名空间。这里有些小的裁剪,我们不支持完整的线程能力,比如,不支持创建线程。让我们回头看看,当前构造浏览器程序时有一类很棘手的事情,这类挑战是如何处理向服务器发出的回调,如何避免此时阻塞UI。如果你用的是JavaScript编程,一个挑战就是,你的代码运行于其上的线程就是浏览器用来绘制屏幕的线程。因此,如果你在JavaScript中写了一个无限循环,或者在JavaScript中使用了某种需要很长时间进行计算的东西,你的浏览器UI就不会被刷新。你的UI看起来就非常迟钝,这就给了浏览者一个暗示,表示你可能写了一个无限循环。当试图写负担沉重的Ajax应用时,这是个很大的挑战,因为你总是要回到服务器上取得更多数据,你知道,如果你对这种操作应对不当,它就会真的造成性能问题。我们在Silverlight中提供的一种能力是——在后台完成任务。这使用了你可能现在就已经了解的threading命名空间。它提供的能力让你可以这样说:喔,当数据返回时调用这些东西,获取一个可用线程,在上面进行操作。实际上,当需要进行绘制时,我们会发送一个完成信息,并且(手机响了起来……),对不起。

Charles:没关系,你也有个人生活,现在已经快7点钟了,我们还在让你接受Channel 9的采访。

Guthrie:这类场景,这类更加高级的场景,这类通向更加丰富的编程环境的场景,就包含在Silverlight中。从.NET的角度来看,这绝对不是微型CLR,绝对不只是有那么10个类看起来像是.NET,这就是.NET,并且给了你巨大的能力。

Charles:非常酷,太棒了。这点让人印象非常深刻。你可以获得像客户端已经安装了的CLR同样强大的能力,反过来说,在没有安装CLR的客户端上也能运行Silverlight

Guthrie:是的,从我们的角度来看这是一个关键点,我们努力提供一种无摩擦的.NET部署,并且,让你可以使用HTML,使用丰富的图形,使用媒体,真正创建出某种目前无法做出的次世代体验。

Charles:让我来问这个问题,假设我在Windows上安装了Silverlight,出于某种原因,我们不去探讨具体原因,我之前没有安装.NET框架。然后我试图运行一个朋友给我的,要求.NET 2.0框架的应用程序。现在,我的问题实际上是:这些二进制程序都运行在怎样的沙盒中?典型说来,是CLR的程序装载器在起作用,Silverlight的装载器会找到它们吗?

Guthrie:沙盒是同一个,除非你启动Silverlight应用,否则和Silverlight一起发布的CLR不会被牵扯进来。这是个要非常小心处理的问题,我们想要避免偶然安装的东西与系统中其他东西发生冲突的任何机会。实际上,如果你需要,你甚至可以在同一个进程中既装入完整的.NET框架CLR,也装入Silverlight,这些代码会和平共处。

Charles:喔,这是重要的一点。

Guthrie:是的,你可以这样做,这和目前的情况不同。当前情况下,如果你把.NET 1.1.NET 2.0装入同一个进程空间的话,会出问题。你绝对可以把Silverlight装入.NET 1.12.0存在于其中的进程。这是个很大的架构优势,它们不会冲突,不会造成任何问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值