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

为了让开发者在使用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读者交流群06e1fec4a87eca3142d54d09844c629f.png(已满),InfoQ读者交流群(#2)06e1fec4a87eca3142d54d09844c629f.png)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值