编程的组件需要输入和输出,以此来展示该组件和其他组件交互的界面;有一种特殊的参数是所操作数据的类型,主要作用是确定数据的大小以及操作限制。
说白了就是对数据的描述,也称元数据、schema;那这些如何跟组件关联起来?
了解了问题的本质,就可以推理出问题存在的全部解决方案,然后择优而用:
1、做为一个普通参数传入,这个参数充当schema的作用;
2、当作一个特殊的参数传入,如泛型,可以理解成一种高效的schema,或其优化版;
3、组件从配置系统中获取schema,和前面两种的差别就是:变成了运行时获取;
简单的第一因:大统一。那如何给出大统一的解决方案,而且是简单的实现呢?
之所以要提供schema,目的就是为了让组件所实现的功能和具体数据无关;如果说schema是描述数据长什么样,则组件描述的是数据如何计算,即算法。也就是那条有名的编程定义:
程序(组件)= 算法(组件实现)+ 数据结构(schema)
每个编程语言都是在特定的环境下,为了解决面临的问题,对这条定义给出了自己的实现。
现在提到了环境这个历史遗留问题:程序+环境(而且是多个并行的环境)构成了超级复杂系统;那么,首先面临的问题是:能否把环境排除在外,即是否存在通用的程序设计?
这应该是有的。首先,理论上可行。如果这样,编程语言的发展,结果就只有一种:终极语言。
这个语言首先是和环境无关的:环境会影响schema的最优选择,于是终极语言提供的是元schema,即协议;环境也会影响算法,于是终极语言提供的是元算法,即协议间的关系,也称协议栈。
协议,超越语言、超越CPU指令,回归信息和计算。
编程语言、CPU架构沦为载体,也属于环境的一部分,那现在问题简化为:计算能否脱离信息独立描述?然后还能应用在信息上?
探索到这就快上升到灵魂级别了,就像如何解开“鸡生蛋、蛋生鸡”的谜题一样,计算的描述本身也是一种信息,也就是冯诺伊曼解开自复制的谜题:只有一种东西--暂且称为信息,其中一部分充当图纸的作用,剩余的充当材料,如果图纸不变、材料足够,就能无限克隆下去;当然进一步修改图纸也不难。
这种东西已存在的只有DNA,也是终极语言的目标。目前有点大统一意思的有:
编译器后端的中间语言,各种具体的编程语言是和人交互的前端界面,后端是可以统一的;
网络协议栈,实现了在全球范围内搬砖(数据),把搬运算法编码为信息存在协议头(也就是图纸部分);
如果把中间语言编码为协议头呢?能否向终极语言迈进一步?
目前的可执行文件(ELF格式)、运行时(进程)内存模型,其实和图纸+材料的架构差不了多少;在载体泛型的方向上(类比数据类型的泛型),虚拟机也被大量应用,相当于大统一了材料;在算法泛型的方向上,也有协议栈的大量应用,还有模版的少量尝试,相当于大统一了图纸;唯独还没有二者的结合。
泛型虽不是万能的,但却是一种简单、快速的解决方案。在终极语言出现之前,对提升代码质量还是有帮助的。
T.B.C.
网友评论