我在押注按值传递

主要观点:

  • 函数参数在道路分叉处有不同处理方式,涉及到按值调用(CBV)和按需调用(CBN)两种评估策略,不同语言选择不同策略,且各有优劣。
  • 引入按推送值调用(CBPV)这一第三种选项,能支持CBV和CBN,通过区分值和计算来解决CBV和CBN的问题,使变量和函数参数的处理更清晰,增加了对工作的推理能力。
  • CBPV在多个方面有优势,如在处理函数应用时更明确,能解决代数效应中的问题,有助于类型推断,利用种类解决通用语言的问题等,且近期研究表明它还有更多可挖掘的潜力。

关键信息:

  • CBV 先评估函数参数再传递,CBN 等待参数在函数体中使用时再评估。
  • Rust 等语言使用 CBV,Haskell 等使用 CBN。
  • CBPV 区分值和计算,如 ValTypeCompType,通过 Thunk 将计算转换为值,Return 将值转换为计算。
  • 示例代码展示了 CBPV 在处理函数应用等方面的作用。
  • CBPV 能解决代数效应中关于副作用的问题,在类型推断方面能处理嵌套泛型,在种类调用约定中能确定函数的arity等。

重要细节:

  • 传统 lambda 演算中 App 项根据评估方式可分为 CBV 或 CBN,但只能选其一,CBPV 通过分离值和计算解决此问题。
  • 在处理记录中的函数时,CBPV 需将函数转换为 ThunkReturn
  • 在类型推断中,CBPV 能根据函数的饱和状态和返回的闭包提供关键信息,有助于推断函数类型。
  • 在种类调用约定中,通过给类型赋予更复杂的种类来解决通用语言的问题,CBPV 能明确函数的arity。
阅读 15
0 条评论