编程世界里总有些语言,诞生的目的就不是为了好用。它们更像是一种智力挑衅,或者说,对编码规则的极端反叛。在BranFlakes和Befunge这些出了名难懂的语言之后,1998年又冒出来一个更疯狂的——Malbolge,直接以但丁《神曲》地狱第八层命名。
Malbolge的设计者Ben Olmstead给这个语言定了两条死规矩:代码必须在运行中修改自身,以及采用三进制算术系统。这两条规则叠加在一起,让编写Malbolge程序变成了一场几乎不可能完成的任务。它故意建立在BranFlakes和Befunge的困难之上,还在里面融入了早期计算机科学和加密技术的概念。
![]()
有意思的是,第一个能跑通的Malbolge程序,并不是人手写出来的。Andrew Cooke用Lisp实现了一套束搜索算法,通过广度优先的方式构建搜索树,最终让机器自己找到了解法。这大概也算一种讽刺:人类设计出一个对人脑极不友好的系统,最后由另一种机器来破解它。
Malbolge的运行机制也够奇特。它只有三个可访问的内存位置,分别叫a(累加器)、c(代码指针)和d(数据指针)。解释器执行程序时,先检查当前代码位置指向的内存数值是否落在33到126这个区间内。如果是,就套用一个翻译表:把原数值减去33,加上c的值,再对94取模。如果不在这个区间,程序直接终止。等于说,每一步都在做密码学级别的换算。
这个语言总共只有8条指令,每条指令的操作基于每个机器字的三态位。比如变量‘J’会把指针设到已指向的值上,‘i’则把指针设到即将指向的值。字符‘*’会把d指向的单元的三进制值向右旋转一位,‘P’会在d指向的单元上对a的内容执行三态位运算,‘<’负责从标准输入读取ASCII值。所有运算都在这个狭窄的三进制世界里打转。
后来有人试图让Malbolge稍微“可写”一点。日本研究人员实现了一个叫LaL的汇编语言,另一个叫HeLL的汇编语言则是因为2013年之前LaL没有精确规范而出现(现在规范已公开)。这两个汇编层都用了助记符和标签,让程序员不用直接操作三进制内存地址。不过说到底,写Malbolge程序更多是为了一种“我做到了”的证明,实际应用价值几乎为零——尽管在它的设计框架下,确实能写出像REBOL这样有一定用处的程序。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.