我对 Javascript 框架感兴趣,例如 Rivertrail ,它提供了并行编程抽象,但仅当您传入执行工作的函数具有 no external side effects 时才提供定义明确的语义。 .
我想知道是否有任何方法可以编写一个检查来确保传入的函数没有副作用?或者对函数隐藏环境中的所有内容(以便它无需修改)?或者暂时将环境中的所有内容声明为“const”(但只是为了函数定义的范围?)(或者任何其他疯狂的想法,这将给我相当于在 gcc 中简单地声明 __attribute__ ((pure))
的效果。)
并行编程是“纯”函数式编程真正能够发挥作用的领域之一。如果没有纯函数,为并行程序定义合理的语义会变得非常困难(查看 C++ 的语义,其中他们必须定义什么是数据争用,以便他们可以声明任何具有数据争用的程序是未定义的.)
如果可能的话,我可以想象在其他地方有人可能会发现这很有用。例如,允许网页用户传递保证纯无副作用的 Javascript 函数(在查询期间检查某些条件)可能会很有用。
最佳答案
write a check that a passed in function is side-effect free?
这是"effect analysis" - 一种类型检查形式。
由于 Javascript 没有类型和效果系统,因此任何检测副作用的方法都必然是近似的并且依赖于启发式方法。对于 Javascript,一般来说没有办法做到这一点。
关于javascript - 有什么方法可以检查函数是否有外部副作用(或强制它不会)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16849261/