BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Haskell现在能够默认进行严格求值

| 作者 Sergio De Simone 关注 12 他的粉丝 ,译者 曹阳旭 关注 0 他的粉丝 发布于 2015年12月4日. 估计阅读时间: 3 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

为了让开发者在使用Haskell进行编码时更加轻松,目前出现了一种新的严格语言作为Haskell的扩展,这意味着程序在大部分时候都会执行严格求值,换句话说,就是用一种非懒惰求值策略。这个特点已经被加入到GHC的git HEAD游标之中,并且会在GHC的下个版本中发布。

在每个模块中,-XStrict和-XStrictData的pragmas预处理指令都会更改Haskell语言的执行方式,这样程序中的函数、数据类型和绑定就会进行严格求值,而不是懒惰求值。-XStrictData是-XStrict的子集,而且仅仅会影响绑定。当被指定为-XStrict的时候,下面的代码:

data T = C a
f x = ...
let x = ...

实际上被解释成:

data T = C !a
f !x = ...
let !x

通过在变量名前追加~指令,就可以在每个模块中恢复懒惰求值策略。这些pragmas预处理指令会在一定程度上改变Haskell的默认执行方式,我们也可以通过在变量名前使用!指令把懒惰求值变为严格求值。

正如严格求值指令的实现者Adam Sandberg所说,这个特点并不会把Haskell变成一个严格语言,而更像是在需要执行严格求值时,为Haskell提供了一个简单的方法来写出更漂亮的代码。Adam还补充说,这个补丁是由500行代码构成,而且大部分是由Haskell扩展语言执行,因此这就让严格绑定功能具有了递归和多态性,并且可以更容易地在需要的地方插入严格注释。

Google公司的开发工程师Johan Tibell,在他的监管下,Sandberg Ericsson使用了严格求值功能,进一步展现了这个功能的优势。例如,在严格Haskell代码中使用bang,可以减少句法噪声和出错的几率,也可以帮助我们了解在改变Haskell默认设置时,是如何影响执行功能。Tibell也谈到了,在使用StrictData时,会有很大的可能对使用了严格构造域的代码库造成适度的改变。另一方面,在使用Strict时,也意味着会对现有的代码库造成大量的更改。

查看英文原文:Haskell Can Now Do Strict Evaluation by Default


感谢张龙对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者(已满),InfoQ读者交流群(#2)InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT