Haskell 现在默认可以进行严格求值

Haskell 新语言扩展 StrictStrictData

Haskell 新引入的语言扩展 StrictStrictData 旨在简化在需要严格求值(非惰性求值)的代码中使用 Haskell 的过程。该功能已合并到 GHC 的 HEAD 分支,并将包含在 GHC 的下一个版本中。

主要功能

  • -XStrict-XStrictData 编译指示

    • -XStrict:在模块级别启用严格求值,影响函数、数据类型和绑定。
    • -XStrictData-XStrict 的子集,仅影响绑定。
  • 严格求值的实现

    • 默认情况下,Haskell 是惰性求值的,使用 ! 可以强制严格求值。
    • 启用 -XStrict-XStrictData 后,默认行为变为严格求值,可以通过在变量名前添加 ~ 来恢复惰性求值。

开发者观点

  • Adam Sandberg Ericsson(功能实现者):

    • 该功能不会将 Haskell 转变为严格语言,而是提供在需要严格求值时编写更简洁代码的手段。
    • 该补丁包含约 500 行代码,主要涉及扩展 Haskell 以允许严格绑定是递归和多态的,并在需要的地方插入严格性注解。
  • Johan Tibell(Google 工程师,指导 Sandberg Ericsson 实现该功能):

    • 该功能的好处包括减少语法噪音、降低在使用 ! 时的错误率,以及理解改变 Haskell 默认行为对性能的影响。
    • 采用 StrictData 对已经使用严格构造函数字段的代码库影响较小,而采用 Strict 则可能需要对现有代码库进行大量修改,因此需要更加谨慎。

总结

StrictStrictData 语言扩展为 Haskell 提供了更灵活的控制严格求值的方式,帮助开发者在需要严格求值时编写更简洁和高效的代码。然而,引入这些扩展需要开发者对现有代码库进行仔细评估,特别是 Strict 可能带来的广泛影响。

阅读 17
0 条评论