javascript - 有什么方法可以检查函数是否有外部副作用(或强制它不会)?

标签 javascript functional-programming constants immutability

我对 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/

相关文章:

c++ - 使用 Visual Studio 2012 编译时,此代码会出现错误,但使用代码块就可以了

javascript - Rails 包含第三方 Javascript 库文件

haskell - Lisp 有类似 Haskell 的 takeWhile 函数吗?

c# - 为什么 ReSharper 更喜欢 const 而不是 readonly?

c - 在 C 中,可以通过指针修改 const 变量吗?

java - 具有两种参数类型的 Scala 向左折叠

javascript - 匹配起始字符串和可能的终止字符串之间的所有内容

javascript - 在 Angular/JavaScript 中通过 Webpack 使用 prod/dev 文件

javascript - 如何通过检查元素找到文件的位置?

haskell - 关联和交换之间的区别