基础架构安全、开发安全、数据安全……企业安全体系该如何建设?戳此了解。 了解详情
写点什么

函数式编程语言时代已经来临

2017 年 11 月 08 日

英国著名计算机科学家、微软首席研究员及 Haskell 编程语言主要贡献者 Simon Peyton Jones 在一次访谈中说,函数式编程语言的时代已经来临。

函数式编程语言不同于大多数人所熟知的编程范式,它没有了维护全局状态的麻烦,只需要将输入数据传给函数,然后等待输出结果,就这么简单。

Simon 说,“大部分编程语言都是命令式(imperative)的,程序员需要告诉代码先做什么再做什么。而函数式编程语言则不然,它会直接告诉程序员输出的结果是什么。比如 Excel 表格里的方程式,它并不包含一系列的步骤,它只会告诉你某个格子经过计算之后的值是多少”。

Simon 认为,函数式编程语言是开发者验证新想法的有力工具,比如 Haskell。他说,“函数式编程语言有一颗智慧的心,它易于驾驭,只要你善于驾驭它,它就能助你一臂之力”。

在过去几年,函数式编程语言的很多语言特性已经被其他编程语言所模仿,而函数式编程语言领域的新想法也如雨后春笋般不断涌现。

函数式编程语言 Haskell 和 OCaml 几乎成为新想法的摇篮,它们当中有一些已经成为主流编程语言的一部分。垃圾回收和参数化多态就是其中最好的例子。Java 的泛型是在 2000 年初引入的,但它在函数式编程语言中早已存在了 20 年。Linq 的设计思想直接来自 Haskell,F#的 workflow 设计灵感则来自 Haskell 的 monadic I/O story。

随着摩尔定律的放缓,计算机用户开始更多地依赖软件能够并行地运行于多个核芯片之上,以此来获得更快的处理速度。毫无疑问,函数式编程语言特别适合用于并行执行,因为它们很少有机会发生崩溃。

Simon 说,“在使用函数式编程语言时,可以通过避免运算单元之间发生交互来实现并行运算。这就要求程序员对程序各个部分之间的交互细节了如指掌,从而降低 bug 出现的几率”。

函数式编程语言的市场仍然相对较小,但毕竟已经存在了 27 年,它们的用户群还是很强大的。很多公司也开始使用函数式编程语言,比如,Facebook 就在用 Haskell 进行垃圾过滤,而 Bloomberg 和谷歌也在使用 Haskell。

Simon 说,“编写软件最主要的一方面就是要管理好复杂性,而唯一能够阻碍写出好软件的就是我们管理复杂性的能力。函数式编程语言为我们提供了最有力的工具用于管理复杂性,这是命令式编程语言无法比拟的”。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017 年 11 月 08 日 18:0010223
用户头像

发布了 321 篇内容, 共 111.7 次阅读, 收获喜欢 113 次。

关注

评论

发布
暂无评论
发现更多内容

花了两天时间用html+css+js做了一个网页版坦克大战游戏

孙叫兽

JavaScript html 坦克大战

第 0 期架构训练营模块 3 作业

架构实战营

通过 Netty、ZooKeeper 手撸一个 RPC 服务!

Yano

Java 微服务 Netty RPC

架构实训营 作业三——消息队列架构设计文档

开拓纪

第三章作业 #架构实战营

所谓区块链去中心化社交产品,究竟是创新还是复旧?

CECBC区块链专委会

区块链

网站优化第一次网页加载的速度的办法与思路。

孙叫兽

性能优化 网站 性能调优

如何上架自己的应用到各大应用商店?

孙叫兽

证书 安卓 iOS Developer appstore 应用宝

【Java 从入坑到放弃】No 7. 何为面向对象(上)

村雨遥

Java

事关每个程序员的职业规划与履历

孙叫兽

生涯规划 程序员 职业规划 人生修炼

我的Serverless实战——引领云计算的下一个十年

孙叫兽

云计算 Serverless #Serverless

面试被问finally 和 return,到底谁先执行?

Damon

java基础 5月日更

模块三作业 - 消息队列系统架构设计文档

冬天的树

Java Stream 源码分析

Yano

Java stream

模块1作业

刘丽

2021年程序员可以做哪些副业?

孙叫兽

副业 副业赚钱 程序员‘’ 程序员干副业

FFmpeg音视频处理工具三剑客(ffmpeg、ffprobe、ffplay)

liuzhen007

音视频 5月日更

Go 杂谈——interface与nil的细节让我出了线上BUG

HZFEStudio

go

模块3作业 消息队列架构设计文档

TH

架构实战营

消息队列详细架构设计

Vincent

架构训练营

ceph-csi源码分析(5)-rbd driver-nodeserver分析(上)

良凯尔

Kubernetes 源码分析 Ceph CSI

ceph-csi源码分析(6)-rbd driver-nodeserver分析(下)

良凯尔

Kubernetes 源码分析 Ceph CSI

消息队列构架设计文档

Chris Cheng

吐槽OOP

顿晓

5月日更

GoF23 中的对象行为模式草图!

Arvin

网络攻防学习笔记 Day9

穿过生命散发芬芳

5月日更 网络攻防

如何加速户外广告的快速升级?

󠀛Ferry

5月日更

区块链如何赋能“链”金融

CECBC区块链专委会

金融

Android团队怎样搭建自己的开发仓库

寻找生命中的美好

android maven nexus library

架构实战营 - 模块 03 作业

架构实战营

借鉴AQS的CHL思路解决消息多线程消费顺序ACK问题

Coder的技术之路

AQS 多线程 高并发 架构设计 消息队列

Zuul网关搭建实战详解教程

攻城狮Chova

API网关 5月日更 Zuul

阿里巴巴客户端架构演进之路

阿里巴巴客户端架构演进之路

函数式编程语言时代已经来临-InfoQ