0

我对像Rivertrail这样的 Javascript 框架很感兴趣,它提供了并行编程抽象,但仅在您传入的用于完成工作的函数没有外部副作用时才提供明确定义的语义。

我想知道是否有任何方法可以检查传入的函数是否无副作用?还是从函数中隐藏环境中的所有内容(使其无需修改)?或临时声明环境“const”中的所有内容(但只是为了函数定义的范围?)(或任何其他疯狂的想法,这让我相当于__attribute__ ((pure))在 gcc 中简单地声明。)

并行编程是“纯”函数式编程可以真正发挥作用的地方之一。如果没有为并行程序定义合理语义的纯函数,就会变得非常困难(查看 C++ 的语义,他们必须定义什么是数据竞争,以便他们可以声明任何具有数据竞争的程序都是未定义的。)

如果可能的话,我可以想象其他人可能会发现这很有用的地方。例如,允许网页用户传入有保证的纯无副作用 Javascript 函数可能会很有用,这些函数会在查询期间检查某些条件。

4

1 回答 1

2

写检查传入的函数是否无副作用?

这就是“效果分析” ——一种类型检查。

由于 Javascript 没有类型和效果系统,任何检测副作用的方法都必然是近似的并且依赖于启发式。对于 Javascript,一般来说没有办法做到这一点。

于 2013-06-01T09:58:29.263 回答