免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5563 | 回复: 3
打印 上一主题 下一主题

Functional Pogramming函数编程风云再起【技术趋势】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-24 16:12 |只看该作者 |倒序浏览
Functional Pogramming函数编程风云再起


甫于日前落幕的Software Development 2.0研讨会,来宾之一的Andrei Alexandrescu被问到未来编程语言的趋势时,他认为函数编程(Functional Pogramming)可能会再度兴起。我认同他的看法,我过去发表的JavaFX文章中,碰巧也有提到这一点。

目前两大研发平台(Java和.NET)都开始出现函数编程思维的踪迹。Java平台的JavaFX语言,具有所有重要函数编程的特色,所以应该归类为函数语言(或至少是多重思维语言);.NET平台的C# 3.0也存在相当多函数编程的影子。微软的LINQ本来就源自于函数语言,更不用提微软官方的F#语言,F#沿用相当多ML语言的语法,更是完全的函数语言(其中的F,应该是Functional的意思)。

根据Tiobe对于2007年12月语言需求所做的统计,面向对象语言占54.4%,程式语言(Procedure Language)占41.9%,函数语言占2.0%,而逻辑语言占1.8%。以上加起来刚好百分之百。

不过,这样的分类并不精确。目前的语言非常少是单一思维,几乎都是多重思维(Multi-paradigm),特别是面向对象和函数编程,因为两者间并没有冲突的地方,许多面向对象语言会渐渐纳入函数编程的特色。例如,尽管C# 3.0具有相当多函数语言的特色,不过依然会被Tiobe归类于面向对象语言的类别。

函数编程最重要的基础是Lambda Calculus,在C# 3.0称为「Lambda表示式」,在Python称为「Lambda函数」,在PowerShell称为Scriptblock(剧本区块),在Java称为匿名方法(Anonymous Method),不同语言会用不同名词称呼他,但其实都是类似的东西。从这个角度来看,许多主流语言多少都具有函数编程的能力。这个趋势应该会延续下去,许多既有语言推出新版本时,会持续加入函数语言的特色。

另外,我最喜欢的REBOL,许多人工智能专家使用的Common Lisp,近年兴起的Erlang,Perl高手唐凤专精的Haskell,这些也都是函数语言。为什么我们喜欢函数编程?因为函数编程能让我们把时间花在有生产力的事情上,而不是处理许多琐碎的事。简单地说,函数语言能让我们用简单的方式写程式,不过威力又强大。

编程语言专家Ravi Sethi教授认为「简单」和「威力」,正是函数编程的两大优势。简单,来自于以「值」(Value)为中心,不用理会下面平台是什么机器、内存要怎么设置、怎么指定。函数编程的威力,则来自于「递归」及将函数视为「First-class」(一等)的值(函数本身就是值,能被传递、被指定)。

自动内存管理虽然始于函数语言,不过近年来已进入各大主流语言。而将函数视为一等的数据型别,也开始进入各大主流语言。这些都要归功于函数语言,尤其是Lisp。

Lisp是函数语言的始祖,诞生于1958年,相当于50年前。换算成人类年龄的话,Lisp已算是程式语言中的人瑞了。Lisp的后继者众多,其中,至今仍然最活跃的是诞生于1980年代的Common Lisp,他在Tiobe的排名是第十七名。在Peter Seibel写出《Practical Common Lisp》一书,并得到Jolt Award之后,让大家逐渐对Common Lisp一改印象,开始认为他不只是学术上的语言,而是一种务实的语言。

一般来说,相较于C、Pascal这类命令式编程(Imperative Programming),函数编程的缺点是效率比较差,这也是函数语言一直无法流行的主因之一。不过,随着处理器速度的提升,编译程式技术的进步,都让效率不再是问题,甚至在数学运算上,用Clean和OCaml(这些都是函数语言)研发出来的程式,效率也不会比C差。

尤其是在多核心处理器和分布式计算时代,函数编程更是比Imperative编程具有更强的优势。例如近年来逐渐受到重视的Erlang,正是将重点放在Concurrency和容错上。用Erlang能轻松研发出来的系统,如果改用别种语言研发,可能会造成程式长度暴增及不稳定的情况。

如果你想学习函数编程,而且如果你使用.NET平台,我会建议你使用F#;如果你使用Java平台,你能考虑JavaFX;如果你没有Java和.NET平台考虑的话,那么你能选择Common Lisp和Erlang。

若未曾使用过函数编程技术,思维就会受到传统Imperative编程作法的拉扯,一开始时会非常不习惯,但只要坚持下去,等到跨过门坎之后,函数编程其实更自然,生产力更高。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2010-12-03 19:01 |只看该作者
通篇没有 Haskell 一个字,打回去重写。

论坛徽章:
0
3 [报告]
发表于 2010-12-03 21:17 |只看该作者
通篇没有 Haskell 一个字,打回去重写。
flw 发表于 2010-12-03 19:01

Perl高手唐凤专精的Haskell

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
4 [报告]
发表于 2011-01-22 17:50 |只看该作者
Perl高手唐凤专精的Haskell
imyeyeslove 发表于 2010-12-03 21:17


同上
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP