我知道在 Prolog 中你可以做类似的事情
someFunction(List) :-
someOtherFunction(X, List)
doSomethingWith(X)
% and so on
这不会遍历 List 中的每个元素;相反,它将分支到不同的“机器”(通过使用多个线程,在单个线程上回溯,创建平行宇宙或你有什么),对导致
someOtherFunction(X, List)
的每个可能的 X 值单独执行返回真实! (我不知道它是如何做到的,但这对问题并不重要)
我的问题是:还有哪些其他非确定性编程语言? 似乎非确定性是在具有不可变变量的语言中实现多线程的最简单、最合乎逻辑的方法,但我以前从未见过这样做过 - 为什么这种技术没有更受欢迎?
最佳答案
Prolog 实际上是确定性的——评估的顺序是规定的,顺序很重要。
Why isn't nondeterminism more popular?
非确定性不受欢迎,因为它使程序结果的推理变得更加困难,并且真正的非确定性执行(与语义相反)很难实现。
我所知道的唯一非确定性语言是
SPIN 确实使用了不确定性,并在可能的情况下探索了整个状态空间。
当然,如果线程不同步,任何多线程语言的行为都是不确定的,但这正是难以推理的事情——以及为什么实现高效、正确的无锁数据结构如此困难。
顺便说一句,如果您希望实现并行性,您可以通过一个简单的
map
来实现相同的目的。在像 Haskell 这样的纯函数式语言中使用函数。 Google MapReduce 基于函数式语言是有原因的。
关于multithreading - 非确定性编程语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185277/