能否重新定义机器语言?


Author: Kimmy

能否重新定义机器语言?

知乎链接


谢邀。

那么请问这个机器的每一位你要设置几个状态,分别怎么在物理层实现。


  1. 从机器的结构来说

采用二进制位的一个原因是电路通断表示状态易于实现,所以无论是0,1还是阴阳(参考易经,64卦象刚好是 [公式] ),都只是我们在具体描述二进制值得时候采用的符号而已;另外一个原因就是,电路是可以组合的,这样简单的二进制我们可以通过位扩展来增强其计算能力,比如现在64位就完全能满足日常工作和生活了。


如果题主想象的是从根本上解决这个问题,那么就必然要扩展进制位。当然不是没人进行过尝试;但是要么还是以二进制电路为基础做基元位宽的改动(比如把两个二进制位当成一个四进制位,或者跟题主当前描述的有点相似),要么就要专门设计一套曲折的逻辑和基本上能够被实现的结构(比如,三进制计算机。参见Ternary computer)。但是,第一种办法设计、实现和推行起来都很复杂(毕竟二元数理逻辑近几百年还是最被普遍接受的),第二种办法又不能够摆脱现有的结构,所以,并没有什么意义。


2.从汉字字符集上来说

汉字字符数量庞大,字形复杂多变,而且多数都存在着形态相似、同音、多义的情况,并不像拉丁字符等可以在8位以内能够完整表示出来。并且,无论是通过笔划还是拼音编码,都很难高效的表示文字,所以其结果可能还不如现在通行的国标码或者UCS,然而他们都是使用的四字节以内的数字来表示。

一个简单的例子比如,我用五笔划(横竖撇折勾)来表示基本的一个汉字字元位,那么如果我要表示“方文山”,大概会是:

撇(点)横勾撇撇(点)横撇撇(捺)竖折竖

但其实,汉字“放”完全可以跟“方文”是同样的编码。这只是一个简单的例子,但其实汉字的任何合成字拆开以后都能跟对应的单字冲突(“题”,“是页”)。

有个办法可以解决这个问题,就是跟变长编码的思路类似,在每个字符的前面加一个长度信息,比如

4撇(点)横勾撇4撇(点)横撇撇(捺)3竖折竖

但是这样就更容易搞得不伦不类了,特别是遇到动辄几十画的字,简直能要人命。


3.中文编程语言

其实说到底,现在计算机的这套模型,在生物计算和量子计算还没有突破性的结构变动并量产之前,是基本上很稳定的模型了,所以不要老是想着从都到尾都汉化。就如同中文配音的外语电影总感觉有些违和一样,反倒不如学学字幕组,保留原声,在字幕再创作上好好下功夫。

无论再怎么复杂,编程语言的前端也只是做到了艹字符串并转化为编译器的运行时抽象表示。所以学学Parsing技术造几个跟业务集成度比较高的DSL,远比花费大心机搞一堆狗屁不通的“中文编程语言”稳得多。


以上。

创建时间:2017-09-24 最近更新时间:2023-11-03