Chinaunix首页 | 论坛 | 博客
  • 博客访问: 551903
  • 博文数量: 609
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 4995
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-17 13:59
文章分类

全部博文(609)

文章存档

2011年(1)

2008年(608)

我的朋友

分类:

2008-10-17 14:22:14


  最近从微软传出的一件让人迷惑的事情是Don Box的一条几乎被抛弃的评论,他是SOAP结构一个主要的创立者,同时也是微软的XML标准组的一名设计师。当Don在巴尔的摩IDEAlliance XML 2002年会议上演讲的时候,他宣布微软已经开始开发一种新的语言,他把它叫做X#。他虽然没有提供关于这个新语言的任何细节,但是指出它会把XML作为.NET编程的头等公民来对待。
  
  雷蒙德(Redmond,微软总部所在地)之外的很多东西都还只是关于X#的推测,但是已经有足够的信息来让预测接近于这门语言的实际情况了。
  最初,XML社区里的很多成员认为,X#将会成为W3C的XSLT转换语言的替代品,用来将XML转变成HTML或者各种不同的XML的格式。但是,这不太像微软对.NET平台上强制编程模型的强调。而且,对这样一种转换语言的需求并不真的存在——XSLT这门丰富但是被公认为复杂的语言是大多数程序员需要学习的,这门语言核心用户的数量和.NET开发人员的数量比较起来要少得多。
  
  
  可能是XML结构描述的替代者
  
  XML社区的其他成员认为,X#更有可能是对当前XML开发一个更加基本的领域的扩展——后结构描述已验证信息集(Post-Schema Validated Information Set,Infoset)。一个XML的文档可以被看作是信息的结构集合,即Infoset。当XML最初作为文档元语言SGML的子集诞生时,它还不具有数据类型的概念——也就是说,你不能指定XML的标签应该包含数值数据,更不要说把数据限制为小数点后带有两位小数的十进制数。XML结构描述定义语言(XML Schema Definition Language,XSD)能够提供这个能力,对这个语言的研究工作是在XML规范自身仍在发展的时候开始的。但是经过了三年半的时间和大量口水大战之后,终于诞生了用XML编写成的用于XML文档的类型定义语言。
  
  XML结构描述的一个目的是描述一套规则,用来定义合法的XML文档由什么组成。将一个文档同结构描述进行对比检查的过程叫做验证,在典型的情况下,这一过程需要使用类型信息来创建二进制对象,这些类型信息被明确地编码进了XML元素自身里。因此,任何尝试要把标签的内容更改为预先专门指定的元素域(domain of the element)以外的字符串、日期或者数字的行为,都会生成一个能够被处理器所理解的错误(信息)。一旦文档通过了验证,它就能够被作为后结构描述已验证信息集(Post-Schema Validated Infoset,PSVI)。
  
  这些PSVI有很多有趣和有用的属性。对刚刚接触它的人而言,PSVI看起来和用起来都很像类,如此之像,以至于如果有合适的框架,你可以直接利用PSVI所具有的面向对象的能力轻易地创建一门非常强健的语言。由于结构描述是有效的和唯一的,只要它被打上叫做命名空间的唯一标签,所以在理论上,它就应该能够向描述对象能够做什么的命名空间附加一系列方法——这一系列方法自身可能会被定义为XML实体。
  不是没有先例
  
  
  
  还是有一些很有意思的先例能够用在这一方面的。Haruo Hosoya博士和Benjamin Pierce博士在2002年开发了一门叫做XDuce的过程语言(procedural language),它用和我刚才所提到的类似方式使用了结构描述的类型。Pierce博士后来和Vladimir Gapeyev、Michael Levin,以及Alan Schmitt一起根据XDuce开发了另一门语言,叫做Xtatic。Xtatic是对这门语言的小型扩展,它将匹配程序图的模式和常规表达式结合了起来。所产生的这门语言能够把XML文档作为PSVI载入,并使用相关的一套方法将其完成,再将它和其他任何CLR类型的类完全一样地对待,然后就把它输出为XML文档。
  
  如果这就是微软所考虑的,而且它能够实现这一构想的话,那么X#就会从根本上改变程序员开发代码的方式。就当前而言,在这样的语言里,类的设计是在设计阶段确定的,这样能够获得更好的运行性能和效率,但是会损失一些灵活性。有了基于结构描述的架构,应用程序事实上就能够被指定为XML序列,后者会包含链接到相关结构描述的参照。这样就能够根据内部设置而即时创建应用程序,或者使用处理指定情况的自动进程来生成应用程序,其各部分都是按需创建的。当然会有一个特定的初始化过程,但是一旦完成了创建,这些对象就会和它们所衍生出来的对象一样可行。要想看到正在使用的先例,你只需要研究.NET运行服务(Runtime Service)的结构就行了,在这个结构里,组件的MSIL是按需编译的。
  
  顺便说一句,这对于微软来说已经不是第一次尝试将XML用作全功能的编程语言了。Michael Corning、Stephen Mohr、Erik Fuller、Don Kackman和Michael John曾一度力推一个基于XML的结构,叫做Faceplates,或者按照Corning所习惯的叫法,基于结构描述的编程技巧。Faceplates是个根据Petri-Nets的理念而创建的(顺便提一句,这是根据数学家Carl Petri命名的,而不是你在生物课上看到的培养皿),并把状态转换(state transition)和XML用作创建复杂应用程序的词汇表。Faceplates使用了XSLT和Script,但是其实它也能够很好地使用任何状态转换和编程语言。基于结构描述的编程技术是否会走上X#这条路在现在还是个未知数,但是有了符合这种编程方法的XML,这样的预测不会很让人意外。
  
  
  仍然可能差一步
  
  现在的大问题是:X#会出现在你身边的.NET里吗?我不敢肯定它是否很快就会。微软现在的开发精力正放在未来几年的Longhorn操作系统上,由此可以判断,X#更有可能成为Visual Studio 2006的一部分。但是它还是值得等待的,因为X#很可能会最终在自己的领域里成为一门重要的语言,这就像对微软未来的影响一样。
  
  
  
  
  
  
【责编:admin】

--------------------next---------------------

阅读(269) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~