免费注册 查看新帖 |

Chinaunix

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

函数编程之风云再起 [复制链接]

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

文/蔡学镛

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

目前主要是学术圈在使用函数语言(Functional Language),但确实有相当多迹象显示,函数编程有可能会渐渐走入业界。

目前两大开发平台上(Java与.NET),都出现函数编程思维的踪迹。Java平台的JavaFX语言,具备所有重要的函数编程特色,所以应该归类为函数语言。

函数编程的最重要基础是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的后继者众,其中至今最活跃者是诞生于1980年代的Common Lisp,它在Tiobe的排名是17。在Peter Seibel写出《Practical Common Lisp》一书,并得到Jolt Award之后,渐渐让大家对Common Lisp一改印象,开始认为它不只是学术上的语言,而是一种务实的语言。

一般来说,相较于C、Pascal这类命令式编程(Imperative Programming),函数编程的缺点是效率比较差,这是函数语言一直没有流行的主因之一。但是现在CPU速度提升,编译器技术进步,都让效率不再是问题。甚至在数学运算上,用Clean与OCaml(都是函数语言)开发出来的程序,效率并不会比C差。

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

如果你想学习函数编程,且如果你使用.NET平台,建议你使用F#;如果你使用Java平台,你可以考虑JavaFX;如果你没有Java与.NET平台的考虑,你可以选择Common Lisp与Erlang。

大多数的人没有使用过函数编程技术,所以思维会受到传统imperative编程作法的拉扯,一开始很不习惯。只要坚持下去,跨过门坎之后,你会发现,函数编程其实更自然,生产力更高

有些技术没被大众接受,不是因为它不好,是因为环境不能配合等因素。现在的网络、多核心、高速的CPU、软件复杂度…等环境因素,正是适合函数编程生存的环境,值得我们持续关注它的发展。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2008-09-28 14:16 |只看该作者

回复 #1 chinesedragon 的帖子

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2008-09-28 14:17 |只看该作者
原帖由 chinesedragon 于 2008-9-28 13:16 发表

现在的网络、多核心、高速的CPU、软件复杂度…等环境因素,正是适合函数编程生存的环境,值得我们持续关注它的发展。

GHC 最近的改进就是集中在并行这一块。

论坛徽章:
0
4 [报告]
发表于 2008-10-09 19:34 |只看该作者
学习了几个名词,还是一头雾水
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP