首先赞两个答案: @vczh 和 @digau 。他们的回答不是简单的抖机灵,实际上道出了母体的一些本质。
母体的世界存在很多层面,对世界的构建和改造在每一个层面都会发生,而每一个层面的机制是相当不同的。粗略的可划分为三个层次:
1.最外层是虚拟现实。在这个层面,母体中程序(人类等)在受限的环境中对世界产生影响,也就是沙盒,类似于未越狱的iPhone。在正常情况下(未越狱),沙盒中的程序是不能够修改系统的,只能改造自身周边的环境并与其它程序互动。而这些程序做这些事的方法不是常规意义上的编程语言,而更像是图形化的DSL语言,也就是说这种语言的形式不是代码,而是一些具体的选项和动作。实际上就相当于我们在游戏中所做的事,而从程序对环境的改造能力上来看,Minecraft更接近母体的世界。
2.中间层是母体的各种规则,相当于自然法则。我猜题主关心的可能就主要是这个层次的问题。在这个层面,母体用于控制系统的工具是一种类似Lisp的语言,称其为语言,可能并不合适,因为它并不是以文本的形式存储的,这种“语言”是存在于存储系统中的一大块数据结构,这种数据结构称为AST(抽象语法树),抽象语法树的样子和s表达式非常相似,因此也可以称其为Lisp语言的一个变种。但是要注意,那里并没有任何Lisp语言的代码存在。而添加规则的更直接的方式是使用逻辑,因此这种“语言”的大部分结构实际上是一种拥有Lisp形式的Prolog语言的变种。补充说明一下,由于并非代码,各种束手缚脚的编码规范在这里是不存在的,母体也并不区分严格复制与复用。也没有命名规范,这个系统中的参数名称都是各种对人类毫无意义的长串。
3.基础层,这部分比较类似操作系统或虚拟机的内核。母体不可能凭空产生,它自身也必然有一个创造者。这个创造者不一定是一个人,而可能是一个组织(微软?谷歌?)。曾经有一篇《黑客帝国编年史》的文章,其中提到母体的最初设计者是暴雪。这篇文章已经难觅踪影,是否出自官方也不得而知,但是其内含的逻辑是正确的。如果这个创造者是微软,那么系统基础一定是.net,如果这个创造者是谷歌,那么使用V8的可能性会比较大。使用机器语言来开发一个庞然大物?恐怕极少有人这样干吧,难道会有人用原子来组装大炮?并不排除母体的计算能力强大到一定程度,又回过头来修改自己的基础层的可能,但这种可能受限于基础层的体系结构。
再来探讨一下题目中的几个问题。
题主的假设“机器肯定会用机器语言”这个假设在某种程度上是正确的,因为严格来说,对于母体没有低级语言和高级语言的区分,只有构造块的复杂程度的区分。如果构造块的复杂程度可以用于区分低级语言和高级语言,那么也可以说母体一定会用高级语言进行系统构建。注意,在那里效率只和构造的优化程度有关,而和是否机器语言无关。
“机器语言”这个概念有些问题,实际上不同的机器其“机器语言”是不同的。一个显而易见的例子是虚拟机,它实际也是一个机器,它的机器语言明显不同于汇编语言所代表的那种机器语言。实际上冯·诺依曼机器并不是唯一的硬件架构,Lisp机器是一种真实存在过的硬件结构,直接使用Lisp这种抽象程度很高的语言进行操控,Lisp机器比冯·诺依曼机器效率差是由硬件结构制约的,并不会永远如此。鉴于此,母体也有可能构建于Lisp机器上,这样其基础层便是基于Lisp。因此题主问题描述中的第一句话在很大程度上是不成立的。
抽象在构建复杂系统的过程中是一定存在的,其本质是简化理解,一个飞行员不必知道飞机是如何造出来的,他只需要知道按哪个键可以起飞,扳哪个柄可以转向。即使对于母体也是如此,比如,在未抽象出“人”这个概念以前,要让一堆像人一样的东西从屋里来到屋外,只能先把头搬出来,再把身子搬出来,最后再搬腿和手。寒~~!这实际上反映出抽象与效率也有一定关系,如果经过了抽象,上面这个例子中母体只需要寻址一次就可以了,否则需要寻址很多次。
现有的绝大部分编程语言的存在都和人的毛病和习惯有关。前者的例子如打字速度慢,因此希望编程语言打字少;后者的例子如中缀表达式,因为我们学了几十年的数学都是用中缀表达式,因此抛弃了实际上更优雅的前缀表达式。还有一个过去几十年来一直折磨着开发人员的约束——效率。这种种限制让现存的大部分语言都成了领域专家,擅长某一领域的工作,在另外一些领域捉襟见肘。而对于母体,没有效率以外的其它问题,因此大部分语言都没有存在的意义。但是会有大量的DSL(领域语言),类似于html,XML,JSON,Regex的这些东西仍然有可能存在,存在形式是它们的解释器。
Design pattern在机器的世界中是没有意义的。首先需要注意,Design pattern的概念本身就有问题,GoF定义的23种Design pattern,有很多实际上混淆了问题和方案,而且不同的Design pattern之间也并不在相同的抽象层次上进行描述。即便如此,其它的许多Design pattern实际上也都没有超出GoF的范围。Design pattern的本质在C系语言的世界里体现为指针的各种操作,而在Lisp里体现为函数,在那里Design pattern毫无用武之地。
— 完 —
本文作者:知乎用户(登录查看详情)
【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)
此问题还有 24 个回答,查看全部。
延伸阅读:
为什么黑客都要会python语言,在黑客编程中有什么特别之处么?
《银河系漫游指南》里的 42 是什么意思?