F# CTP 版本的发布带来了哪些变化

     今天早上看到园子里首页上新闻链接,发现F#发布了CTP版本。这一版本的发布,可以说标志着F#正式进入了.net程序员的视野。

     Don Syme 在博客里讲解了主要的变化。原文请看:http://blogs.msdn.com/dsyme/default.aspx

     主要的变化有三方面:

     1、更好的脚本执行能力,更好地项目、语言服务支持。

     这个没有什么可说的,早先已经有过相关报道,试用之后,觉得还是相当不错的。不过,窗口设计器还是没有在F#项目中增加,目前还要像过去一样,使用c#新建一个项目后,更改页面语言为F#,并更改config文件的方法来开发web程序。

     2、在语言层面,这一版本最大的特色,就是增强了浮点数的支持。

     新增了一种称之为度量单位(unit of measure) 的语法,通过编译器技术,对单位(unit)进行了强类型的支持。增加这种语法支持的动机,源于NASA(美国航空和宇宙航行局)的火星气象卫星在1999年九月丢失,而丢失的原因是计量单位混淆。看来,F#项目组希望能够在数据运算精度要求高的场景下也能够很好的工作(金融、科学计算等领域)。不过,很奇怪的是这样一个新特性,并不在核心程序集中。

     具体例子请看:http://blogs.msdn.com/andrewkennedy/

     另外,一个是新增了AutoOpenAttribute属性。

     这个属性用于在模块上,其所在的命名空间open时,模块自动打开。这个特性用在可选类型扩展上非常适合(这个在 F#学习这路(3)如何组织程序下中讨论了什么是可选类型扩展)。

     最后我注意的变化是新增了一个图表的支持。支持Excel 的chart,还支持了XCeed的图表,程序集名为FSharp.PowerPack.Plot,FSharp.PowerPack.Plot.Excel,FSharp.PowerPack.Plot.XCeed。不明白F#项目组在目前还没有搞好设计时支持的情况下,为什么添加这些无关轻重的功能。

     3、对代码进行了重构,划分为三大程序集。

     核心程序集名为FSharp.Core.dll,另一个重要程序集名为FSharp.PowerPack.dll,最后一个重要程序集为FSharp.PowerPack.Linq.dll。

     前面很讲的度量单位,它的函数库在FSharp.PowerPack.dll中,名称空间为Microsoft.FSharp.Math。

     

     注意点:

          1、我们原先的一些兼容ocaml的函数都被迁移到FSharp.PowerPack.dll中了,这可能让我们原先的代码不能运行。需要我们添加程序集引用,重新编译。

          2、阅读过我之前写的系列博客的朋友注意,之前的文章谈到的某些内容可能已经失效了。例如之前谈到的名字空间现在已经不可以使用非完全限定方法打开了,并且名称空间也不可以取别名了,微软解释称,这是为了与.net平台其余的语言保持一致性,最佳的工程实践。从目前改进来看,非常不错,原先为了兼容OCaml,又为了保持与.net平台的一致性,语法非常复杂、混乱。现在看来微软采用优先与.net平台保持一致性来规范化、简化F#语言。简洁、一致才是美。

 

     总的来说,CTP版的语言服务已经做的相当不错了,智能提示、语法错误报告与c#基本一致了。但到CTP了,设计时体验都没有做,这是很失望的。

     新加入的度量单位,是个不错的尝试,c#4.0可能会加入这个特性。

     

     如果你想看看详细的操作画面,请看:这篇博客

     

     附:1、F# CTP下载地址

           2、F# Sample

 

posted @ 2008-08-31 01:49  lvxuwen  阅读(2113)  评论(16编辑  收藏  举报