如何让语言同时提供按名称调用和按值调用?

day*_*day 4 programming-languages

是否可以使用语言提供按需调用(CBN)和按值调用(CBV)评估策略?我的意思是不修复它并在另一个模拟,但让用户在需要时选择哪个.例如,让语言具有evalScheme中可用的功能,该功能可以接受来自用户的另一个参数,指定他想要的评估策略.

Dav*_*rke 6

在一种语言实现中组合按需调用(懒惰)和按值调用(严格)当然是可能的,只要一个人注意避免使副作用懒惰的计算并使分歧计算严格.

在惰性(CBN)函数语言中使用严格性分析来检测何时可以使用CBV策略安全地评估函数.CBV评估通常更快,但对非严格函数使用此评估策略会改变程序的语义.

Wadler描述了如何在函数式语言中组合惰性和严格计算.

最终线程的lambda 也解决了这个问题.

Scala有一个关键字,lazy用于声明某些计算将被懒惰地执行.其他语言也有类似的结构.