第十三章 代码及其在机器功能的控制中之作用

    让我们现在转入记忆以外的其他问题。我要讲的是组织成逻辑指令的某些原理。这些原理,在任何复杂自动系统的功能中,都是相当重要的。

    首先,我要引入讨论这个问题所需要的一个术语。使一个自动机能够承接并按此完成若干有组织的任务的逻辑指令系统,就叫做代码。所谓逻辑指令,是指像在适当的轴突上出现的神经脉冲之类的东西,事实上,这可以指任何诱发一个数字逻辑系统(如神经系统)并使它能够重复地、有目的地作用的东西。

    完全码的概念

    在讲到代码时,下列的代码的区分问题就突出来了。一个代码,可以是完全的,用神经脉冲的术语来说,它规定了一序列的脉冲和发生脉冲的轴突。这种完全码,完全规定了神经系统的一定的行为,或者,正如上面比较过的那样,规定了相应的人造自动机的一定行为。在计算机中,这些完全码是许多指令组,它给出了一切必要的规则。如果自动机要通过计算解出一个特定的问题,它必须由一套完全码来控制。现代计算机的运用,要依仗使用者的一种能力:发展和规定出任何给定问题(这个问题是要这个机器解算的)所必需的完全码。

    短码的概念

    和完全码相对的,还存在着另一类代码,我们最好把它叫做短码。它是根据以下的概念形成的。

    英国的逻辑学家R.图灵在1927年证明(在图灵以后,许多计算机专家把图灵的原理以各种特定方法用于实践):有可能发展一种代码指令系统,这种指令能够使一个计算机像另一个特定的计算机那样操作。这种使一个计算机模仿另一个计算机的操作的指令系统,就叫做短码。让我们现在稍为具体地来讨论这些短码的发展及其运用的典型问题。

    我已经讲过,一个计算机是被代码、符号序列(通常是二进制符号,即一序列位)所控制的。在任何支配某特定计算机的运用的指令中,必须明确:哪些位(一序列的信息)是机器的指令,这些指令将使机器做些什么?

    对于两个不同的计算机来说,这些有意义的位序列(二进制信息序列)是不必相同的,它们对于各自相应的计算机运算的作用,也是可以完全不相同的。所以,如果对一个机器,给以一组专用于另一个机器的指令,这样,对这个机器来说,这些指令就是无意义的(至少是部分地无意义的)。也就是说,这些信息序列,对于这台机器来说,是不完全属于有意义的信息序列的范围。或者,如果这台机器“服从”这些无意义的指令时,这些指令会使它作出在原来设计为解出某一问题的组织方案以外的操作。一般来说,它将使这台机器不能进行有目的的操作;这种操作是解决一个具体的、有组织的任务,即解出需要解算的问题的答案所要求的。

    短码的功能

    按照图灵的方案,一个代码,如果要使一台机器像另一台特定的机器那样操作的话(即:使前者模仿后者),必须要做到以下各点。它必须包括这样的指令(指令是代码的进一步的具体细节,这个指令是这台机器所能理解并有目的地服从的),它能够使机器检查每一个收到的指令,并决定这个指令是否具有适用于第二台机器的结构。它必须包括足够的指令(用第一台机器的指令系统表达),使这台机器发生动作,这些动作,和第二台机器在这一指令影响之下发生的动作相同。

    上述图灵方案的一个重要结果是:用这个方法,第一台机器可以模仿任何其他一台机器的行为。这种使机器跟着另一台机器做的指令结构,可能和第一台机器所实际包含的一种特性完全不同。就是说,这种指令结构的性质,实际上可以比第一台机器所具有的性质复杂得多,即:第二台机器的指令中的每一个指令,可以包括第一台机器所完成的许多次运算。它可以包括复杂的、重复的过程和任何多次的动作。一般来说,第一台机器在任何时间长度内和在任何复杂程度的可能的指令系统控制之下,能够完成任何运算,只要这些运算是由“基本”的操作构成的就成(所谓基本的操作,就是指基础的、非复合的和原始的操作)。

    把这种派生的代码,叫做短码,是由于历史的原因。这些短码,当初是作为编码的辅助方法发展起来的。由于需要给一台机器编出比它自己本来的指令系统更简短的代码,因此,就用这样的处理方法:把它当做一台完全不同的机器,这台机器具有更方便的、更充分的指令系统,它能允许更简单、不那么琐碎的、更直率的编码。