 |
台湾 行销企划部
电话:(02) 2704-1758
传真:(02) 2704-0372 |
| |
USA Service Dept.
ADD:5138 Parkfield Ave.
San Jose, CA95129
Tel:408-2034565 |
|
|
|
| 标题 |
F#:微软下一代重量级语言 |
| 主题分类 |
系統與程式設計 |
| 原文章出处 |
蔡学镛-技术顾问 |
微软从2002年开始研发F#,2005年推出第一个版本,现在的F#已经接近成熟。2007年底,微软宣布将F#从研究室的项目转移到产品部门,进入产品化的阶段,在下一个版本的Visual Studio中,F#将会成为正式的一员,和C#、Visual Basic平起平坐。目前,F#也已经和Visual Studio做了初步的整合。
一个新语言的诞生,有它的时代背景,对F#来说,自然是函数式编程(FP,Functional Programming)的因素。事实上,除了具备FP的能力,F#在命令式编程语言(Imperative Programming)与对象导向编程(OOP)方面的能力,也是不打折的。因此,利用F#写程序,你可以享有高度自由,想用什么样的Paradigm,可以自己作主。但如果完全不使用FP,那么使用F#的意义便不大,还不如回头用C#。
虽然F#比其它FP语言(Haskell、Erlang、Common Lisp)似乎更好学(因为语法比较不奇怪),但是一般人要善用F#并不容易,主要是因为FP的Paradigm和我们惯用的OOP与Imperative Programming不同。因此,在熟悉F#的过程中,一开始最好强迫自己只用FP的方式写F#程序。
函数式编程常用到的技巧包括:Higher-Order Function、Currying、Lazy Evaluation、Continuations、Pattern Matching、Closure、List Processing、Meta-Programming。令人惊讶地,F#对上述的支持都相当不错。许多FP语言在这些方面可能还比不上F#完整。一开始写F#程序,尽量多用这些技巧,宁可矫枉过正,这是学习的必经阶段。
如果你想要开始习惯用F#写FP程序,可以试着这么做: ● 将Object为主的程序代码,转回Procedure的方式:将Object化成Record;将Method转成Function;将this(或self)当作Function的参数;把Function集中放到Module(模块)。
● 使用循环的地方,尽量转成递归(Recursion)。先不要管执行效率的问题。
● 将用到if/else或switch/case的地方,改用Pattern Matching(模式比对)。
只要做到这三件事,你的F#程序会具有浓浓的FP风味。
F#由于是建构在.NET平台上,所以当然和.NET有天衣无缝的整合。 事实上,F#所提供的交互式环境,对于学习.NET API来说,是相当不错的工具,会比PowerShell更适合程序员使用。
由于F#的开发相当早(2002年),加上F#比较属于静态,而不是动态的语言,所以目前F#并没有以.NET的DLR(Dynamic Language Runtime)为平台。至于未来F#会不会搬到DLR上头?目前情况还不明朗。
以往用FP开发的系统多以科学和财务为主,现在有了F#和.NET,应该可以为FP开拓更广的应用领域。我相信,改用F#写.NET各种应用(ASP.NET、GUI、LINQ)的做法,会逐渐形成风气。
F#也是一种语言导向编程(Language-Oriented Programming)的语言。所谓的「语言导向编程」,就是Meta-Programming,也就是「可以建立自己的DSL(Domain-Specific Language)」。我写过一篇关于「GPL & DSL」的文章,但是这篇文章并没有引起太多读者的注意,显然大家尚未意识到Meta-Programming的重要性,相当可惜。
F#对于Meta-Programming的支持相当好,有多种方式可以实作出DSL。有了F#,你不需要用到ANTLR这样的外部工具,也可以建立自己的DSL。
如果你现在想学习F#的话,要特别注意,目前F#的文件写得并不好──不完整、未更新而且凌乱。想透过阅读官方的在线数据学习F#,效果可能不佳,你必须搭配阅读APress出版的《Expert F#》,作者之一的Don Syme是F#计划的负责人。
尽管目前文件上有缺失,但是F#已经转移到产品部门,所以我相信不用多久,这些问题就会逐渐解决。
虽然F#已经推出3年,但是过去仅算是实验室的项目,并不是商品。在TIOBE排行榜中,F#并入ML,目前ML排名第39,并没有特别好的表现。不过,随着F#商品化之后,应该就会改善,未来这几年,F#势必会渐渐逼近前20名。
整体来说,F#是很不错的语言,程序开发人员如果能熟悉F#,应该可以提升软件开发的生产力。身为微软.NET家族的唯一FP语言,F#的地位相当特殊且重要。以F#的先进与方便,未来「说不定」会成为C#的强大竞争对手。有人甚至认为,使用过F#之后,就不会想用其它.NET语言,这是真的──至少对我来说是如此。
作者簡介: 蔡學鏞-技術顧問 清華大學資訊工程碩士,曾任華碩集團軟體工程師、元智大學資訊系講師、美商歐萊禮出版社技術編輯、臺灣微軟特約專欄作家。 |
| 文章整理: |
网绎数字科技 Murray |
| 关键词: |
微软新语言,F# |
|
|
|