那个我们爱的Silverlight

写这东西多少有点跟风的意思,不过最近的事还有大家的话多少让我回忆起一点对SL的旧感情。

 

离开微软的时候我巴巴地主动把手里写的SL控件(Menu/MenuItem)邮件给SL组的人,其实那时候都已经决定要走了,然后还给他们留了私人邮箱,说以后有问题还可以找我,虽然到现在也没看他们用上。所以说说实话我从内心深处是希望SL好的。

 

做为一个纯粹的技术人员,我看到的SL1.0是一个简单但是充满希望的产品,到了SL2我看到的就是一个曲意攀附.net的商业化妥协产物。

好吧,技术人员还是谈技术吧。不知道大家记不记得SL1.0里面的这个用法:

item["ItemControl.source"]=//...

意思是ItemControl为其中的item附加了一个属性,当然因为JS的特性,ItemControl.source必须写成字符串的形式。提起这个是为了说,其实SL当年的志向并非一个UI framework或者浏览器插件那么简单,它是想做一个类似CLI的运行时。

 

Silverlight运行时最初设计的基础就是Dependency Object和Dependency Property(简称DO和DP),估计接触过Silverlight的弟兄们多少对这两个东西的存在应该是存疑的,估计也很少有人愿意去理解它们背后存在的道理。

其实相比JS用属性字符串名去访问属性,DO/DP是一个更加高效的动态语言运行时实现,你可以根据属性名去查找属性值,也直接根据DP对象去查找一个属性值,这比属性名快速的多。这个体系允许你在任何对象上添加任何属性,这是比较接近动态语言特性的。——是的,这两个概念根本就不应该让程序员去知道和理解,这是语言运行时的实现方式。

 

到了光芒万丈的Silverlight2,这个清晰的技术发展路线被扭曲了,微软的老板们只关心一个结果:开发者可以用C#开发Silverlight。当然也这也是无数程序员愿意看到。但是从来不曾有人追究到底如何去实现这件事。

 

如果SL希望继续走它的"运行时"伟大梦想,它要做的事情就是在DO/DP体系上实现.net CLR,大家都知道在一个更加"动态"的运行时上实现一个更加不动态的运行时是可行的。另一条路,则是在CLR上实现DO/DP,这样做的直接后果是C#仍然跑在.net CLR上,但是必须用奇怪的语法去访问SL对象:

Control.getDependencyProperty(new DependencyProperty("width"))

但是我想是个人都知道前后两种方法哪个工作量更大。

而且那些奇怪的语法并非无法修补——只要你愿意为每个属性写一个getter/setter

 

看过SL源码的人一定都知道SL团队最终做了怎样的选择,对于只有几十个控件SL而言,写几个getter/setter不过是一个程序员几天的工作量而已。我不曾参加SL团队,所以我不知道什么内幕消息,但是结果大家有目共睹——SL团队最终选择了饮鸩止渴的做法。

 

于是SL团队当然地以极高的速度完成了引入C#支持的任务,这对SL团队而言,我想也是极其重要的Achievement。坏处?坏处就是,当初那个做"运行时"的构想终结于此,还有就是以后每一个控件的每一个属性,都必须有一个DependencyProperty和一组getter/setter,这还没完,微软还必须维护SL中的这个精简版CLR——事实上,此后很长一段时间里MVP和微软的人都在解释这个被阉割过的CLR跟.net CLR之间的关系。

 

SL在UI编程模式的设计和抽象方面做的过于优秀,即使如今的HTML5,我也觉得远远不及,UI模型不是靠一两个Sample就能说清楚的,HTML5再好,也不过是多了几个标签——说实话早该加了,只是W3C不够给力而已。

 

看到IE9声明支持HTML5大家一副心慌的样子我笑了,IE什么时候支持过Silverlight了?如果不是同样打着MS的标志,恐怕大家根本就看不出SL这东西其实跟IE是一个公司的吧?就算微软的IE不去支持HTML5,估计结果也是IE9团队解散或者一帮人没事混日子,绝不可能出现IE支持Silverlight这一出戏。

所以说,搞死Silverlight的绝对不可能是HTML5,只能是Silverlight自己。

 

 

posted @ 2010-10-31 23:43 winter-cn 阅读(3717) 评论(14) 编辑 收藏

 回复 引用 查看   
#1楼 2010-10-31 23:45 Tony Zhou      
跟着微软的宿命啊,微软在.net上的投入也很少
 回复 引用 查看   
#2楼 2010-11-01 00:51 Pandora      
用过WPF的人应该不会觉得DP是什么新鲜玩意儿吧。SL就是个WPF/E而已。
至于HTML5,引用如下:
---------------
在本周举办的微软专业开发者大会(Professional Developers Conference)上,微软曾经力推的Silverlight受到了冷遇,Silverlight 5的发展只在会议开幕的主题演讲上被提及了一下,此后就销声匿迹了,没有一场会议用来专门讨论Silverlight 5。而从讨论风向上来看,软件帝国显然已经把目标转向了HTML5,关于HTML5话题的讨论热火朝天,CEO鲍尔默更是公开表明:“HTML5是促进前后端之间独立和创新的平台粘合剂。”

是Silverlight真的已经变得不重要了还是HTML5变得更重要了?有媒体就此问题向微软服务器与开发工具事业部负责人Bob Muglia做出了提问。

“Silverlight是我们针对Windows Phone的开发平台,同时在多媒体以及行业应用方面Silverlight也有着其一些独一无二的优势。”Muglia给出了一个算是较为明确的答复。

不过当提到Silverlight作为跨平台开发工具的时间周期表时,Muglia道出了实言:“我们的政策发生了转变。”

“Silverlight仍是一个跨平台解决方案,仍将在各种各样的操作系统和浏览器上继续工作、发展。”Muglia说道:“不过HTML5将是未来跨平台解决方案的唯一真理,包括苹果的iOS平台。”
----------------------
其实也应该早就看出来了,这个地球上不需要第二个蹩脚的浏览器插件了。FLASH也出了HTML5转换器,插件时代已经彻底过去了。

我们也只是有些怀念而已。SL,一路走好。HTML5,我们来了。

 回复 引用 查看   
#3楼 2010-11-01 00:56 RMay      
呵呵,本来,微软也许只需要一个能够实现SL的JS库就足够了
跨浏览器+强大的XAML+优秀的UI编程模式……
html5又何惧?只不过是基于html5搞另外一个js库而已

 回复 引用 查看   
#4楼[楼主] 2010-11-01 01:21 winter-cn      
@Pandora
我是不同意SL是WPF的附属品的 我也对HTML5寄予了很多希望 但是从技术上 我觉得HTML5有些点还是不如XAML的

 回复 引用 查看   
#5楼 2010-11-01 01:59 Ivony...      
引用winter-cn:
@Pandora
我是不同意SL是WPF的附属品的 我也对HTML5寄予了很多希望 但是从技术上 我觉得HTML5有些点还是不如XAML的



SL和WPF应该是一起开发的,DP也的确是里面最大的亮点之一。但所谓的商业化妥协倒不敢苟同,毕竟.NET只需要一套标准的体系,而不是多个互不兼容的东西。DP的附加属性在现有的语法上是很难做到的,如果强行发明一种新的基于DP的“动态语言”。带来的不仅仅是一种新的语言更是一种新的编程范式,这个动静太大了。

至于为每个DP写setter和getter,其实代码生成器很容易干这事儿,虽然好奇微软为啥还不提供一个工具,但实际上代码段(CodeSnippets)就足够方便了。


时代过去一说我也不敢苟同,毕竟在可预见的很长一段时间里面,网银还是会让你装插件的。

我们说插件可以提供的大部分功能已经可以由HTML5和相关标准来提供了(动画、视频),但事实上这只是Flash的终结。SL作为一个轻量级的,跨平台的,与.NET极为相似的跨平台表现层技术,短期内是不太可能过时的。除非微软真的打算做平台封闭政策,而且手机、XBox什么的都不做了。

 回复 引用 查看   
#6楼 2010-11-01 09:19 Muse      
引用winter-cn:
@Pandora
我是不同意SL是WPF的附属品的 我也对HTML5寄予了很多希望 但是从技术上 我觉得HTML5有些点还是不如XAML的


唉~~
亏你还在微软干过,对SL和WPF的密切关系理解的还不如我这个连微软大门都没见过的。

 回复 引用 查看   
#7楼 2010-11-01 09:58 vpoint      
大大对WPF有什么看法呢?做桌面开发或者C/S应用方面甚至简单游戏,我觉得WPF具有独特的魅力,5年内应该保持活力吧?
我觉得sl上所谓getter setter 问题 与wpf的标准实现相脱离是不对的。

很明显 sl的dp 方式是完整的继承自wpf的,wpf的dp如此使用 sl没有理由再维护一个全新的容易混淆的方式。

至少我对wpf和sl上一致的 propdp tab tab的代码片段输入操作没有什么意见。

 回复 引用 查看   
#9楼[楼主] 2010-11-01 12:06 winter-cn      
引用韦恩卑鄙 v-zhewg @waynebaby:
我觉得sl上所谓getter setter 问题 与wpf的标准实现相脱离是不对的。

很明显 sl的dp 方式是完整的继承自wpf的,wpf的dp如此使用 sl没有理由再维护一个全新的容易混淆的方式。

至少我对wpf和sl上一致的 propdp tab tab的代码片段输入操作没有什么意见。

跟WPF一致未必就是合理的啊

 回复 引用 查看   
#10楼[楼主] 2010-11-01 12:10 winter-cn      
引用vpoint:大大对WPF有什么看法呢?做桌面开发或者C/S应用方面甚至简单游戏,我觉得WPF具有独特的魅力,5年内应该保持活力吧?

未来是不可预知的 呵呵
与其把未来押在某项特定技术上 不如真正领会它的思想
即使SL和WPF哪天都死了 我相信XAML里面那些优秀的设计能进入HTML或者其他技术中。

 回复 引用 查看   
#11楼 2010-11-01 12:35 WCF技术联盟      
一直没看好它,也一直没有去学
 回复 引用 查看   
#12楼 2010-11-01 13:41 DiggingDeeply      
领悟设计思想,确实是精髓。
 回复 引用 查看   
#13楼 2011-03-17 23:20 无厚之刃      
以前我看到你这篇文章的时候不明白其中的意义,但今天,在自己实现过一个依赖属性系统之后,我真正的理解“动态”二字的分量
 回复 引用 查看   
#14楼 2011-05-05 21:09 banana.totolv      
GOOD