面向元编程、交互式编程和区块链互操作的与编程语言无关的虚拟机制造技术

技术编号:24573014 阅读:10 留言:0更新日期:2020-06-20 23:59
本发明专利技术公开了一种虚拟机,所述虚拟机将源代码解析为表示虚拟机程序不同部分的结构存储字段集,所述结构存储字段集的字段表示程序组件的特征,所述结构存储字段集包括以下的一种或多种:程序根结构、调用堆栈中的函数调用、程序包、数据结构、函数、表达式和参数。虚拟机具有多功能性,它允许以不同编程语言编写的程序以解释或编译的方式在虚拟机上运行,并为程序员提供了与不同的元编程和交互式编程工具及过程的接口。此外,虚拟机被设计为能够拆分程序,包括其程序状态,以便与其他程序合并。此功能可用于需要将正在运行的程序的一部分存储在远程服务器上的分布式应用程序中,以供其他用户以后用来创建不同的执行分支。

Programming language independent virtual machine for metaprogramming, interactive programming and blockchain interoperability

【技术实现步骤摘要】
面向元编程、交互式编程和区块链互操作的与编程语言无关的虚拟机
本专利技术涉及虚拟机
,具体地涉及一种面向元编程、交互式编程和区块链互操作的与编程语言无关的虚拟机。
技术介绍
虚拟机(VirtualMachine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。过程虚拟机执行由用户编写的源代码表示的软件应用程序[1]。此后,术语“过程虚拟机”和“虚拟机”将互换使用。常见的虚拟机有Java虚拟机,Linux虚拟机,windows虚拟机等等。不同的虚拟机可以使用完全相同的源代码并最终以不同的方式运行程序,这取决于虚拟机是如何实现的以及虚拟机的设计者决定遵循什么标准。例如,编程语言Picolisp至少有两种实现方式,其中一种在用汇编语言编写的虚拟机上运行,该汇编语言适用于运行Linux发行版的64位计算机,而另一种在Java虚拟机上运行[2]。尽管无论使用什么虚拟机,大多数程序都会产生相同的结果,但是还是会出现一些差异,例如垃圾收集器的行为。现有的虚拟机的功能性较差,本专利技术因此而来。
技术实现思路
为了解决上述存在的技术问题,本专利技术提供了一种面向元编程、交互式编程和区块链互操作的与编程语言无关的虚拟机,本专利技术的虚拟机在设计时考虑了多功能性,它允许以不同编程语言编写的程序以解释或编译的方式在虚拟机上运行,并为程序员提供了与不同的元编程和交互式编程工具及过程的接口。此外,虚拟机被设计为能够拆分程序,包括其程序状态,以便与其他程序合并。此功能可用于需要将正在运行的程序的一部分存储在远程服务器上的分布式应用程序中,以供其他用户以后用来创建不同的执行分支。本专利技术的技术方案是:一种虚拟机,所述虚拟机将源代码解析为表示虚拟机程序不同部分的结构存储字段集,所述结构存储字段集的字段表示程序组件的特征,所述结构存储字段集包括以下的一种或多种:程序根结构、调用堆栈中的函数调用、程序包、数据结构、函数、表达式和参数。优选的技术方案中,所述程序根结构存储关于程序的元数据;所述调用堆栈中的函数调用,分配在虚拟机的调用堆栈上,表示虚拟机正在执行的程序中的函数调用;所述程序包,用于封装或分组虚拟机使用的其他结构,虚拟机的程序中存储一用作其唯一标识符的名称;所述数据结构,被程序使用,至少包括由参数集限定的数据结构,以及在程序包中用作其唯一标识符的名称,数据结构存储对封装它的程序包的引用;所述函数,在虚拟机中运行的程序中的子程序,具有代码,用于识别该函数是否是虚拟机标准函数库的一部分,函数结构包括:在包含该函数结构的程序包中充当唯一标识符的名称,用作函数输入的参数集,用作函数输出的参数集,表达式集或语句集;所述表达式,包含调用函数要使用的输入集和输出集、指向要使用输入和输出执行的函数的指针、唯一标识函数定义内的表达式的标签、指向函数和程序包的指针;所述参数表示指向由字节集构造的值的指针,与类型相关联,参数包括以下字段:存储参数名称的字段、存储一指针的字段、存储一布尔值的字段、存储一布尔标志的字段、存储定义参数的文件名和文件行的字段、存储一偏移量的字段、存储必须由虚拟机执行的操作集的字段、存储指向的值的大小的字段、存储一组值的字段、及表示不同的数据结构的字段。该虚拟机提供了要完全或部分序列化和反序列化的应用程序,从而允许用户提取程序的某些部分以在其他程序中使用。例如,可以提取一程序的程序状态并将其合并到另一程序中。虚拟机的序列化能力提供了一种灵活的元编程机制,该机制允许程序使用一种称为“可供性”的编程范式来修改自身的任何方面。例如,如果应用程序的程序状态满足某些条件,则程序代码会更改。此外,虚拟机的设计允许程序员以深层次的粒度与软件开发进行交互,其中程序员可以暂停正在运行的程序,撤销对正在运行的程序的程序状态所做的更改,更改代码,以及控制虚拟机应执行或返回多少指令。上述行为类似于解释型编程语言的行为,但是虚拟机可以解释或编译其程序;在前一种情况下,用户可以通过在读取-评估-打印循环(REPL)中指示程序来执行指令,或者在后一种情况下,用户可以执行一系列优化,这些优化在执行程序之前将整个程序考虑在内。最后,必须为虚拟机创建程序时所使用的方式应足够灵活,以使其与编程语言无关,这意味着可以使用不同的编程语言来创建虚拟机所需的表示程序的结构,这些生成的结构可以由在虚拟机上运行的任何编程语言使用,类似于Clojure和Scala可以在同一Java运行时环境(JavaRuntimeEnvironment)中运行的方式[3,4]。与现有技术相比,本专利技术的优点是:本专利技术的虚拟机在设计时考虑了多功能性,它允许以不同编程语言编写的程序以解释或编译的方式在虚拟机上运行,并为程序员提供了与不同的元编程和交互式编程工具及过程的接口。此外,虚拟机被设计为能够拆分程序,包括其程序状态,以便与其他程序合并。此功能可用于需要将正在运行的程序的一部分存储在远程服务器上的分布式应用程序中,以供其他用户以后用来创建不同的执行分支。附图说明下面结合附图及实施例对本专利技术作进一步描述:图1为本专利技术可供性过程示意图;图2为可以在两个程序结构之间出现的程序结构的函数;图3为可以在两个程序结构之间出现的程序结构上的函数;图4为虚拟机要运行的程序的不同内存段的布局示意图;图5为合并了区块链代码和事务代码之后的程序布局示意图。具体实施方式为使本专利技术的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本专利技术进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本专利技术的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本专利技术的概念。实施例:下面结合附图,对本专利技术的较佳实施例作进一步说明。一种虚拟机,所述虚拟机将源代码解析为表示虚拟机程序不同部分的结构存储字段集,所述结构存储字段集的字段表示程序组件的特征,所述结构存储字段集包括以下的一种或多种:程序根结构、调用堆栈中的函数调用、程序包、数据结构、函数、表达式和参数。遵循任何编程语言语义和语法的源代码都可以解析为这些结构。为了使虚拟机接受来自任何编程语言(即与语言无关)的程序,必须将程序转换为结构集。这些结构存储字段集,这些字段表示程序组件的每个特征。一旦将程序转换为结构集,虚拟机可以使用这些结构以解释的方式运行程序,也可以将这些结构序列化为用作字节码的字节数组。虚拟机具有拆分和合并完整程序的能力,该能力允许创建分布式应用程序,其中程序的一部分存储在远程服务器上,用户可以查询该程序以将其稍后合并到其他程序中。为了理解虚拟机在分布式应用程序中的使用,必须对用于构造程序的结构进行彻底的说明,并提供一些功能,且通过使用将源代码转换为结构集的过程而启用这些功能。可以在本文档中提出的虚拟机上运行的有效程序必须至少由以下数据结构之一组成:程序,函数调用,程序包(程序模块本文档来自技高网...

【技术保护点】
1.一种虚拟机,其特征在于,所述虚拟机将源代码解析为表示虚拟机程序不同部分的结构存储字段集,所述结构存储字段集的字段表示程序组件的特征,所述结构存储字段集包括以下的一种或多种:程序根结构、调用堆栈中的函数调用、程序包、数据结构、函数、表达式和参数。/n

【技术特征摘要】
1.一种虚拟机,其特征在于,所述虚拟机将源代码解析为表示虚拟机程序不同部分的结构存储字段集,所述结构存储字段集的字段表示程序组件的特征,所述结构存储字段集包括以下的一种或多种:程序根结构、调用堆栈中的函数调用、程序包、数据结构、函数、表达式和参数。


2.根据权利要求1所述的虚拟机,其特征在于,所述程序根结构存储关于程序的元数据;所述调用堆栈中的函数调用,分配在虚拟机的调用堆栈上,表示虚拟机正在执行的程序中的函数调用;所述程序包,用于封装或分组虚拟机使用的其他结构,虚拟机的程序中存储一用作其唯一标识符的名称;所述数据结构,被程序使用,至少包括由参数集限定的数据结构,以及在程序包中用作其唯一标识符的名称,数据结构存储对封装它的程序包的引用;所述函数,在虚拟机中运行的程序中的子程序,具有代码,用于识别该函数是否是虚拟机标准函数库的一部分,函数结构包括:在包含该函数结构的程序包中充当唯一标识符的名称,用作函数输入的参数集,用作函数输出的参数集,表达式集或语句集;所述表达式,包含调用函数要使用的输入集和输出集、指向要使用输入和输出执行的函数的指针、唯一标识函数定义内的表达式的标签、指向函数和程序包的指针;所述参数表示指向由字节集构造的值的指针,与类型相关联,参数包括以下字段:存储参数名称的字段、存储一指针的字段、存储一布尔值的字段、存储一布尔标志的字段、存储定义参数的文件名和文件行的字段、存储一偏移量的字段、存储必须由虚拟机执行的操作集的字段、存储指向的值的大小的字段、存储一组值的字段、及表示不同的数据结构的字段。


3.一种虚拟机的交互式编程方法,其特征在于,运行权利要求1或2所述的虚拟机将源代码解析为表示虚拟机程序不同部分的结构存储字段集;构建用于虚拟机的构建程序所使用的与编程语言无关的读取-评估-打印循环(REPL)中的元命令;使用构建的读取-评估-打印循环(REPL)中的元命令修改程序结构,所述元命令包括:
选择,告知虚拟机选择要修改的程序结构;
删除,告知虚拟机从程序结构或整个程序结构中删除某些元素;
添加,通过编写定义和语句执行,结合选择元命令决定其添加的位置;
调试,告知虚拟机提供有关程序的元信息;
分步,告知虚拟机应运行多少程序指令或步骤。


4.一种虚拟机的元编程方法,其特征在于,运行权利要求1或2所述的虚拟机将源代码解析为表示虚拟机程序不同...

【专利技术属性】
技术研发人员:李圣艳布兰登阿莫里卢迪耿直李刚李骁
申请(专利权)人:上海蓝载信息科技有限公司
类型:发明
国别省市:上海;31

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

1