主要观点:
- 函数参数在道路分叉处有不同处理方式,涉及到按值调用(CBV)和按需调用(CBN)两种评估策略,不同语言选择不同策略,且各有优劣。
- 引入按推送值调用(CBPV)这一第三种选项,能支持CBV和CBN,通过区分值和计算来解决CBV和CBN的问题,使变量和函数参数的处理更清晰,增加了对工作的推理能力。
- CBPV在多个方面有优势,如在处理函数应用时更明确,能解决代数效应中的问题,有助于类型推断,利用种类解决通用语言的问题等,且近期研究表明它还有更多可挖掘的潜力。
关键信息:
- CBV 先评估函数参数再传递,CBN 等待参数在函数体中使用时再评估。
- Rust 等语言使用 CBV,Haskell 等使用 CBN。
- CBPV 区分值和计算,如
ValType
和CompType
,通过Thunk
将计算转换为值,Return
将值转换为计算。 - 示例代码展示了 CBPV 在处理函数应用等方面的作用。
- CBPV 能解决代数效应中关于副作用的问题,在类型推断方面能处理嵌套泛型,在种类调用约定中能确定函数的arity等。
重要细节:
- 传统 lambda 演算中
App
项根据评估方式可分为 CBV 或 CBN,但只能选其一,CBPV 通过分离值和计算解决此问题。 - 在处理记录中的函数时,CBPV 需将函数转换为
Thunk
或Return
。 - 在类型推断中,CBPV 能根据函数的饱和状态和返回的闭包提供关键信息,有助于推断函数类型。
- 在种类调用约定中,通过给类型赋予更复杂的种类来解决通用语言的问题,CBPV 能明确函数的arity。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。