技术趋势Functional Pogramming函数编程风云再起费.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:17 大小:210KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

技术趋势Functional Pogramming函数编程风云再起费.pdf

技术趋势FunctionalPogramming函数编程风云再起费.pdf

预览

免费试读已结束,剩余 7 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

WWW.FH577.COMDD凤凰平台技术趋势:FunctionalPogramming函数编程风云再起甫于日前落幕的SoftwareDevelopment2.0研讨会,来宾之一的AndreiAlexandrescu被问到未来编程语言的趋势时,他认为函数编程可能会再度兴起。我认同他的看法,我过去发表的JavaFX文章中,碰巧也有提到这一点。目前两大开发平台都开始出现函数编程思维的踪迹。JavaWWW.FH577.COMDD凤凰平台平台的JavaFX语言,具备所有重要函数编程的特色,所以应该归类为函数语言;.NET平台的C#3.0也存在相当多函数编程的影子。微软的LINQ本来就源自于函数语言,更不用提微软官方的F#语言,F#沿用相当多ML语言的语法,更是彻底的函数语言。根据Tiobe对于2007年12月语言需求所做的统计,面向对象语言占54.4%,程序语言占41.Array%,函数语言占2.0%,而逻辑语言占1.8%。以上加起来刚好百分之百。WWW.FH577.COMDD凤凰平台但是,这样的分类并不精确。现在的语言很少是单一思维,几乎都是多重思维,特别是面向对象和函数编程,因为两者间并没有冲突的地方,许多面向对象语言会渐渐纳入函数编程的特色。例如,尽管C#3.0具有相当多函数语言的特色,但是依然会被Tiobe归类于面向对象语言的类别。函数编程最重要的基础是LambdaCalculus,在C#3.0称为「Lambda表示式」,在Python称为「Lambda函数」,在PowerShell称为Scriptblock,在Java称为匿名方法,不WWW.FH577.COMDD凤凰平台同语言会用不同名词称呼它,但其实都是类似的东西。从这个角度来看,许多主流语言多少都具备函数编程的能力。这个趋势应该会延续下去,许多既有语言推出新版本时,会持续加入函数语言的特色。另外,我最喜欢的REBOL,许多人工智能专家使用的CommonLisp,近年兴起的Erlang,Perl高手唐凤专精的Haskell,这些也都是函数语言。为什么我们喜欢函数编程?因为函数编程可以让我们把时间花在有生产力的事情WWW.FH577.COMDD凤凰平台上,而不是处理许多琐碎的事。简单地说,函数语言可以让我们用简单的方式写程序,但是威力又强大。编程语言专家RaviSethi教授认为「简单」与「威力」,正是函数编程的两大优势。简单,来自于以「值」为中心,不用理会下面平台是什么机器、内存要如何配置、如何指定。函数编程的威力,则来自于「递归」以及将函数视为「First-class」的值。自动内存管理虽然始于函数语言,但是近年来已经进入各WWW.FH577.COMDD凤凰平台大主流语言。而将函数视为一等的数据型别,也开始进入各大主流语言。这些都要归功于函数语言,尤其是Lisp。Lisp是函数语言的始祖,诞生于1Array58年,相当于50年前。换算成人类年龄的话,Lisp已经算是程序语言中的人瑞了。Lisp的后继者众多,其中,至今仍然最活跃的是诞生于1Array80年代的CommonLisp,它在Tiobe的排名是第十七名。在PeterSeibel写出《PracticalCommonLisp》一书,并得到JoltAward之后,让大家逐渐对CommonLispWWW.FH577.COMDD凤凰平台一改印象,开始认为它不只是学术上的语言,而是一种务实的语言。一般来说,相较于C、Pascal这类命令式编程,函数编程的缺点是效率比较差,这也是函数语言一直无法流行的主因之一。不过,随着处理器速度的提升,编译程序技术的进步,都让效率不再是问题,甚至在数学运算上,用Clean与OCaml开发出来的程序,效率也不会比C差。尤其是在多核心处理器和分布式计算时代,函数编程更是WWW.FH577.COMDD凤凰平台比Imperative编程具有更强的优势。例如近年来逐渐受到重视的Erlang,正是将重点放在Concurrency与容错上。用Erlang可以轻松开发出来的系统,如果改用别种语言开发,可能会造成程序长度暴增以及不稳定的情况。如果你想学习函数编程,而且如果你使用.NET平台,我会建议你使用F#;如果你使用Java平台,你可以考虑JavaFX;如果你没有Java与.NET平台考虑的话,那么你可以选择CommonLisp与Erlang。WWW.FH577.COMDD凤凰平台若未曾使用过函数编程技术,思维就会受到传统Imperative编程作法的拉扯,一开始时会很不习惯,但只要坚持下去,等到跨过门坎之