CN118092887B - 一种Wasm指令集生成方法、装置、终端及存储介质 - Google Patents
一种Wasm指令集生成方法、装置、终端及存储介质 Download PDFInfo
- Publication number
- CN118092887B CN118092887B CN202410510525.3A CN202410510525A CN118092887B CN 118092887 B CN118092887 B CN 118092887B CN 202410510525 A CN202410510525 A CN 202410510525A CN 118092887 B CN118092887 B CN 118092887B
- Authority
- CN
- China
- Prior art keywords
- loop
- wasm
- generalized
- generalized variable
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000014509 gene expression Effects 0.000 claims abstract description 143
- 230000001939 inductive effect Effects 0.000 claims description 32
- 238000004364 calculation method Methods 0.000 claims description 30
- 125000004122 cyclic group Chemical group 0.000 claims description 28
- 230000008569 process Effects 0.000 claims description 14
- 238000006243 chemical reaction Methods 0.000 claims description 9
- 238000012545 processing Methods 0.000 claims description 5
- 230000009191 jumping Effects 0.000 claims description 4
- 230000006870 function Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006698 induction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Abstract
本发明提供一种Wasm指令集生成方法、装置、终端及存储介质,所述方法包括:获取具有预设的循环结构的目标循环代码;利用具有预设语法规则的目标编译器编译目标循环代码,将目标循环代码直接转换为带有multi‑value提案的Wasm指令集;循环结构为声明式循环结构,包括归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式。本发明通过定义一种声明式循环结构,利用目标编译器对具有预设的循环结构的目标循环代码进行编译,可直接生成目标循环代码对应的带有multi‑value提案的Wasm指令集。
Description
技术领域
本发明涉及计算机工程领域,尤其涉及的是一种Wasm指令集生成方法、装置、终端及存储介质。
背景技术
WebAssembly是W3C的开放标准,用于在Web浏览器中运行跨平台的虚拟指令集。随着WebAssembly的发展,出现了一系列提案,如multi-value提案,它改进了指令集的控制流部分,允许代码块声明输入,从而提高了运算效率。
在现有技术中,通常会将高级编程语言代码输入到支持multi-value提案的WebAssembly编译器中,以生成WebAssembly(Wasm)指令集。这种做法使得循环中的变量保留在堆栈上,从而减少生成代码所需的本地变量数量和指令数量,提高运算效率。然而,在将C语言中的循环结构转换为Wasm指令集时,面临一个挑战:C语言中的循环通常依赖于中间变量来临时存储计算结果,以便在循环的下一次迭代中使用,而WebAssembly的multi-value提案并没有直接提供对中间变量的支持,这导致了编译器需要进行复杂的分析和转换过程来将C语言的循环结构转换为Wasm指令集,即无法直接利用multi-value提案将C语言的循环结构直接转换为对应的Wasm指令集。
因此,现有技术存在缺陷,有待改进与发展。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种Wasm指令集生成方法、装置、终端及存储介质,旨在解决现有技术中无法直接利用multi-value提案将C语言的循环结构直接转换为对应的Wasm指令集的问题。
本发明解决技术问题所采用的技术方案如下:
第一方面,本发明实施例提供一种Wasm指令集生成方法,所述方法包括:
获取具有预设的循环结构的目标循环代码;
利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的Wasm指令集;
其中,所述循环结构为声明式循环结构,包括归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式,所述归纳变量定义结构用于初始化多个归纳变量,所述循环结束判断表达式用于确定在每次循环迭代中继续执行归纳变量迭代结构或执行循环终结分支表达式,所述归纳变量迭代结构用于在每次循环迭代中更新所述归纳变量的计算值,所述循环体结构为每次循环迭代执行的代码,所述循环终结分支表达式为结束循环时执行的代码。
可选的,所述利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的Wasm指令集,包括:
利用所述目标编译器中预设的语法规则,将所述目标循环代码中的所述循环结构识别为一个完整代码块,并对所述完整代码块中的所述归纳变量定义结构、所述循环结束判断表达式、所述归纳变量迭代结构、所述循环体结构和所述循环终结分支表达式进行语法判断,得到语法判断结果;
若所述语法判断结果为正确,则对所述目标循环代码进行代码转换,生成所述目标循环代码对应的带有multi-value提案的Wasm指令集;
若所述语法判断结果为未通过,则生成代码语法错误的提示信息。
可选的,所述归纳变量定义结构中包括多个归纳变量,以及每个所述归纳变量对应的归纳变量初始值;所述对所述目标循环代码进行代码转换,生成所述目标循环代码对应的带有multi-value提案的Wasm指令集,包括:
基于所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式,生成第一组Wasm指令,所述第一组Wasm指令用于定义一个循环块的开始;
基于所述归纳变量定义结构,生成第二组Wasm指令,所述第二组Wasm指令用于将全部所述归纳变量初始值压入堆栈;
基于所述循环结束判断表达式、所述循环体结构和所述循环终结分支表达式生成第三组Wasm指令,所述第三组Wasm指令用于描述所述循环结构中循环条件判断逻辑、循环体执行逻辑和循环结束时处理逻辑;
基于所述归纳变量迭代结构,生成第四组Wasm指令,所述第四组Wasm指令用于在每次循环迭代中,将所述归纳变量的计算值更新至堆栈中;
当生成所述第四组Wasm指令后,在所述第四组Wasm指令之后添加预设的第一预设Wasm指令,以完成所述目标循环代码对应的Wasm指令集的生成,其中,所述第一预设Wasm指令用于跳转至循环块开头语句。
可选的,所述归纳变量定义结构包括第一归纳变量、与所述第一归纳变量对应的第一归纳变量初始值、若干第二归纳变量和每个与所述第二归纳变量对应的第二归纳变量初始值,所述第一归纳变量用于控制循环迭代次数,所述第二归纳变量用于保存每次循环迭代的计算值,所述基于所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式,生成第一组Wasm指令,包括:
对所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式进行语义分析,得到所述第一归纳变量的数量和数据类型、所述第二归纳变量的数量和数据类型、以及循环结束时计算结果的数据类型;
基于所述第一归纳变量的数量和数据类型、所述第二归纳变量的数量和数据类型以及所述计算结果的数据类型,生成第一组Wasm指令;
其中,所述第一组Wasm指令包括所述第一归纳变量对应的参数、所述第二归纳变量对应的参数,以及本地变量对应的参数,所述第一归纳变量对应的参数用于将所述第一归纳变量在循环过程中的计算值存储于堆栈中,所述第二归纳变量对应的参数用于将所述第二归纳变量在循环过程中的计算值存储于堆栈中,所述本地变量对应的参数用于将循环结束时的计算结果存储于堆栈中。
可选的,所述基于所述归纳变量定义结构,生成第二组Wasm指令,包括:
基于所述归纳变量定义结构中所述第一归纳变量的数据类型和所述第一归纳变量初始值,以及每个所述第二归纳变量的数据类型和对应的所述第二归纳变量初始值,生成第二组Wasm指令。
可选的,所述循环结束判断表达式包括第一归纳变量、预设常量、关系符号;所述基于所述循环结束判断表达式、所述循环体结构和所述循环终结分支表达式生成第三组Wasm指令,包括:
基于所述循环结束判断表达式中的第一归纳变量、预设常量、关系符号,以及所述循环体结构中的全部语句和所述循环终结分支表达式中的全部语句,生成第三组Wasm指令。
可选的,所述归纳变量迭代结构依次包括:第一归纳变量迭代表达式和第二归纳变量迭代表达式,所述第一归纳变量迭代表达式包含多个元素,所述第一归纳变量迭代表达式用于在每次循环迭代中更新所述第一归纳变量的计算值,所述第二归纳变量迭代表达式包含多个元素,所述第二归纳变量迭代表达式用于在每次循环迭代中更新所述第二归纳变量的计算值;所述基于所述归纳变量迭代结构,生成第四组Wasm指令,包括:
当所述循环结构为for语句时,对所述归纳变量迭代结构中的所述第一归纳变量迭代表达式和所述第二归纳变量迭代表达式的顺序进行调整,得到调整后的归纳变量迭代结构;
基于调整后的归纳变量迭代结构生成所述第四组Wasm指令。
可选的,所述基于所述归纳变量迭代结构,生成第四组Wasm指令还包括:
当所述循环结构为loop语句时,分别提取所述第一归纳变量迭代表达式中的全部元素,以及所述第二归纳变量迭代表达式中的全部元素;
依次对所述第二归纳变量迭代表达式中的全部元素和所述第一归纳变量迭代表达式中的全部元素进行转换,以形成所述归纳变量迭代结构对应的第四组Wasm指令。
可选的,所述利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的Wasm指令集之后,还包括:
利用所述目标编译器编译第二目标代码,所述第二目标代码为调用所述循环结构的计算结果的代码;
其中,所述计算结果存储于堆栈中,由执行所述循环体结构中的跳出语句后或执行所述循环终结分支表达式后生成。
可选的,所述计算结果在堆栈中的存储方式为绑定预设标识符存储于堆栈中的本地变量或直接存储于堆栈中。
第二方面,本发明实施例还提供一种Wasm指令集生成装置,包括:
代码获取模块,用于获取具有预设的循环结构的目标循环代码;
指令集生成模块,用于利用目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的Wasm指令集;
其中,所述循环结构为声明式循环结构,包括归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式,所述归纳变量定义结构用于初始化多个归纳变量,所述循环结束判断表达式用于确定在每次循环迭代中执行归纳变量迭代结构或执行循环终结分支表达式,所述归纳变量迭代结构用于在每次循环迭代中更新所述归纳变量的计算值,所述循环体结构为每次循环迭代执行的代码,所述循环终结分支表达式为结束循环时执行的代码。
第三方面,本发明实施例还提供一种终端,所述终端包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的Wasm指令集生成程序,所述Wasm指令集生成程序被所述处理器执行时实现如上所述的Wasm指令集生成方法的步骤。
第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有Wasm指令集生成程序,所述Wasm指令集生成程序能够被执行以用于实现如上所述的Wasm指令集生成方法的步骤。
本发明的有益效果:本发明实施例通过获取具有预设的循环结构的目标循环代码;利用具有预设语法规则的目标编译器编译目标循环代码,将目标循环代码直接转换为带有multi-value提案的Wasm指令集;循环结构为声明式循环结构,包括归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式。本发明通过定义一种声明式循环结构,利用目标编译器对具有预设的循环结构的目标循环代码进行编译,可直接生成目标循环代码对应的带有multi-value提案的Wasm指令集。
附图说明
图1是本发明中Wasm指令集生成方法较佳实施例的流程图。
图2是本发明中Wasm指令集生成装置较佳实施例的功能原理框图。
图3是本发明的终端原理框图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
现有技术中,将C语言、Java语言、ECMAScript等高级编程语言代码中的循环结构利用multi-value提案编译为Wasm指令集较为困难。举例说明,在C语言中,普通的for循环的声明方式如下:for (初始表达式;循环条件;更新表达式) {循环体语句}。其中,初始表达式用于定义与初始化归纳变量;循环条件是一个逻辑表达式,如果为真则继续执行循环体,否则跳出循环;更新表达式用于更新归纳变量的值,但在该循环结束时,归纳变量的值无法被其他代码直接使用。而multi-value提案在涉及循环时所允许的“输入”对应的正是归纳变量。
以求斐波那契数列项数为例,在C语言中,代码片段如下:
int b = 1;
int tmp = 0;
for (int a = 0, i = 0; i<n; i++, tmp = a + b, a = b, b = tmp) {
}。
在C语言中,需要首先定义可变变量b并赋予初始值,之后再返回b,而无法将b直接定义为归纳变量(否则循环结束后无法被使用)。而由于C语言的更新表达式语句为命令式编程,执行语句而非表达式,需按照语句顺序执行,运行完成后并非数据,无法将循环作用域内部的值作为结果进行传递。因此须在循环结构前为将a和b的创建额外的中间变量来确定a和b的更新值。这种情况下,编译器无法直接将C语言的循环结构利用multi-value提案直接转换成Wasm指令集,需对代码进行转化,将b识别为归纳变量并进一步优化,以获得效率较高的代码结果,整个过程较为复杂。
针对现有技术的上述缺陷,本发明提供一种Wasm指令集生成方法、装置、终端及存储介质,所述方法包括:获取具有预设的循环结构的目标循环代码;利用具有预设语法规则的目标编译器编译目标循环代码,将目标循环代码直接转换为带有multi-value提案的Wasm指令集;循环结构为声明式循环结构,包括归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式。本发明通过定义一种声明式循环结构,利用目标编译器对具有预设的循环结构的目标循环代码进行编译,可直接生成目标循环代码对应的带有multi-value提案的Wasm指令集。
请参见图1,本发明实施例所述的Wasm指令集生成方法包括如下步骤:
步骤S100、获取具有预设的循环结构的目标循环代码。
具体地,在大多数编程语言中(例如C语言),一个常用的由for关键词定义的循环结构包括:归纳变量的定义与赋值语句、判定循环结束条件的表达式(通常利用归纳变量)、对变量进行迭代的赋值语句(通常更改归纳变量)、以及循环体(通常为核心的需要反复执行的任务)这四个部分。这样的循环结构通常被用来定义对一系列操作进行多次执行。执行的顺序为:首先执行归纳变量的定义与变量赋值语句;之后,执行判定循环结束条件的表达式;若判定循环结束条件为假,则结束循环;若判定循环结束条件为真,则对循环体进行执行,然后执行对变量进行迭代的赋值语句。之后,再次执行判定循环结束条件的表达式,并继续循环。在循环体中,用户可以使用特殊语句对控制流进行变更,其中跳出语句break可以直接退出当前的循环,而跳过语句continue将停止对当前循环体其余部分的执行,直接跳转到迭代的语句的部分。因此,在大多数编程语言中(例如C语言),循环体内部对涉及控制流的变量可进行任意修改(例如,跳出语句break可以直接退出当前的循环,而跳过语句continue将停止对当前循环体其余部分的执行,直接跳转到迭代的语句的部分),而循环体通常结构复杂,用户无法对控制循环的变量的迭代正确性进行简单的判断。
本发明的循环结构基于C语言循环结构重新定义所得,所述循环结构包括归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式,所述归纳变量定义结构用于初始化多个归纳变量,所述循环结束判断表达式用于确定在每次循环迭代中继续执行归纳变量迭代结构或执行循环终结分支表达式,所述归纳变量迭代结构用于在每次循环迭代中更新所述归纳变量的计算值,所述循环体结构为每次循环迭代执行的代码,所述循环终结分支表达式为结束循环时执行的代码。
本发明采用声明式编程方式定义新的循环结构,允许利用归纳变量定义循环结构对应的值,使得新的循环表达式作为一个完整的代码块被编译器识别并执行,这样在该循环结束时,基于归纳变量计算的整个循环结构的结果可被其他代码直接使用。归纳变量定义结构的作用域为循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式。在归纳变量迭代结构中,允许用户对归纳变量进行重新定义为新的值,重新绑定的结果在该部分执行完成后生效。
请参见图1,本发明实施例所述的Wasm指令集生成方法还包括如下步骤:
步骤S200、利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的Wasm指令集。
具体地,所述目标编译器为支持WebAssembly multi-value提案的编译器。本发明基于C语言循环结构重新定义循环结构,循环结构为声明式循环结构,并使用具有预设语法规则的目标编译器编译循环结构,可直接生成带有multi-value提案的Wasm指令集,无需再将C语言的中间变量识别为归纳变量。
在一种实现方式中,所述利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的Wasm指令集,包括:
利用所述目标编译器中预设的语法规则,将所述目标循环代码中的所述循环结构识别为一个完整代码块,并对所述完整代码块中的所述归纳变量定义结构、所述循环结束判断表达式、所述归纳变量迭代结构、所述循环体结构和所述循环终结分支表达式进行语法判断,得到语法判断结果;
若所述语法判断结果为正确,则对所述目标循环代码进行代码转换,生成所述目标循环代码对应的带有multi-value提案的Wasm指令集;
若所述语法判断结果为未通过,则生成代码语法错误的提示信息。
具体地,本发明中的目标编译器预设了语法规则,可将基于C语言循环结构重新定义的循环结构识别为一个完整代码块,识别完成后可对完整代码块中的归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式进行语法判断,得到语法判断结果。可以理解的,只有语法判断结果为正确时,才对目标循环代码进行代码转换以生成Wasm指令集。
在一种实现方式中,所述归纳变量定义结构中包括多个归纳变量,以及每个所述归纳变量对应的归纳变量初始值;所述对所述目标循环代码进行代码转换,生成所述目标循环代码对应的带有multi-value提案的Wasm指令集,包括:
基于所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式,生成第一组Wasm指令,所述第一组Wasm指令用于定义一个循环块的开始;
基于所述归纳变量定义结构,生成第二组Wasm指令,所述第二组Wasm指令用于将全部所述归纳变量初始值压入堆栈;
基于所述循环结束判断表达式、所述循环体结构和所述循环终结分支表达式生成第三组Wasm指令,所述第三组Wasm指令用于描述所述循环结构中循环条件判断逻辑、循环体执行逻辑和循环结束时处理逻辑;
基于所述归纳变量迭代结构,生成第四组Wasm指令,所述第四组Wasm指令用于在每次循环迭代中,将所述归纳变量的计算值更新至堆栈中;
当生成所述第四组Wasm指令后,在所述第四组Wasm指令之后添加预设的第一预设Wasm指令,以完成所述目标循环代码对应的Wasm指令集的生成,其中,所述第一预设Wasm指令用于跳转至循环块开头语句。
具体地,本发明在生成Wasm指令集时,根据循环结构的不同组成部分生成对应的Wasm指令,并在完成不同组成部分对应的Wasm指令生成后,添加预设的跳转至循环块开头语句的Wasm指令,通过这种方式可直接生成目标循环代码对应的带有multi-value提案的Wasm指令集。在WebAssembly的最小可行版本中,WebAssembly的代码块不支持声明输入,仅支持声明输出,因此对于循环这一用到代码块的部分,需要在循环体结束时将参与循环的变量存在本地变量中,并在循环开始时再次取出。此种方式生成代码的体积较大。而本发明在生成Wasm指令集时,利用了multi-value提案,使得参与循环的变量可以留在堆栈上,由此减少生成代码所使用的本地变量的数量以及代码的指令数量,提高运算效率。根据Binaryen项目组的测算,采用multi-value提案生成的代码体积可以减小1%-3%。
在一种实现方式中,所述归纳变量定义结构包括第一归纳变量、与所述第一归纳变量对应的第一归纳变量初始值、若干第二归纳变量和每个与所述第二归纳变量对应的第二归纳变量初始值,所述第一归纳变量用于控制循环迭代次数,所述第二归纳变量用于保存每次循环迭代的计算值,所述基于所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式,生成第一组Wasm指令,包括:
对所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式进行语义分析,得到所述第一归纳变量的数量和数据类型、所述第二归纳变量的数量和数据类型、以及循环结束时计算结果的数据类型;
基于所述第一归纳变量的数量和数据类型、所述第二归纳变量的数量和数据类型以及所述计算结果的数据类型,生成第一组Wasm指令;
其中,所述第一组Wasm指令包括所述第一归纳变量对应的参数、所述第二归纳变量对应的参数,以及本地变量对应的参数,所述第一归纳变量对应的参数用于将所述第一归纳变量在循环过程中的计算值存储于堆栈中,所述第二归纳变量对应的参数用于将所述第二归纳变量在循环过程中的计算值存储于堆栈中,所述本地变量对应的参数用于将循环结束时的计算结果存储于堆栈中。
具体地,循环结构有多种类型,如for语句、loop语句等。本发明中for循环结构示例如下:
let result = for a = 0, b = 1, i = 0;
i<n;
i = i + 1, a = b, b = a + b {
} else {
b}。
本发明中for循环结构中,归纳循环结构为a=0,b=1,i=0,循环结束判断表达式为i<n,n为预设常量,归纳变量迭代结构为i=i+1,a=b,b=a+b,循环体结构为{}部分,循环终结分支表达式为else {b}。第一归纳变量为i,用于控制循环迭代次数。第二归纳变量有两个,分别为a和b。本发明中,基于第一归纳变量的数量和数据类型、所述第二归纳变量的数量和数据类型、以及循环结束时计算结果的数据类型,生成定义循环块开始的第一组Wasm指令。
在本发明for循环结构示例中,生成第一组Wasm指令可表示为loop $loop (parami32) (param i32) (param i32) (result i32)。其中,(param i32)代表进入目标循环代码前堆栈上应当有一个32位整数,在当前场景下可以理解为归纳变量,参与循环迭代的归纳变量对应的值需放在堆栈上,计算结果也会留在堆栈上,直到存放到本地变量对应的(result i32)中。(result i32)代表该代码块(本实施例中为循环结构)运算完成后在栈上留下的结果为一个32位整数。在不使用multi-value提案的情况下,进入循环结构时,堆栈视为空(堆栈上原有数据均不得参与循环结构的运算),重新循环迭代时,堆栈上的值亦会被清空。因此,在不使用multi-value提案的情况下,归纳变量更新后的值必须对应存储到本地变量中,这会产生额外的存储指令开销,并占用一定数量的本地变量的分配空间,而在循环开始时再次进行取出操作;若有多个归纳变量,则在转换为Wasm指令时需额外定义大量的本地变量,且会增加大量的代码指令。而使用multi-value提案后,堆栈上可以根据声明对应存放归纳变量输入值。故本发明在进入循环前,将归纳变量的对应值留在堆栈上,在循环结束时,仅需按序计算出归纳变量更新的值,指令仅需对栈顶的元素进行操作,可有效减少使用本地变量的数量和代码的指令数量,提高Wasm指令集的运算效率。
在一种实现方式中,所述基于所述归纳变量定义结构,生成第二组Wasm指令,包括:
基于所述归纳变量定义结构中所述第一归纳变量的数据类型和所述第一归纳变量初始值,以及每个所述第二归纳变量的数据类型和对应的所述第二归纳变量初始值,生成第二组Wasm指令。
具体地,当完成循环块的定义后,需要生成将归纳变量初始值压入堆栈的第二组Wasm指令。在本发明的for循环结构示例中,有3个归纳变量,则生成的第二组Wasm指令可表示为(i32.const 0) (i32.const 1) (i32.const 0)。第一个(i32.const 0)表示将第二归纳变量a的初始值0压入堆栈,(i32.const 1)表示将第二归纳变量b的初始值1压入堆栈,第二个(i32.const 0)表示将第一归纳变量i的初始值0压入堆栈。通过本步骤,Wasm指令集在执行循环之前确保了所有归纳变量都被正确初始化,为接下来的循环逻辑提供基础。
在一种实现方式中,所述循环结束判断表达式包括第一归纳变量、预设常量、关系符号;所述基于所述循环结束判断表达式、所述循环体结构和所述循环终结分支表达式生成第三组Wasm指令,包括:
基于所述循环结束判断表达式中的第一归纳变量、预设常量、关系符号,以及所述循环体结构中的全部语句和所述循环终结分支表达式中的全部语句,生成第三组Wasm指令。
具体地,在本发明的for循环结构示例中,循环结束判断表达式表示为i<n,即在本循环结构示例中,当i<n的时候,执行循环结构中的归纳变量迭代结构、循环体结构;当i≧n时,执行循环结构中的循环终结分支表达式。其中,n为预设常量。根据循环结束判断表达式,循环体结构中的全部语句和循环终结分支表达式中的全部语句,生成第三组Wasm指令,通过在编译过程中利用已存在的归纳变量初始值,编译器可以减少对堆栈的访问和重复计算,从而提高编译效率和生成的代码效率。
在一种实现方式中,所述归纳变量迭代结构依次包括:第一归纳变量迭代表达式和第二归纳变量迭代表达式,所述第一归纳变量迭代表达式包含多个元素,所述第一归纳变量迭代表达式用于在每次循环迭代中更新所述第一归纳变量的计算值,所述第二归纳变量迭代表达式包含多个元素,所述第二归纳变量迭代表达式用于在每次循环迭代中更新所述第二归纳变量的计算值;所述基于所述归纳变量迭代结构,生成第四组Wasm指令,包括:
当所述循环结构为for语句时,对所述归纳变量迭代结构中的所述第一归纳变量迭代表达式和所述第二归纳变量迭代表达式的顺序进行调整,得到调整后的归纳变量迭代结构;
基于调整后的归纳变量迭代结构生成所述第四组Wasm指令。
具体地,本发明中的for循环结构示例中,包括一个第一归纳变量表达式和两个第二归纳变量表达式。其中,第一归纳变量迭代表达式为i=i+1,两个第二归纳变量迭代表达式依次为a=b和b=a+b。由于本发明中的归纳变量迭代结构中每个归纳变量在每次迭代后的计算值均在本归纳变量迭代结构执行完成后生效,即当b=a+b执行时,使用的a的值是本次迭代开始时的计算值,而并非是a=b执行后的计算值。举例说明,如在执行第一次迭代a=b,b=a+b时,a重新定义为b的值1,而b=a+b中右边的a仍为重新定义前的值0,并不受前面a=b的影响。而在C语言的循环结构中,由于是顺序执行,即当执行a=b,b=a+b时,b=a+b中右边a的值使用的是a=b时被重新定义的值。本发明通过这种方式,实现了与C语言循环结构不同的计算值更新方式,解除了归纳变量相互的依赖关系与更新时的执行顺序的限制,归纳变量的重新绑定顺序不对执行结果造成影响,即a=b,b=a+b与b=a+b,a=b等价。
为使得生成的Wasm指令集同样支持解除归纳变量相互的依赖关系与更新时的执行顺序的限制,当所述循环结构为for语句时,对所述归纳变量迭代结构中的所述第一归纳变量迭代表达式和所述第二归纳变量迭代表达式的顺序进行调整,得到调整后的归纳变量迭代结构,基于调整后的归纳变量迭代结构生成对应的第四组Wasm指令。举例说明,在本发明中的for循环结构示例中,将i=i+1,a=b,b=a+b更换顺序为a=b,b=a+b,i=i+1,然后,基于更新后的归纳变量表达式进行第四组Wasm指令的生成。在本发明中的for循环结构示例中,第四组Wasm指令表示为:
(local.get $b)
(local.get $a) (local.get $b) (i32.add)
(local.get $i) (i32.const 1) (i32.add)。
通过此种方式生成的第四组Wasm指令,每次循环结构迭代的计算值会存储在堆栈中,根据堆栈结构的特性,归纳变量最新的值将会留在栈顶,取值的时候从栈顶取值,减少了本地变量的数量,提高了Wasm指令集的运算效率。
在一种实现方式中,所述基于所述归纳变量迭代结构,生成第四组Wasm指令还包括:
当所述循环结构为loop语句时,分别提取所述第一归纳变量迭代表达式中的全部元素,以及所述第二归纳变量迭代表达式中的全部元素;
依次对所述第二归纳变量迭代表达式中的全部元素和所述第一归纳变量迭代表达式中的全部元素进行转换,以形成所述归纳变量迭代结构对应的第四组Wasm指令。
具体地,本发明中loop循环结构示例如下:
let result = loop 0, 1, n { (1)
_, b, 0 =>{ break b } (2)
a, b, i =>{ continue b, a + b, i - 1 } (3)
}。
在loop循环结构示例中,第(1)行的0,1,n与第(3)行的a,b,i共同组成了归纳变量定义结构,即相当于a=0,b=1,i=n。第(1)行的0,1,n与第(2)行的_,b,0、以及第(3)行的a,b,i共同组成了循环结束判断表达式,即当i=0时,执行{break b},其中,{break b}为循环终结分支表达式;当i≠0时,执行{continue b,a+b,i-1},其中,b,a+b,i-1为归纳变量迭代结构,n为预设常量,循环体结构未展示。在loop循环中,有两个第二归纳变量迭代表达式,分别为a=b和b=a+b,第一归纳变量迭代表达式为i=i-1。
本发明中,对loop循环结构生成第一组Wasm指令、第二组Wasm指令、第三组Wasm指令的方式与for循环结构完全相同,在此不再赘述。而在生成第四组Wasm指令时,loop循环结构中归纳变量的迭代依赖于continue语句,由于continue b,a+b,i-1提供了更新后的归纳变量的值,根据顺序与a,b,i这三个归纳变量一一对应,故无需再对顺序进行调整,直接依次对第二归纳变量迭代表达式全部元素,以及对第一归纳变量迭代表达式中的全部元素进行转换即可。
相比于本发明的for循环结构示例,本发明的loop循环结构示例更为简洁和直接。本发明中loop循环结构示例的第四Wasm指令可表示为:
(local.get $b)
(local.get $a) (local.get $b) (i32.add)
(local.get $i) (i32.const 1) (i32.sub)。
当完成第四组Wasm指令的生成后,在所述第四组Wasm指令之后添加预设的第一预设Wasm指令,第一预设Wasm指令表示为(br $loop),用于跳转至循环块开头。完成第一预设Wasm指令的添加后,即完成了目标循环代码对应的Wasm指令集的生成。
通过上述方式生成Wasm指令集后,在执行Wasm指令集时,参与循环的归纳变量可留在堆栈上,在循环过程中归纳变量的更新值直接从栈顶按序取出即可,当循环结束后,循环计算结果存储至堆栈中,可供其他代码块或函数调用。
在一种实现方式中,所述利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的Wasm指令集之后,还包括:
利用所述目标编译器根据循环结束时的计算结果编译第二目标代码;
其中,所述计算结果为执行所述循环体结构中的跳出语句后存储至堆栈中或执行所述循环终结分支表达式后存储至堆栈中,所述第二目标代码为调用所述计算结果的代码。
具体地,循环结构的计算结果包括两种情况:第一种情况,若循环终结分支表达式被执行,则循环终结分支表达式的计算结果作为整个循环结构的计算结果;第二种情况,若循环体结构中包括跳出语句,且跳出语句(如含break关键词)被执行,则跳出语句的跟随值作为该循环结构的计算结果。其中,跳出语句的跟随值在设定时,需与循环终结分支表达式的结果数量和数据类型相同。若循环体结构中包括跳过语句(如含continue关键词),且跳过语句被执行,则跳过当前循环体结构未执行的剩余部分及归纳变量迭代结构,直接对归纳变量迭代结构继续更新。其中,跳过语句中跟随值的数量和数据类型,归纳变量定义的数量和数据类型一一对应。
通过上述方式,重新定义的循环结构可更加轻松的定义归纳变量,可直接利用循环结构计算结果,目标编译器无需再分析中间变量来确定归纳变量,可直接采用multi-value提案对目标循环代码进行编译,生成对应的Wasm指令集。本发明将计算结果存储至堆栈中,便于其他代码(如函数或代码块)调用。
在一种实现方式中,所述计算结果在堆栈中的存储方式为绑定预设标识符存储至堆栈中的本地变量或直接存储至堆栈中。
具体地,将循环结构的完整代码块直接加入其他代码块或函数中以参与其他运算,这样,无需对循环结构中每个归纳变量的计算结果进行定义。当循环结束后,可以选择将循环体计算结果绑定标识符存为本地变量,也可以直接将循环体计算结果参与其他的运算,例如供其它所有可以使用该类型的值的代码块或函数调用。在这种情况下,目标编译器将根据“堆栈上已存在值”为假设进行剩余的编译工作。
综上所述,本发明通过获取具有预设的循环结构的目标循环代码;利用具有预设语法规则的目标编译器编译目标循环代码,将目标循环代码直接转换为带有multi-value提案的Wasm指令集;循环结构为声明式循环结构,包括归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式。本发明通过定义一种声明式循环结构,利用目标编译器对具有预设的循环结构的目标循环代码进行编译,可直接生成目标循环代码对应的带有multi-value提案的Wasm指令集。
在一种实施例中,如图2所示,基于上述Wasm指令集生成方法,本发明还相应提供了一种Wasm指令集生成装置,包括:
代码获取模块100,用于获取具有预设的循环结构的目标循环代码;
指令集生成模块200,用于利用目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的Wasm指令集;
其中,所述循环结构为声明式循环结构,包括归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式,所述归纳变量定义结构用于初始化多个归纳变量,所述循环结束判断表达式用于确定在每次循环迭代中执行归纳变量迭代结构或执行循环终结分支表达式,所述归纳变量迭代结构用于在每次循环迭代中更新所述归纳变量的计算值,所述循环体结构为每次循环迭代执行的代码,所述循环终结分支表达式为结束循环时执行的代码。
需要说明的是,前述对Wasm指令集生成方法实施例的解释说明也适用于本实施例的Wasm指令集生成装置,此处不再赘述。
基于上述实施例,本发明还提供了一种终端,其原理框图可以如图3所示。上述终端包括通过系统总线连接的处理器、存储器、网络接口以及显示屏。其中,该终端的处理器用于提供计算和控制能力。该终端的存储器包括非易失性存储介质、内部存储器。该非易失性存储介质存储有操作系统和Wasm指令集生成程序。该内部存储器为非易失性存储介质中的操作系统和Wasm指令集生成程序的运行提供环境。该终端的网络接口用于与外部的终端通过网络连接通信。该Wasm指令集生成程序被处理器执行时实现上述任意一种Wasm指令集生成方法的步骤。该终端的显示屏可以是液晶显示屏或者电子墨水显示屏。
本领域技术人员可以理解,图3中示出的原理框图,仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的终端的限定,具体的终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种终端,上述终端包括存储器、处理器以及存储在上述存储器上并可在上述处理器上运行的Wasm指令集生成程序,上述Wasm指令集生成程序被上述处理器执行时实现本发明实施例提供的任意一种Wasm指令集生成方法的步骤。
本发明实施例还提供一种计算机可读存储介质,上述计算机可读存储介质上存储有Wasm指令集生成程序,上述Wasm指令集生成程序被处理器执行时实现本发明实施例提供的任意一种Wasm指令集生成方法的步骤。
应理解,上述实施例中各步骤的序号大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将上述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各实例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟是以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅是示意性的,例如,上述模块或单元的划分,仅为一种逻辑功能划分,实际实现时可以由另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不是相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (11)
1.一种Wasm指令集生成方法,其特征在于,所述方法包括:
获取具有预设的循环结构的目标循环代码;
利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的Wasm指令集;
其中,所述循环结构为声明式循环结构,包括归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式,所述归纳变量定义结构用于初始化多个归纳变量,所述循环结束判断表达式用于确定在每次循环迭代中继续执行归纳变量迭代结构或执行循环终结分支表达式,所述归纳变量迭代结构用于在每次循环迭代中更新所述归纳变量的计算值,所述循环体结构为每次循环迭代执行的代码,所述循环终结分支表达式为结束循环时执行的代码;
所述利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的Wasm指令集,包括:
利用所述目标编译器中预设的语法规则,将所述目标循环代码中的所述循环结构识别为一个完整代码块,并对所述完整代码块中的所述归纳变量定义结构、所述循环结束判断表达式、所述归纳变量迭代结构、所述循环体结构和所述循环终结分支表达式进行语法判断,得到语法判断结果;
若所述语法判断结果为正确,则对所述目标循环代码进行代码转换,生成所述目标循环代码对应的带有multi-value提案的Wasm指令集;
若所述语法判断结果为未通过,则生成代码语法错误的提示信息;
所述归纳变量定义结构中包括多个归纳变量,以及每个所述归纳变量对应的归纳变量初始值;所述对所述目标循环代码进行代码转换,生成所述目标循环代码对应的带有multi-value提案的Wasm指令集,包括:
基于所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式,生成第一组Wasm指令,所述第一组Wasm指令用于定义一个循环块的开始;
基于所述归纳变量定义结构,生成第二组Wasm指令,所述第二组Wasm指令用于将全部所述归纳变量初始值压入堆栈;
基于所述循环结束判断表达式、所述循环体结构和所述循环终结分支表达式生成第三组Wasm指令,所述第三组Wasm指令用于描述所述循环结构中循环条件判断逻辑、循环体执行逻辑和循环结束时处理逻辑;
基于所述归纳变量迭代结构,生成第四组Wasm指令,所述第四组Wasm指令用于在每次循环迭代中,将所述归纳变量的计算值更新至堆栈中;
当生成所述第四组Wasm指令后,在所述第四组Wasm指令之后添加预设的第一预设Wasm指令,以完成所述目标循环代码对应的Wasm指令集的生成,其中,所述第一预设Wasm指令用于跳转至循环块开头语句。
2.根据权利要求1所述的Wasm指令集生成方法,其特征在于,所述归纳变量定义结构包括第一归纳变量、与所述第一归纳变量对应的第一归纳变量初始值、若干第二归纳变量和每个与所述第二归纳变量对应的第二归纳变量初始值,所述第一归纳变量用于控制循环迭代次数,所述第二归纳变量用于保存每次循环迭代的计算值,所述基于所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式,生成第一组Wasm指令,包括:
对所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式进行语义分析,得到所述第一归纳变量的数量和数据类型、所述第二归纳变量的数量和数据类型、以及循环结束时计算结果的数据类型;
基于所述第一归纳变量的数量和数据类型、所述第二归纳变量的数量和数据类型以及所述计算结果的数据类型,生成第一组Wasm指令;
其中,所述第一组Wasm指令包括所述第一归纳变量对应的参数、所述第二归纳变量对应的参数,以及本地变量对应的参数,所述第一归纳变量对应的参数用于将所述第一归纳变量在循环过程中的计算值存储于堆栈中,所述第二归纳变量对应的参数用于将所述第二归纳变量在循环过程中的计算值存储于堆栈中,所述本地变量对应的参数用于将循环结束时的计算结果存储于堆栈中。
3.根据权利要求2所述的Wasm指令集生成方法,其特征在于,所述基于所述归纳变量定义结构,生成第二组Wasm指令,包括:
基于所述归纳变量定义结构中所述第一归纳变量的数据类型和所述第一归纳变量初始值,以及每个所述第二归纳变量的数据类型和对应的所述第二归纳变量初始值,生成第二组Wasm指令。
4.根据权利要求1所述的Wasm指令集生成方法,其特征在于,所述循环结束判断表达式包括第一归纳变量、预设常量、关系符号;所述基于所述循环结束判断表达式、所述循环体结构和所述循环终结分支表达式生成第三组Wasm指令,包括:
基于所述循环结束判断表达式中的第一归纳变量、预设常量、关系符号,以及所述循环体结构中的全部语句和所述循环终结分支表达式中的全部语句,生成第三组Wasm指令。
5.根据权利要求1所述的Wasm指令集生成方法,其特征在于,所述归纳变量迭代结构依次包括:第一归纳变量迭代表达式和第二归纳变量迭代表达式,所述第一归纳变量迭代表达式包含多个元素,所述第一归纳变量迭代表达式用于在每次循环迭代中更新所述第一归纳变量的计算值,所述第二归纳变量迭代表达式包含多个元素,所述第二归纳变量迭代表达式用于在每次循环迭代中更新所述第二归纳变量的计算值;所述基于所述归纳变量迭代结构,生成第四组Wasm指令,包括:
当所述循环结构为for语句时,对所述归纳变量迭代结构中的所述第一归纳变量迭代表达式和所述第二归纳变量迭代表达式的顺序进行调整,得到调整后的归纳变量迭代结构;
基于调整后的归纳变量迭代结构生成所述第四组Wasm指令。
6.根据权利要求5所述的Wasm指令集生成方法,其特征在于,所述基于所述归纳变量迭代结构,生成第四组Wasm指令还包括:
当所述循环结构为loop语句时,分别提取所述第一归纳变量迭代表达式中的全部元素,以及所述第二归纳变量迭代表达式中的全部元素;
依次对所述第二归纳变量迭代表达式中的全部元素和所述第一归纳变量迭代表达式中的全部元素进行转换,以形成所述归纳变量迭代结构对应的第四组Wasm指令。
7.根据权利要求2所述的Wasm指令集生成方法,其特征在于,所述利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的Wasm指令集之后,还包括:
利用所述目标编译器编译第二目标代码,所述第二目标代码为调用所述循环结构的计算结果的代码;
其中,所述计算结果存储于堆栈中,由执行所述循环体结构中的跳出语句后或执行所述循环终结分支表达式后生成。
8.根据权利要求7所述的Wasm指令集生成方法,其特征在于,所述计算结果在堆栈中的存储方式为绑定预设标识符存储于堆栈中的本地变量或直接存储于堆栈中。
9.一种Wasm指令集生成装置,其特征在于,包括:
代码获取模块,用于获取具有预设的循环结构的目标循环代码;
指令集生成模块,用于利用目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的Wasm指令集;
其中,所述循环结构为声明式循环结构,包括归纳变量定义结构、循环结束判断表达式、归纳变量迭代结构、循环体结构和循环终结分支表达式,所述归纳变量定义结构用于初始化多个归纳变量,所述循环结束判断表达式用于确定在每次循环迭代中执行归纳变量迭代结构或执行循环终结分支表达式,所述归纳变量迭代结构用于在每次循环迭代中更新所述归纳变量的计算值,所述循环体结构为每次循环迭代执行的代码,所述循环终结分支表达式为结束循环时执行的代码;
所述利用具有预设语法规则的目标编译器编译所述目标循环代码,将所述目标循环代码直接转换为带有multi-value提案的Wasm指令集,包括:
利用所述目标编译器中预设的语法规则,将所述目标循环代码中的所述循环结构识别为一个完整代码块,并对所述完整代码块中的所述归纳变量定义结构、所述循环结束判断表达式、所述归纳变量迭代结构、所述循环体结构和所述循环终结分支表达式进行语法判断,得到语法判断结果;
若所述语法判断结果为正确,则对所述目标循环代码进行代码转换,生成所述目标循环代码对应的带有multi-value提案的Wasm指令集;
若所述语法判断结果为未通过,则生成代码语法错误的提示信息;
所述归纳变量定义结构中包括多个归纳变量,以及每个所述归纳变量对应的归纳变量初始值;所述对所述目标循环代码进行代码转换,生成所述目标循环代码对应的带有multi-value提案的Wasm指令集,包括:
基于所述归纳变量定义结构、所述循环体结构和所述循环终结分支表达式,生成第一组Wasm指令,所述第一组Wasm指令用于定义一个循环块的开始;
基于所述归纳变量定义结构,生成第二组Wasm指令,所述第二组Wasm指令用于将全部所述归纳变量初始值压入堆栈;
基于所述循环结束判断表达式、所述循环体结构和所述循环终结分支表达式生成第三组Wasm指令,所述第三组Wasm指令用于描述所述循环结构中循环条件判断逻辑、循环体执行逻辑和循环结束时处理逻辑;
基于所述归纳变量迭代结构,生成第四组Wasm指令,所述第四组Wasm指令用于在每次循环迭代中,将所述归纳变量的计算值更新至堆栈中;
当生成所述第四组Wasm指令后,在所述第四组Wasm指令之后添加预设的第一预设Wasm指令,以完成所述目标循环代码对应的Wasm指令集的生成,其中,所述第一预设Wasm指令用于跳转至循环块开头语句。
10.一种终端,其特征在于,所述终端包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的Wasm指令集生成程序,所述Wasm指令集生成程序被所述处理器执行时实现如权利要求1-8任意一项所述的Wasm指令集生成方法的步骤。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有Wasm指令集生成程序,所述Wasm指令集生成程序能够被执行以用于实现如权利要求1-8任意一项所述的Wasm指令集生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410510525.3A CN118092887B (zh) | 2024-04-26 | 一种Wasm指令集生成方法、装置、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410510525.3A CN118092887B (zh) | 2024-04-26 | 一种Wasm指令集生成方法、装置、终端及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN118092887A CN118092887A (zh) | 2024-05-28 |
CN118092887B true CN118092887B (zh) | 2024-07-02 |
Family
ID=
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114721667A (zh) * | 2022-04-21 | 2022-07-08 | 北京万昇智能科技有限公司 | 将ST代码编译为WebAssembly代码的方法及装置 |
CN117008971A (zh) * | 2023-09-27 | 2023-11-07 | 北京中电华大电子设计有限责任公司 | WebAssembly指令集的转换方法及装置 |
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114721667A (zh) * | 2022-04-21 | 2022-07-08 | 北京万昇智能科技有限公司 | 将ST代码编译为WebAssembly代码的方法及装置 |
CN117008971A (zh) * | 2023-09-27 | 2023-11-07 | 北京中电华大电子设计有限责任公司 | WebAssembly指令集的转换方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112100054B (zh) | 一种面向数据管控的程序静态分析方法和系统 | |
US9645803B2 (en) | Methods and systems for forming an adjusted perform range | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
US5613117A (en) | Optimizing compiler using templates corresponding to portions of an intermediate language graph to determine an order of evaluation and to allocate lifetimes to temporary names for variables | |
US7530061B2 (en) | Programmatic access to the widest mode floating-point arithmetic supported by a processor | |
US8510724B2 (en) | Reconstructing program control flow | |
US7917899B2 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
NZ241693A (en) | Compiling computer code: elements of intermediate language flow graph include indications of effects and dependencies on other elements | |
US20090328016A1 (en) | Generalized expression trees | |
AU663493B2 (en) | Method of constructing a constant-folding mechanism in a multilanguage optimizing compiler | |
US20160246622A1 (en) | Method and system for implementing invocation stubs for the application programming interfaces embedding with function overload resolution for dynamic computer programming languages | |
Myreen | Formal verification of machine-code programs | |
Bürger | Reference attribute grammar controlled graph rewriting: motivation and overview | |
CN107301079B (zh) | 一种计算机程序语言的编译方法和编译器 | |
Tanaka et al. | Safe low-level code generation in Coq using monomorphization and monadification | |
Trojahner et al. | Dependently typed array programs don’t go wrong | |
CN118092887B (zh) | 一种Wasm指令集生成方法、装置、终端及存储介质 | |
JP2022522880A (ja) | プログラム論理の表現を生成する方法、逆コンパイル装置、再コンパイルシステムおよびコンピュータプログラム製品 | |
CN118092887A (zh) | 一种Wasm指令集生成方法、装置、终端及存储介质 | |
US20240135210A1 (en) | Replacing lambda expressions in a rete network with corresponding code classes | |
US20240232666A9 (en) | Replacing lambda expressions in a rete network with corresponding code classes | |
Husák et al. | Optimizing transformations of dynamic languages compiled to intermediate representations | |
US8621447B1 (en) | Systems and methods for dynamic struct variable creation including inline declaration with dynamic keys | |
Groote et al. | Compiling higher-level languages | |
Rodriguez | Compiler Optimizations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |