美文网首页软件架构与设计
泛型是否必要?深入灵魂的探索

泛型是否必要?深入灵魂的探索

作者: ProgramInsights | 来源:发表于2019-06-16 16:36 被阅读37次

    编程的组件需要输入和输出,以此来展示该组件和其他组件交互的界面;有一种特殊的参数是所操作数据的类型,主要作用是确定数据的大小以及操作限制。
    说白了就是对数据的描述,也称元数据schema;那这些如何跟组件关联起来?

    了解了问题的本质,就可以推理出问题存在的全部解决方案,然后择优而用:
    1、做为一个普通参数传入,这个参数充当schema的作用;
    2、当作一个特殊的参数传入,如泛型,可以理解成一种高效的schema,或其优化版;
    3、组件从配置系统中获取schema,和前面两种的差别就是:变成了运行时获取;

    简单的第一因:大统一。那如何给出大统一的解决方案,而且是简单的实现呢?

    之所以要提供schema,目的就是为了让组件所实现的功能和具体数据无关;如果说schema是描述数据长什么样,则组件描述的是数据如何计算,即算法。也就是那条有名的编程定义:
    程序(组件)= 算法(组件实现)+ 数据结构(schema)
    每个编程语言都是在特定的环境下,为了解决面临的问题,对这条定义给出了自己的实现。

    现在提到了环境这个历史遗留问题:程序+环境(而且是多个并行的环境)构成了超级复杂系统;那么,首先面临的问题是:能否把环境排除在外,即是否存在通用的程序设计?

    这应该是有的。首先,理论上可行。如果这样,编程语言的发展,结果就只有一种:终极语言
    这个语言首先是和环境无关的:环境会影响schema的最优选择,于是终极语言提供的是元schema,即协议;环境也会影响算法,于是终极语言提供的是元算法,即协议间的关系,也称协议栈。

    协议,超越语言、超越CPU指令,回归信息计算
    编程语言、CPU架构沦为载体,也属于环境的一部分,那现在问题简化为:计算能否脱离信息独立描述?然后还能应用在信息上?

    探索到这就快上升到灵魂级别了,就像如何解开“鸡生蛋、蛋生鸡”的谜题一样,计算的描述本身也是一种信息,也就是冯诺伊曼解开自复制的谜题:只有一种东西--暂且称为信息,其中一部分充当图纸的作用,剩余的充当材料,如果图纸不变、材料足够,就能无限克隆下去;当然进一步修改图纸也不难。

    这种东西已存在的只有DNA,也是终极语言的目标。目前有点大统一意思的有:
    编译器后端的中间语言,各种具体的编程语言是和人交互的前端界面,后端是可以统一的;
    网络协议栈,实现了在全球范围内搬砖(数据),把搬运算法编码为信息存在协议头(也就是图纸部分);
    如果把中间语言编码为协议头呢?能否向终极语言迈进一步?

    目前的可执行文件(ELF格式)、运行时(进程)内存模型,其实和图纸+材料的架构差不了多少;在载体泛型的方向上(类比数据类型的泛型),虚拟机也被大量应用,相当于大统一了材料;在算法泛型的方向上,也有协议栈的大量应用,还有模版的少量尝试,相当于大统一了图纸;唯独还没有二者的结合。

    泛型虽不是万能的,但却是一种简单、快速的解决方案。在终极语言出现之前,对提升代码质量还是有帮助的。

    T.B.C.

    相关文章

      网友评论

        本文标题:泛型是否必要?深入灵魂的探索

        本文链接:https://www.haomeiwen.com/subject/tfxgfctx.html