[发明专利]一种数据描述语言中记录类型的合并方法在审
申请号: | 202211596434.3 | 申请日: | 2022-12-12 |
公开(公告)号: | CN115826927A | 公开(公告)日: | 2023-03-21 |
发明(设计)人: | 陈钢;王楠;朵晓东 | 申请(专利权)人: | 南京航空航天大学 |
主分类号: | G06F8/20 | 分类号: | G06F8/20;G06F8/71 |
代理公司: | 南京瑞弘专利商标事务所(普通合伙) 32249 | 代理人: | 任志艳 |
地址: | 211106 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 数据 描述 语言 记录 类型 合并 方法 | ||
本发明提供一种数据描述语言中记录类型的合并方法,所述方法包括:按照递归类型定义,将参与合并的原左记录类型拆分为单属性记录和另一个记录类型的联合,即({k:T}|R0);接着递归合并{k:T}和原右记录类型,转换得到中间类型继续与R0调用递归合并处理,得到最终的结果类型。通过该合并方法获得的结果记录类型满足良构的条件,即所有的属性名都是唯一的,同时属性名对应的值类型都是形式良好的。通过采用本发明的合并算法,能够达到简化用户操作、降低运维成本的目的,便于解决多人协同开发中可能存在的记录类型冲突的问题。
技术领域
本发明属于数据合并技术领域,具体而言,涉及基于联合类型的数据描述语言的记录类型合并算法。
背景技术
随着云原生时代的到来,推动了新一代软件形态的发展,许多大型应用软件的功能被拆解为多个独立的需求模块,这些模块利用一批微服务及其组合来实现,开发人员通过大量复杂配置管理微服务。在实际开发过程中,多个团队协作开发成为主流。以配置参数container:{port:(int|string)}为例,一个公司中A团队的编程习惯是为port属性分配一个整数值m,而B团队的编程习惯是为port属性分配一个字符串值m。由此可见,两个团队想要表达的语义是一样的,但是编程习惯不同。为使完整的应用配置生效,则需要汇总所有的配置参数,而在这个汇总过程中,对象数据合并的处理至关重要。
然而,在现有的可用于对象数据合并的处理方案中,大致分为两种,分别为传统的基于从右向左的覆盖更新原则和不允许包含同名属性的对象进行合并。
第一种方案是由Cardelli等人提出的,它的实现方式是按照从右向左的方向顺序覆盖原左对象。其优点是简单易实现,不依赖复杂计算,但缺点是可能会丢失原始数据,而且不能解决所有的记录合并问题。下面给出了一个运行时进行类型覆盖出现失败的示例:
假设函数f的输入参数是两个记录类型x和y,返回值为合并x和y的结果,f=lambda x:{k:int}.lambda y:{h:bool}.(x||y)
关于f的结果类型,{k:int}||{h:bool}={k:int,h:bool},由此可见,结果类型是良构(well-formed)。如果f接受的实参如下所示:
x1={k=3,h=4}y1={k=true,h=false}
然后,使用运行时类型覆盖将函数f应用于x1和y1,将会出现失败。根据f的结果类型,x1的k属性值应该覆盖y1的k属性值,而y1的h属性值应该覆盖x1的h属性值。因此,单向的类型覆盖不足以满足类型需求。为解决这个问题,一种方法是抛出运行时错误,但这违反了类型检查的原则;另一种方法是为(x1||y1)编译特定的指令,但这种方法计算成本较高。由于这些难题,Harper和Pierce提出了第二种解决方案,即不允许包含同名属性的对象进行合并。
第二种方案是通过引入类型断言(#),即R1#R2,表示记录类型R1和R2的标签集合不相交。在他们的合并转换规则中,只有当R1和R2满足谓词#时,合并表达式R1||R2的结果类型才是良构的。该方案避免了上述方案遇到的单向类型覆盖出现失败的情况,也避免了丢失原始数据的问题。但是,其缺点是需要为合并算法额外提供一套类型断言规则的限制,形式化验证成本高;并且,该合并算法无法解决{k:int}||{h:bool,k:float}的问题。
发明内容
本发明所要解决的技术问题是针对现有技术中存在的上述缺陷,提供一种通过联合类型来处理记录类型合并的结果类型,避免了多个团队协同开发中可能存在的数据类型冲突。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京航空航天大学,未经南京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202211596434.3/2.html,转载请声明来源钻瓜专利网。
- 数据显示系统、数据中继设备、数据中继方法、数据系统、接收设备和数据读取方法
- 数据记录方法、数据记录装置、数据记录媒体、数据重播方法和数据重播装置
- 数据发送方法、数据发送系统、数据发送装置以及数据结构
- 数据显示系统、数据中继设备、数据中继方法及数据系统
- 数据嵌入装置、数据嵌入方法、数据提取装置及数据提取方法
- 数据管理装置、数据编辑装置、数据阅览装置、数据管理方法、数据编辑方法以及数据阅览方法
- 数据发送和数据接收设备、数据发送和数据接收方法
- 数据发送装置、数据接收装置、数据收发系统、数据发送方法、数据接收方法和数据收发方法
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置