HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

学习 Haskell 的现实意义

  • 2009-02-11
  • 本文字数:1596 字

    阅读完需:约 5 分钟

大约有 750 人评论了《Real World Haskell》的网上预览版。作者之一John Goerzen 近日在与O’Reilly 的访谈中介绍,此书用现实的代码、现实的例子和技巧去介绍Haskell 在业务环境中的应用。在访谈中,Goerzen 解释了他为何认为Haskell 是一门值得学习的语言,剖析了Haskell 的各种特质,还讨论了一些可能令人对Haskell 敬而远之的问题根源。

John Goerzen 承认 Haskell 要求重学大量基础,并且认为对于具有命令式语言及面向对象编程背景的人来说,纯洁性(purity)和惰性(laziness)是最大的观念转变。

他强调在 Haskell 中,“任何有可能改变系统全局状态的事物都被严密隔离”,并“用类型系统标记出来”。这样有助于大大减少实现错误,因为代码中的不纯元素都是静态类型的,编译时即可识别错误。这个特点将 Haskell 与 Python 等语言区别开来。纯洁性也有利于测试,尤其当程序的结构是由许多小函数嵌合而成的时候;比如 Haskell 的纯洁性就有效地降低了通过 QuickCheck(译注:Haskell 开源测试框架)进行测试的难度。

“惰性(laziness)是 Haskell 的中心概念之一。当问到“惰性对现实世界的程序有何帮助?” John Goerzen 着重说明了惰性在 I/O 中的应用:

如果我用 Haskell 写一个小小的过滤器或者解析器,不需要怎么操心按行或者按块读取输入的事情,因为我可以直接用 getContents ,然后把函数一个个串起来。我喜欢用 Haskell 写 Unix 过滤器。

[……] 有了输入端的惰性,也就有了输出端的惰性,因为打印输出的时候不需要立即完成全部求解。[……]

最后你得到的是一个设计非常简明的程序,因为不用折腾输入行的缓冲、迭代之类的事情,而且产生的程序只需要固定大小的内存。

John Goerzen 还谈到 Haskell 在表达能力上的优点,其优势一是来自模式匹配,二是因为函数能把事物表达得既扼要又易读,适合阐述问题之余,又容易看清逻辑推导的步骤。访谈人更是认为可以“用函数和词语建立一套词汇,再用那套词汇去作为书写问题解答的语言”。 “用 Haskell 摆弄函数确实就像用 Perl 摆弄字符串那么简单”,Goerzen 如是说。

然而,Haskell 语言的某些特性可能令来自 OO 或命令式语言的人们敬而远之。比如它的递归方式就“可能有点吓人”,因为类 C 语言所用的“变量递增方式是一种代价非常低的操作”。不过,Goerzen 辩解说,尽管“高级语言一般达不到 C 的速度”,但 GHC 编译器会将递归重写成迭代,“非常高效地把你用递归表达的程序转换成更适合于 CPU 执行的形式”。

有些人认为惰性就是“换来类型推导、纯洁性这些东西,却丢掉了对时间及空间复杂性的掌握”。John Goerzen 认为这个观点要辩证地看:

我举个例子,比如随便用哪种语言写一段程序 [……],要求一次过读入整个文件,然后加以处理。打开文件、调用读取操作、将整个文件读入内存,都是可以的。有些人会假设要处理的文件只有 100K,那么这样做当然没问题。但如果你给他们一个 2G 大小的文件,这种做法就行不通了。

凭着他的经验,John 还批驳了关于 Haskell 的 IO 系统孱弱又难学的说法。他说,Haskell 里吓跑最多人的怪兽要数 Monad,但他要强调“无需挠破头去理解什么是 Monad、Modad 做些什么,照样可以写出无懈可击的 Haskell 程序去处理 IO[之类的现实工作]”。比如使用 IO monad,不需要以理解 Monad 为前提,粗浅地把 Monad 当作“一种分隔纯与不纯代码的盒子”就足够了

总而言之,John Goerzen 认为虽然“要把 Haskell 里的各种东西都叫上名字要费不少功夫”,不过之后会顺畅许多,因为“看函数的类型就能把它们的所作所为知道得八九不离十”。照他看,探索 Haskell 是一桩赏心乐事,哪怕 Haskell 不会成为万众瞩目的明星,但“那么别致又有趣的语言,怎么都值得学一学。”

InfoQ 中文站补充消息:《Real World Haskell》中文版正由 AlbertLee 翻译之中,他在博客上放出了一部分预览章节

查看英文原文: What Makes Haskell Worth Learning for Real World Applications

2009-02-11 01:3812201
用户头像

发布了 225 篇内容, 共 63.6 次阅读, 收获喜欢 50 次。

关注

评论

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

软件开发全套资料整理下载(投标支撑,立项,研发,测试,实施维护,安全监测,服务巡检,结项,验收支撑)

代码人,代码魂

软件测试/测试开发丨接口自动化学习笔记——响应体断言

测试人

软件测试 接口测试

数据赋能业务,神州数码HR数字画像荣获2023HRoot人力资源管理卓越实践奖

科技热闻

浅议特权账号防护措施

尚思卓越

网络安全 数据安全 特权账号管理

Linux centos 安装docker

javaNice

Java Docker Linux

实例详解构建数仓中的行列转换

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

HarmonyOS应用开发

不在线第一只蜗牛

华为 架构 系统 HarmonyOS

软件测试/测试开发丨接口自动化学习笔记——请求方法构造

测试人

软件测试 接口测试

杭州悦数出席 2023 云栖大会计算巢专场,分享云上最佳实践

最新动态

立冬礼物已送达,小艺陪你开启“暖冬”模式

最新动态

前端常用的开发工具有哪些?

互联网工科生

前端框架 前端开发工具 JNPF

全方位监控基础设施,坚实守护您的业务稳定!

观测云

监控 基础设施 网络

冬天的第一份惊喜,是小艺给的!

最新动态

程序员这个职业未来会消失吗?

高端章鱼哥

编程 程序员 AI编程

头脑风暴利器!10款超实用的思维导图软件,助你脑洞大开!

彭宏豪95

思维导图 头脑风暴 在线白板 办公软件 思维导图软件

大模型时代,程序员的工作还是“写程序”?

SoFlu软件机器人

程序员 软件开发 AIGC java 技术提升

重庆上百位老师和学生,正在使用这个国产操作系统

OpenCloudOS

Linux 操作系统

COSCon'23|Sermant亮相2023第八届中国开源年会,共赢数智时代

华为云开源

开源项目 微服务治理 sermant

如何 Get 字节跳动同款云原生大数据平台

字节跳动云原生计算

大数据 云原生

如何使用 GTX750 或 1050 显卡安装 CUDA11+

北桥苏

PyTorch cuda cudnn

Macos视频下载工具:Downie 4 支持M1

彩云

视频下载 downie 4

AutoCAD 2024 中文版 附 完整图文安装激活教程 支持M1

彩云

mac软件下载 AutoCAD 2024

第三方数据测评对比五大品牌HTTP代理!哪家代理最纯净稳定

Geek_bf375d

加密货币交易软件开发:树立行业新标准

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

少林寺方丈释永信造访 Meta 总部;OpenAI 正在摧毁创业公司?丨 RTE 开发者日报 Vol.80

声网

Linux centos 安装nodejs完整教程 详细到不能再详细了

javaNice

Java Linux nodejs

学习Haskell的现实意义_编程语言_Sadek Drobi_InfoQ精选文章