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

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

作者: 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.

相关文章

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

    编程的组件需要输入和输出,以此来展示该组件和其他组件交互的界面;有一种特殊的参数是所操作数据的类型,主要作用是确定...

  • 最强整理:一线互联网移动架构师筑基必备技能之Java篇

    移动架构师筑基必备技能 一、深入Java泛型 泛型的作用与定义通配符与嵌套泛型上下边界RxJava中泛型的使用分析...

  • Type 深入了解

    Type.IsGenericType 返回类型是否是泛型,true泛型, false非泛型 typeof(Type...

  • V语言学习笔记-14泛型

    目前的泛型主要有这三种:泛型结构体,泛型函数,泛型方法 泛型结构体 泛型函数 判断2个数组是否相等的泛型函数 泛型方法

  • 泛型

    java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一Java泛型深入理解加泛型面试数组的协变性与范型的不可变性

  • 2018-04-28

    163课自定义泛型_深入1_子类_属性类型_重写方法类型_泛型擦除

  • java泛型、泛型的基本介绍和使用

    现在开始深入学习java的泛型了,以前一直只是在集合中简单的使用泛型,根本就不明白泛型的原理和作用。泛型在java...

  • [转载] java泛型(一)、泛型的基本介绍和使用

    现在开始深入学习java的泛型了,以前一直只是在集合中简单的使用泛型,根本就不明白泛型的原理和作用。泛型在java...

  • Java 泛型擦除原理

    问:请比较深入的谈谈你对 Java 泛型擦除的理解和带来的问题认识? 答:Java 的泛型是伪泛型,因为在编译期间...

  • 深入泛型2

    1、 应用泛型分两类: 直接用:List s = new ArrayList (); 扩展应用: 这样一来,Us...

网友评论

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

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