原文地址:
http://news.csdn.net/n/20071227/112188.html甫于日前落幕的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编程作法的拉扯,一开始时会很不习惯,但只要坚持下去,等到跨过门坎之后,函数编程其实更自然,生产力更高。
分享到:
相关推荐
Learning React: Functional Web Development with React and Redux by Alex Banks English | 27 Apr. 2017 | ASIN: B071HB1526 | 350 Pages | AZW3 | 4.39 MB If you want to learn how to build efficient user ...
Learn key functional programming concepts with JavaScript Peek under the hood to understand how React runs in the browser Create application presentation layers by mounting and composing React ...
- **Functional Programming**:编程范式之一,通过数学函数来表达程序逻辑的方式。 - **with Types**:特别强调Haskell中的静态类型系统及其对开发过程的影响。 #### 描述解读: - **功能描述重复**:标题和描述...
OCaml的介绍,OCaml是一种为表达,安全和速度而设计的工业级编程语言。 里面的示例将帮助读者快速了解OCaml作为编写快速,简洁和易读的系统代码的工具如何脱颖而出。
- 与语言趋势的一致性:讨论了现代编程语言如Java 8等对函数式编程的支持及其重要性。 - 将控制权交给语言/运行时:介绍函数式编程如何更好地利用现代编程环境的特点。 - 简洁性:展示了函数式编程如何减少代码量...
函数编程(Functional Programming,简称FP)是一种编程范式,它将计算机程序视为一系列数学函数的组合,避免使用可变数据和改变状态的方式。在函数编程中,函数是核心元素,它们可以被当作值一样传递,并且能够返回...
同步函数编程(Synchronous Functional Programming)是一种编程范式,它结合了函数式编程的特性与同步执行的概念。在函数式编程中,程序被视为一系列计算,而不是状态改变的过程,而同步执行意味着这些计算按照顺序...
PD IEC TR 61508-0:2005是国际电工委员会(IEC)发布的一份技术报告,标题为“Functional safety of electrical/electronic/programmable electronic safety-related systems — Part 0:Functional safety and IEC...
Java 8 函数式编程 Java 8 函数式编程是指在 Java 8 中引入的一种新的编程范式,它强加了额外的约束,即所有数据必须是不可变的,设置一次,永不改变。函数式编程将值传递给函数,该函数然后生成新值但从不修改...
《The Functional Approach to Programming》是哈佛大学CS51课程推荐的一本关于程序设计的重要教材,主要探讨了函数式编程这一编程范式。函数式编程是一种编程思想,它强调通过使用纯函数、避免副作用和状态变化来...
其全称为“Electrical/Electronic/Programmable Electronic Safety-Related Systems - Functional Safety”(电气/电子/可编程电子安全相关系统—功能安全)。2010版的更新旨在提供一套通用的方法和标准,用于确保...
在使用QUARTUS II进行FPGA项目开发时,编译过程中可能会遇到“Error: Run Generate Functional Simulation Netlist”的错误提示,这通常是由于缺少仿真网表导致的。在解决这个问题之前,我们首先要理解QUARTUS II的...
《Hands-On Functional Programming in Rust》是一本由Packt出版社出版的深入探讨Rust编程语言中函数式编程概念的书籍。本书旨在帮助读者掌握Rust语言的精髓,特别是如何利用其强大的函数式编程特性来构建高效、可靠...
Java函数式编程是一种编程范式,它强调使用函数作为一等公民,允许将函数作为参数传递,也可以...通过学习这个项目,开发者可以更深入地理解和掌握Java的函数式编程技术,并将其应用于实际项目中,提高代码质量与效率。
functional-csharp-code, 在 C# 中,函数编程的代码示例 C# 中的函数编程这个 repo 包含了Manning出版的图书函数编程的代码示例。练习和解决方案。 代码示例在以下项目中进行组织:示例: 书中使用的例子,章节练习...
JavaScript函数式编程是一种编程范式,它强调使用函数来处理数据和执行计算,而不是通过改变状态或显式地控制流程。在JavaScript中,函数式编程提供了编写可读性更强、可维护性更好以及更易于测试的代码的方式。在这...
在函数式编程(Functional Programming,简称FP)领域中,主要的知识点包括以下几个方面: 1. 函数式编程基础概念:函数式编程是一种编程范式,它将计算视为数学函数的计算,并避免改变状态和可变数据。函数式编程...
它在解决偏微分方程问题时起到了关键作用,因为它提供了一种处理无穷维空间中的函数集合的方法。功能分析的基础包括希尔伯特空间、巴拿赫空间等概念。 **核心概念:** - **希尔伯特空间**:这是一个内积空间,具有...
函数式编程:“JS 函数式... 函数式编程并不新鲜,但如今变得越来越流行,因为它是两个主要框架的核心:框架和库根据最新的谷歌趋势,ReactJS 和 Angular(这里不包括 AngularJS 和 VueJS)是最受欢迎的库和框架:Rea