数学概念上来讲,现代计算机就是“万能图灵机”的一个具体实现。从哲学上来说,以二进制逻辑运算为基础的计算机,其行为必然是确定的。“对于一个确定的输入,其输出是完全确定的。”哲学家和科幻小说作家们统一的观点是:无论如何,如果不为计算机的基础计算模型引入不确定性,人工智能(AI)不可能真正实现。但是,向一切其他问题一样,当我们换个角度考虑“计算机行为的确定性问题”的时候,会得出不同的结论。
通常当我们仅仅掌握一个系统(是系统论的哲学概念,不是某个计算机软件或硬件系统)的部分信息的时候,这个子系统的边界同样是不确定的。现代计算机通常由大量不同的部分组成,每一个部分都是前述的这类子系统,它们的边界是松散的,仅仅是一个大致类型的边界的约定。举一个例子:比如我们可以通过某个功能取得一块确定大小内存,但我们不可能事先知道得到的内存内保存的具体内容。
另一方面,作为“高级程序设计语言”,其对机器底层的表达能力还是有相当的差距的,尤其当某个语言要保持某个概念的“语义”时。语言通过语义表达的概念,是面向程序员的一种抽象,通常没有直接对应的机器底层机制,而是通过比较复杂的机器行为组合来模拟。语言抽象语义与机器底层机制的断层,就会造成另一种形式的不确定性。
最后,我们要认识到语言本身的社会性。语言的发展过程中,通常会有许多不同的实现给出不同的行为。作为 C++ 语言的特例,它还包括许多从 C 语言的各种实现版本遗传来的历史问题。对于这类不同编译器会给出不同解释和行为的概念,C++ 标准的策略是保留它们到特定的编译器来实现,标准中仅仅给出可能的 C++ 实现的行为选择。
这些不确定性自然会被带到我们写的程序中。
<