我对像Rivertrail这样的Javascript框架很感兴趣,它提供了一个并行编程抽象,但只有在你传入工作的函数有no external side effects时才提供定义良好的语义。
我想知道是否有办法写一个检查传入函数是否是副作用?或者从一个函数隐藏环境中的所有东西(这样就没有什么可以修改的)?或者暂时声明环境中的所有内容“const”(但只是为了函数定义的范围?)(或者任何其他疯狂的想法,相当于在gcc中简单地声明__attribute__ ((pure))
。)
并行编程是“纯粹的”函数式编程可以真正发挥作用的地方之一。没有为并行程序定义合理语义的纯函数变得非常困难(查看C ++的语义,他们必须定义 data-race 是什么,以便他们可以声明任何具有一个的程序是未定义的。)
如果可能的话,我可以想象有人会发现这个有用的其他地方。例如,允许网页用户传递有保证的纯无副作用Javascript函数(在查询期间检查某些条件)可能很有用。
答案 0 :(得分:2)
写一个检查传入的函数是否有副作用?
这是"effect analysis" - 一种类型检查。
由于Javascript没有类型和效果系统,任何检测副作用的方法都必然是近似的,并且依赖于启发式方法。对于Javascript,通常无法做到这一点。