【问题标题】:Is a functional program already in SSA form?功能程序是否已经采用 SSA 形式?
【发布时间】:2020-10-15 02:59:42
【问题描述】:

最近,我一直想创建一个小型(教育性)功能优化编译器。对于优化部分,我想使用 SSA。问题是(据我所知,大多数)函数式编程语言都有不可变的变量(默认情况下),所以每个变量只分配一次,就像在 SSA 中一样。需要SSA吗?一个函数式程序(例如在 Haskell 中)是否已经采用 SSA 形式?

【问题讨论】:

  • “函数式编程语言具有不可变变量”只是意味着,作为优化的一部分,您将不得不做额外的工作来添加可变变量(同时将递归转换为循环等)。最终结果将是“SSA 与可变变量的 Phi 函数”(与命令式语言相同)。
  • 还有一个步骤可以从纯函数式程序中获得完全等效的 SSA - 一个简单的 CPS 转换。
  • @SK-logic -- 你能详细说明一下吗?

标签: optimization functional-programming compiler-construction immutability ssa


【解决方案1】:

是的,用纯函数式语言(例如 Haskell)编写的程序是 SSA 形式的。你可以在this research paper找到更多解释。

请注意,并非所有函数式语言都如此。例如,OCaml 允许程序员变异变量和编写命令式块(这使得 OCaml 不是纯粹的函数式语言),打破了 SSA 形式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多