函数程序持久化的方法、电子设备及存储介质技术

技术编号:18667990 阅读:26 留言:0更新日期:2018-08-14 20:34
本发明专利技术实施例涉及应用程序开发技术领域,公开了一种函数程序持久化的方法、电子设备及存储介质。本发明专利技术中,该方法包括:执行目标程序时,判断目标程序的函数是否需要被保存,若需要被保存,则保存需要被保存的函数的上下文环境及运行代码;其中,被保存的函数为具备闭包恢复过程的持久化编译函数;判断是否需要恢复被保存的函数,在需要恢复被保存的函数时,读取被保存的函数的上下文环境及运行代码,并对被保存的函数进行现场编译,得到可运行的持久化编译函数;执行可运行的持久化编译函数。本发明专利技术通过自动存储函数及其闭包变量并恢复函数及其闭包变量来达到函数式程序持久化的目的,从而可极大地提高互联网应用的开发效率、降低出错率。

Method for persistence of function program, electronic device and storage medium

The embodiment of the invention relates to the technical field of application program development, and discloses a method for persistent function program, an electronic device and a storage medium. The method comprises the following steps: when executing the target program, judging whether the function of the target program needs to be saved, and if it needs to be saved, saving the context and running code of the function that needs to be saved; where the saved function is a persistent compiler function with the closure recovery process; and judging whether it needs to be saved. To restore the saved functions, when the saved functions need to be restored, the context and running code of the saved functions are read, and the saved functions are compiled on-the-spot to get the runnable persistent compiler functions; and the runnable persistent compiler functions are executed. The invention achieves the goal of functional program persistence by automatically storing functions and their closure variables and restoring functions and their closure variables, thereby greatly improving the development efficiency of Internet applications and reducing the error rate.

【技术实现步骤摘要】
函数程序持久化的方法、电子设备及存储介质
本专利技术实施例涉及应用程序开发
,特别涉及一种函数程序持久化的方法、电子设备及存储介质。
技术介绍
程序运行状态持久化是互联网应用开发的关键问题。一般而言互联网应用都具有复杂的业务,具有多步交互,且一项业务可能会持续很长时间。这需要互联网应用能够做到程序的持久化:如电商应用中,下单步骤会生成一个“订单”作为持久化的对象。持久化是将程序数据在持久状态和瞬时状态间转换的机制。在目前所有程序设计语言所定义的程序中,变量均属于瞬时状态,程序中断运行后该变量数据就会丢失,因而部分关键数据需要经过持久化才能维持业务的正常运转。目前相关技术还都需要开发人员自行决定哪些数据需要持久化。当前一些程序设计语言中已具备较为成熟的持久化方案,如Java的Hibernate组件,Python中的Pickle等;这些持久化方案通过显式地对该组件进行调用来将变量写入磁盘或数据库中。虽然这些方案能够解决持久化问题,然而这些持久化方案会使得程序代码多出来一些专门用于持久化的冗余代码,此外这些方案并不能帮助开发者判断何时应将变量持久化,何时读出变量。因此这些方案虽然提供了持久化方案,但对于初级程序员而言极容易误用,对于高级程序员而言又制约他们的开发效率。目前也有一些工具能够对程序代码自动产生持久化类。如JavaBeans、GreenDao等工具,能够根据数据库表自动创建类并交给程序员使用。这一工具解决了持久化组件的需要手工操作编写的困难。这类工具在客户端上的应用较为流行。此外,在程序设计时时常需要对复杂的数据结构进行持久化。如多级嵌套、甚至包括循环引用的对象等。该情况是广泛存在的,如电商的店铺会对应若干商品,商品会对应买家卖家用户,而卖家又对应店铺等。对于带循环引用的数据结构持久化,也是一个必需解决的问题。目前的做法主要依靠手工设计数据库来实现,并通过外键进行关联。另外也有circular-json等可以解决循环引用的对象序列化方案从而可以对复杂对象持久化。专利技术人发现现有技术中至少存在如下问题:这些持久化类通过人工定义对象的字段来自动生成数据库表、数据库操作等。这些工具相当于一种对数据库的易用性封装。这些工具虽然能够避免手工写数据库操作语句的工作,但仍然无法减轻开发者的劳动强度或降低出错率。首先这些持久化类无法对函数进行持久化。其次持久化的时机、读数据库的时机仍然要人工判断。对于复杂的服务端程序,一个业务流程会涉及到多段交互,因而需要多次存储和还原程序运行状态的代码;何时持久化、何时解变量、是否应当进入下一步仍然需要人工判断。自动产生持久化类的方案也只能是稍微减轻了开发者劳动量,并不能本质上解决存储和还原程序运行状态的问题。数据库外键关联技术能够将具有复杂数据嵌套结构的变量以合理的方式存储在数据库中。当前流行的数据库都已经具备了外键关联技术。此外,诸如circular-json、serializer等序列化工具也具备一定的序列化。这些工具为储存复杂的程序运行状态提供了良好的底层环境。这些序列化工具本质上仍然不能对函数进行持久化,因而也无法直接解决存储和还原程序运行状态的问题。但是这些工具对于复杂对象嵌套的解析能力为对复杂的程序运行时的变量进行解析和存储提供了良好的基础。
技术实现思路
本专利技术实施方式的目的在于提供一种函数程序持久化的方法、电子设备及存储介质,通过自动存储函数及其闭包变量并恢复函数及其闭包变量来达到函数式程序持久化的目的,从而使得开发者在基于函数式程序开发互联网应用时,无需手工进行持久化操作,可极大地提高互联网应用的开发效率、降低出错率。为解决上述技术问题,本专利技术的实施方式提供了一种函数程序持久化的方法,包括:执行目标程序时,判断所述目标程序的函数是否需要被保存,若需要被保存,则保存所述需要被保存的函数的上下文环境及运行代码;其中,所述被保存的函数为具备闭包恢复过程的持久化编译函数;判断是否需要恢复所述被保存的函数,在需要恢复所述被保存的函数时,读取所述被保存的函数的上下文环境及运行代码,并对所述被保存的函数进行现场编译,得到可运行的持久化编译函数;执行所述可运行的持久化编译函数。本专利技术的实施方式还提供了一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上所述的函数程序持久化的方法。本专利技术的实施方式还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的函数程序持久化的方法。本专利技术实施方式相对于现有技术而言,在执行目标程序时,当判断出目标程序中的函数需要被保存时,则保存该函数的上下文环境及运行代码,在需要恢复该函数时,读取保存的上下文环境以及运行代码,并进行现场编译得到可运行的持久化编译函数,继续执行该可运行的持久化编译函数即可。持久化编译函数是指与开发人员编写的函数等价的,但是自身具备闭包恢复过程的函数。因此,本专利技术通过存储函数及其闭包,并对函数进行现场编译,从而使得函数式程序能够自动实现持久化,进而可以大大提高互联网应用的开发效率,降低开发人员工作量以及出错率。另外,对所述被保存的函数进行现场编译,得到可运行的持久化编译函数,具体包括:对需要被恢复的函数的运行代码进行编译得到用于生成函数对象的函数类;将保存的上下文环境中的所述需要被恢复的函数的实例传递给所述函数类,并运行所述函数类,以生成一个函数对象;递归地执行上述一个函数对象的生成步骤,直到所述需要被恢复的函数的上下文环境中的所有函数对象均被重新生成,从而提供了一种现场编译的具体实现方式。另外,所述具备闭包恢复过程的持久化编译函数通过以下方式实现:从待持久化的原程序中提取出所有函数以及各函数的闭包;确定并记录所述各函数的上下文环境;在各所述函数中写入用于恢复所述闭包的运行代码以生成所述持久化编译函数,从而提供了一种持久化编译函数的具体实现方式。另外,所述所述需要被保存的函数的上下文环境具体包括:需要被保存的函数的实例、所述需要被保存的函数的祖实例以及所述祖实例的运行代码,从而提供了一种函数及其闭包的具体存储方式。另外,所述保存所述需要被保存的函数的上下文环境及运行代码,具体包括:获取所述需要被保存的函数的上下文环境及运行代码,并转换成预设格式的文件;保存所述预设格式的文件。另外,在所述保存所述需要被保存的函数的上下文环境及运行代码中,将需要被保存的函数的实例与需要被保存的函数对象一一对应关联。另外,判断所述目标程序的函数是否需要被保存具体为:若目标程序的函数被赋予所述目标程序中的变量,则判定所述目标程序的函数需要被保存。附图说明一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。图1是根据本专利技术第一实施方式函数程序持久化的方法的流程图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合附图对本专利技术的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本专利技术各实施本文档来自技高网
...

【技术保护点】
1.一种函数程序持久化的方法,其特征在于,包括:执行目标程序时,判断所述目标程序的函数是否需要被保存,若需要被保存,则保存所述需要被保存的函数的上下文环境及运行代码;其中,所述被保存的函数为具备闭包恢复过程的持久化编译函数;判断是否需要恢复所述被保存的函数,在需要恢复所述被保存的函数时,读取所述被保存的函数的上下文环境及运行代码,并对所述被保存的函数进行现场编译,得到可运行的持久化编译函数;执行所述可运行的持久化编译函数。

【技术特征摘要】
1.一种函数程序持久化的方法,其特征在于,包括:执行目标程序时,判断所述目标程序的函数是否需要被保存,若需要被保存,则保存所述需要被保存的函数的上下文环境及运行代码;其中,所述被保存的函数为具备闭包恢复过程的持久化编译函数;判断是否需要恢复所述被保存的函数,在需要恢复所述被保存的函数时,读取所述被保存的函数的上下文环境及运行代码,并对所述被保存的函数进行现场编译,得到可运行的持久化编译函数;执行所述可运行的持久化编译函数。2.根据权利要求1所述的函数程序持久化的方法,其特征在于,对所述被保存的函数进行现场编译,得到可运行的持久化编译函数,具体包括:对需要被恢复的函数的运行代码进行编译得到用于生成函数对象的函数类;将保存的上下文环境中的所述需要被恢复的函数的实例传递给所述函数类,并运行所述函数类,以生成一个函数对象;递归地执行上述一个函数对象的生成步骤,直到所述需要被恢复的函数的上下文环境中的所有函数对象均被重新生成。3.根据权利要求1所述的函数程序持久化的方法,其特征在于,所述具备闭包恢复过程的持久化编译函数通过以下方式实现:从待持久化的原程序中提取出所有函数以及各函数的闭包;确定并记录所述各函数的上下文环境;在各所述函数中写入用于恢复所述闭包的运行代码以生成所述持久化编译函数。4.根据权利要求1所述的函数程...

【专利技术属性】
技术研发人员:刘诗聪武红华
申请(专利权)人:上海赞控网络科技有限公司
类型:发明
国别省市:上海,31

相关技术
    暂无相关专利
网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1