一种面向云开发的语言工作台、电子设备以及存储介质的制作方法

文档序号:29744330发布日期:2022-04-21 21:03阅读:92来源:国知局
一种面向云开发的语言工作台、电子设备以及存储介质的制作方法

1.本发明涉及编程语言技术领域,尤其涉及了一种面向云开发的语言工作台、电子设备以及存储介质。


背景技术:

2.语言工作台是一种面向语言的编程技术,由martin fowler于2005年提出。总的来说,语言工作台是一种专用的ide(integrated development environment,集成开发环境),用于定义和构建dsl(domain-specific language,领域特定语言)。具体的讲,语言工作台不仅用来确定dsl的语言结构,同时也提供编写dsl脚本的编辑环境。
3.其中,dsl指的是专注于某个应用程序领域的计算机语言。又可译作领域专用语言。不同于大家更为熟悉的普通的、跨领域的gpl(general purpose language,通用编程语言),领域特定语言与使用环境更密切相关,只能用在某些特定的领域,比如用来显示网页的html。
4.现有的典型语言工作台(如jetbrain mps和xtext)中,用户都需要下载并使用一个专用的图形化界面的投影编辑器。该投影编辑器也称为结构化编辑器,可以是任何了解文档底层结构的文档编辑器。结构编辑器可用于编辑层次或标记文本、计算机程序、图表、化学公式以及任何其他类型的内容,这些内容具有清晰且定义良好的结构。在当今企业内部的复杂系统集成场景下,过度依赖图形化的投影编辑器是一个极大的痛点,会对大规模系统集成产生障碍,并存在供应商锁定的风险。因为,在不同的语言工作台之间没有交换的标准,如果您想更改当前的语言工作台,这将意味着需要重新设计一个语言工作台。
5.另外,对于用于云开发的软件工具领域来说,典型的语言工作台往往完全在客户端运行,但在云开发场景下,用户常常希望投影编辑、代码生成等阶段,都可以运行在服务器或ci&cd(continuous integration&continuous delivery持续集成和持续交付)流水线中。因此需要重新设计新的元编程语言、投影编辑器以及代码生成器的形态,以适应新的业态环境。


技术实现要素:

6.为了解决上述缺陷,提高语言工作台的灵活性,使领域专家作为非专业的程序员可以深度参与到对dsl定义过程中,从而使本领域内的用户对于dsl的使用将更加得心应手。根据本发明的一些实施例,提供了一种面向云开发的语言工作台、存储介质及电子设备。
7.本发明首先提出了一种面向云开发的语言工作台,用于将基于元编程语言编写的源程序解析为目标程序,包括:
8.解析器,用于将所述源文件解析为语义模型,并将所述语义模型序列化为语义模型流;
9.持久化存储服务,用于接收所述语义模型流,根据所述语义模型流重建所述语义
模型并保存到外部存储器中;
10.生成器,向所述持久化存储服务发起请求以获取所述语义模型,并根据所述语义模型生成所述目标程序。
11.在上述的语言工作台中,所述源文件包括使用元编程语言本身编写的文件,还包括使用由所述元编程语言描述的领域特定语言编写的文件。
12.在上述的语言工作台中,所述外部存储器包括网络存储服务器。
13.在上述的语言工作台中,所述持久化存储服务还用于解析所述语义模型之间的拓扑结构以获取拓扑图。
14.在上述的语言工作台中,当所述生成器请求获取所述语义模型时,所述持久化存储服务将所述拓扑图序列化为拓扑图流,所述生成器对所述拓扑图流反序列化,从而获取所述语义模型。
15.在上述的语言工作台中,所述持久化存储服务根据所述拓扑图查询所述领域特定语言所描述的信息,并在响应所述生成器的请求时将所述信息附加在所述拓扑图中。
16.在上述的语言工作台中,所述生成器还根据所述语义模型生成用于云开发的软件工具,所述软件工具用于辅助使用元编程语言以及由所述元编程语言描述的领域特定语言来编写所述源程序。
17.在上述的语言工作台中,对于以所述多种编辑模式所编辑的所述源程序,所述解析器在解析过程中产生遵循相同规则的中间表示。
18.基于同一设计思路,本发明还提出了一种电子设备,包括:
19.存储器,是所述电子设备的存储器之一,用于存储计算机指令;
20.处理器,是所述电子设备的处理器之一,当所述电子设备执行所述计算机指令时,实现如上所述的语言工作台。
21.基于同一设计思路,本发明还提出了一种计算机可读的存储介质,所述存储介质上存储有指令,所述指令在计算机上执行时,所述计算机执行上所述的语言工作台。
22.相对于现有技术,企业内部的领域专家可以通过本发明所述的语言工作台提供的元编程语言来定义甚至构建一种符合该企业所需的dsl,语言工作台可以通过该元编程语言的持久化抽象表示,生成语言工作台自身所需的投影编辑器以及为该企业开发软件所需的软件工具,例如sdk(software development kit,软件开发工具包),cli(command-line interface,命令行接口),cdk(cloud development kit,云开发工具包)等。企业的普通用户可以通过投影编辑器将需要编辑/修改的内容投影到用dsl编写的具体源程序。
23.此外,通过将抽象的语义模型存储到云端,使得语言工作台不仅仅只工作在客户端,而是可以在云服务器端工作,从而可以进一步运行于ci&cd流水线中。
附图说明
24.图1是本发明中语言工作台的应用场景说明图;
25.图2是基于本发明中一些实施例而提供的语言工作台的模块示意图;
26.图3是在云开发场景下,本发明中语言工作台的运行示意图;
27.图4是基于本发明中一些实施例而提供的电子设备的硬件框图。
具体实施方式
28.以下由特定的具体实施例说明本发明的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本发明的其他优点及功效。虽然本发明的描述将结合较佳实施例一起介绍,但这并不代表此发明的特征仅限于该实施方式。恰恰相反,结合实施方式作发明介绍的目的是为了覆盖基于本发明的权利要求而有可能延伸出的其它选择或改造。为了提供对本发明的深度了解,以下描述中将包含许多具体的细节。本发明也可以不使用这些细节实施。此外,为了避免混乱或模糊本发明的重点,有些具体细节将在描述中被省略。需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
29.应注意的是,在本说明书中,相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,默认为同一定义。
30.还需声明的是,本发明中对方法、流程进行编号是为了便于引用,而不是限定先后顺序,各步骤之间如有先后顺序,当以文字说明为准。
31.本发明的设计思想在于,源程序设计时采用的编程语言种类较多,为了使一个语言工作台能够处理多种编程语言编写的源程序,可以考虑在解析源程序的时候,将其统一在中间表示的层面上,从而在后续的处理上可以保持高度的统一性。而当需要修改或重建源程序时,可以自由选择自己喜欢的编辑器,而不必一定与初次编辑时相同,因为差异在源程序被解析为中间表示时消除了。
32.为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明的实施方式作进一步地详细描述。
33.以下结合附图来说明本发明的具体实施例。
34.图1是本发明中语言工作台的应用场景说明图。如背景技术部分所述,语言工作台是一种ide(integrated development environment,集成开发环境),其主要用于定义dsl(domain-specific language,领域特定语言)以及支持该dsl的编辑和编译。dsl是一种专门用于特定的业务领域的抽象语法,其更多地是针对特定领域,解决该特定领域中的问题。例如,需要为一特定企业提供一项企业集成系统,则势必需要熟悉企业需求的领域专家和熟悉各种编程语言的专业程序员的共同协作。
35.企业内部有大量需要领域专家录入的结构化数据,这些数据通常是采用某种特定配置语言来表达的。传统的语言开发工作,需要对编译器理论有较深刻的理解,一般都需要由程序员来完成。但是程序员并不能针对企业独有的特点抽象出适应于该企业的结构化数据结构,本实施例中的语言工作台10支持元编程语言,来自企业的领域专家使用元编程语言来创建一种和该企业的结构化数据相匹配的dsl。程序员则对语言工作台10进行维护,使得语言工作台10能够根据元编程语言的定义来解析由dsl所编辑的源程序。显然,语言工作台10也可以支持该dsl的编辑和编译。新创建的dsl作为一种帮助用户从一个系统中抽象出某些部分的工具,使得企业中的普通用户(包括领域专家)都可以在语言工作台10使用dsl来编写实现上述的企业集成系统的源程序。语言工作台10根据领域专家用元编程语言编辑的语义模型,对所述源程序进行解析,获取该语义模型的中间表示并进而转化为持久抽象表示并保存在语言工作台10中。当生成器发出查询请求时,语言工作台10将元编程语言定义的语义模型反馈给生成器,以使生成器可以生成目标程序。
36.此外,语言工作台10还基于持久抽象模型生成可供自身使用的投影编辑器和供开发者使用的软件工具,例如sdk(software develop kit,软件开发工具包),cli(command-line interface,命令行接口),cdk(cloud development kit,云开发工具包)等。这些软件工具也与语言工作台10自身相关,是针对特殊领域(如前述的企业集成系统)特有的。企业用户(包括领域专家)可以通过所述投影编辑器来编辑对应的dsl投影到的具体的程序。程序员可以通过对开发工具的使用,来对语言工作台10进行维护和维持。
37.图2是基于本发明中一些实施例而提供的语言工作台的模块示意图。从整体上来说,源程序20输入到语言工作台10,由语言工作台10完成对源程序20的解析,并生成目标程序30。
38.源程序20可以包括用元编程(metaprogramming)语言、dsl以及其他的通用的编程语言所编辑的程序。其中,元编程语言用于描述语言工作台10所支持的其他编程语言(包括dsl)。为了使多种编程语言都可以使用统一的结构来表示和存储,本实施例定义了编程语言的通用的语义模型结构,主要包含元语义模型和语言语义模型。所述元语义模型是采用元编程语言所描述的其它语言的语义模型,也可以用于描述自身。语言语义模型则是其它语言的语义模型。
39.目标程序30可以包括多种编程语言所编写的软件的源代码、由语言工作台10生成的工具软件104和投影编辑器105的源代码。其中,目标程序30并不需要与源程序20之间存在一一对应的关系。根据后文对语言工作台10的具体说明可知,多种不同语言编辑的源程序20被投影为统一的图结构的语义模型,目标程序30是基于统一的图结构的语义模型生成的,也就是说,源程序20和目标程序30之间不存在直接的对应关系,他们通过统一的语义模型来相互“翻译”。更进一步,目标程序30可以由多种不同的源程序20来共同生成,只需他们被加载至统一的语义模型中即可。具体的,语言工作台10可以包括解析器101,解析器101负责将源程序20解析成语义模型,并将该语义模型保存在可持久存储数据的外部存储器(相对内部存储器而言)中。在一个进一步的实施例中,所述外部存储器可以是云存储器,例如远程的存储服务器。传统的语言工作台,通常提供一个集成开发环境作为客户端,在该客户端中完成编辑、存储和代码生成工作。但在云上工具开发场景下,用户常常希望语言工作台10中的各功能阶段(例如投影编辑、代码生成等阶段)都可以运行在云端的服务器或ci&cd流水线中。为了实现这一功能,本实施例定义了序列化协议,通过该序列化协议可以将语义模型从解析器101上传到云存储器或从云存储器下载到生成器103中。
40.语言工作台10还包括远程语义模型持久化存储服务102,该服务实现了语义模型的持久化存储和远程存储。远程语义模型持久化存储服务102接收语义模型后,根据元编程语言所定义的元语义模型,反序列化所述语义模型,并根据序列化协议,将语义模型写入至远程持久化。
41.远程语义模型持久化存储服务102根据接收语义模型后,根据元编程语言所定义的元语义模型,反序列化语义模型;根据元语义模型中的标注信息,识别语义模型之间的拓扑关系,将语义模型建模为拓扑图。
42.远程语义模型持久化存储服务102还实现了远程的图查询方法,可以根据语义模型的拓扑结构来查询语言所描述的信息,并在响应结构中携带额外的拓扑结构信息(例如,通过语言的某一个片段,查询相关联的符号信息)。
43.具体的,远程语义模型持久化存储服务102进一步包括语义模型1021、存储服务1022以及查询引擎1023。
44.从硬件层面来说,语义模型1021通过存储服务1022被传送到了云端的服务器中,在需要的时候也可以通过存储服务1022从云端的服务器中取得语义模型1021。
45.从软件协议层面来说,本实施例定义了语言工作台10和远程语义模型持久化存储服务102之间的协议。该协议包括两种,第一种是解析器10上传至远程语义模型持久化存储服务102时所采用的序列化协议,即模型序列化协议。语义模型序列化上传至远程语义模型持久化存储服务102后,在服务内部,根据元语义模型再将序列化的语义模型反序列化为语义模型,并在语义模型中,添加元语义模型所携带的信息。也就是,解析器101根据模型序列化协议将语义模型从源程序20中解析出来,并将语义模型作为一个对象,将其进行序列化,并通过网络进行传输,远程语义模型持久化存储服务102接收到模型序列后,根据模型序列化协议执行反序列化,从模型序列中重新获得语义模型1021,并将该语义模型1021通过存储服务1022保存到云服务器中。此外,在反序列化的同时,还可以将语义模型1021建模为拓扑图结构(用于与生成器103之间的通信,详见后文),由存储服务1022完成拓扑图结构的依赖信息的提取和生成。
46.具体的,语义模型可以包括:语言符号的id、类型、属性、特质和依赖。其中,语言符号的id是符号节点的唯一标识;类型表示该符号的类型。属性表示该符号节点的信息,属性的结构由元编程语言定义;特质包括该符号的附加信息。每一类投影编辑器之间的差异可以由特质来表达,特质的结构也由元编程语言定义;依赖表示符号节点之间的依赖关系,由解析器101上传至存储时,由元编程语言标注的信息生成。存储服务1022还为查询引擎1023提供服务。查询引擎1023接收到查询请求后,向存储服务1022提出查询要求,由存储服务1022居间,将已经远程存储的语义模型1021再次调取回来,供后续的开发工具或生成器103使用。
47.语言工作台10还包括生成器103。生成器103是一种代码生成器,负责向远程语义模型持久化存储服务102发起请求,将语义模型信息查询到内存中。根据该语义模型,生成器103将完成以下三类代码生成任务,包括:
48.1.生成多种编程语言的程序源码31,其中,多种编程语言的程序源码31仅仅是其它语言编辑的源文件,要生成可执行文件则还需要通过相应编程语言的编译器来编译。
49.2.生成用于云开发的软件工具104(如sdk、cli、ui界面等),以供开发者使用。
50.3.生成元编程语言的投影编辑器105。一方面,通过投影编辑器105可以实现元编程语言的自举,例如,当元编程的定义需要扩展时,只需更改元编程语言的元语义模型,投影编辑器也会随之自动更新。基于该自举的技术,语言工作台10实现了面向新语言的自我更新机制。
51.生成器103和远程语义模型持久化存储服务102之间通过第二种协议来沟通。该第二种协议也是一种序列化协议。相比于模型序列化协议,由于本实施例中根据元语义模型中的标注信息,识别语义模型1021之间的拓扑关系,从而可以将语义模型建模为拓扑图,也就是说,该第二种协议是包括拓扑图的图序列化协议。生成器103通过请求下载所述图序列化协议,该协议中包含了所述的模型序列化协议本身,和额外的图拓扑结构信息。
52.之前说明过,第一种协议是解析器101和远程语义模型持久化存储服务102之间的
协议,在该模型序列化协议中,序列化表示包括:语言符号的id、类型、属性和特质。第二种协议是生成器103和远程语义模型持久化存储服务102之间的协议,在该图序列化协议中,序列化表示包括:语言符号的id、类型、属性、特质和依赖。在第二种协议中,设计基于拓扑图的序列化协议,作为持久化中间表示与其它组件之间数据交换的基准,同时也作为语言语义模型的图结构数据表达,使组件间的通信解耦,并确保传输过程中不丢失语义模型的拓扑结构。
53.具体的,本实施例中包括了一种基于转换器和模版的代码生成技术。基于上述的序列化协议(模型序列化协议和图序列化协议),进行代码生成工作。转换器负责模型到模型的变换,模版负责模型到代码的变换。该技术可广泛用于云厂商开发者工具的自动生成。
54.上述的语言工作台10将现有的语言工作台中的模式(schema)具化为持久化抽象表示,并构造了集中式的持久化存储服务,可以确保多种范式的编程语言能够统一在一个通用的语义模型框架内,从而使得语言工作台10可以“翻译”多种编程语言。
55.图3是在云开发场景下,本发明中语言工作台的运行示意图。在云开发场景下,语言工作台的核心组件投影编辑器、解析器、持久化存储、生成器都可以在远程或本地运行,适用于持续集成(ci)和持续交付(cd),极大增强了在大规模系统集成中的适应性。首先,基于元语义模型,为投影编辑器105生成cli工具和web ui工具。cli工具使得投影编辑器105可以在ci/cd流水线40中运行;web ui工具使的投影编辑器105可以在云端(语言工作台10的云端)提供用户界面。同样的,为了使生成器103能够在ci/cd流水线40中运行,基于元语义模型,也为生成器103生成cli工具,或者说以cli形式提供生成器103。解析器-持久化服务,持久化服务-代码生成器之间的数据交换都可以以序列化的形式通过网络来进行传输。
56.综上,本发明提出了一种面向云开发工具生产流程的语言工作台。通过该语言工作台,可以快速定义一款开发者工具的意图模型。并通过代码生成技术生成最终的工具产品。该方法有以下优势:
57.1.可以通过该语言工作台自定义开发者工具的意图模型,录入工具类产品开发过程中所需要的所有信息,极大提升了开发者工具类产品的开发效率。
58.2.不依赖特定的集成开发环境,用户可以扩展自己的dsl,采用自己喜欢的编辑器。
59.3.可以在云服务器端运行,满足了大规模云上软件持续交付的需要。
60.4.基于语义模型,可以自动生成包括语言工作台自身在内的多种开发者工具,包括sdk、cli、terraform、pulumi、cdk等等。
61.本发明还提供了一种计算机可读的存储介质,该存储介质具有存储在其中的指令,当指令被执行时,使得计算机执行如上所述的方法。
62.本发明还提供了一种电子设备,其包括存储器和处理器。其中,存储器是所述电子设备的存储器之一,用于存储计算机指令。处理器是所述电子设备的处理器之一,当所述处理器执行所述计算机指令时,实现如上述的方法。
63.本发明所提供的方法实施方式可以在服务器、交换机、路由器、计算机终端等电子设备中执行。图4是本发明所使用的电子设备的基本硬件结构框图。如图4所示,电子设备200可以包括一个或多个(图中仅示出一个)处理器210(处理器210可以包括但不限于中央处理器cpu、图像处理器gpu、数字信号处理器dsp、微处理器mcu或可编程逻辑器件fpga等的
处理装置)、用于与用户交互的输入输出接口220、用于存储数据的存储器230、用于通信功能的传输装置240以及总线250。本领域普通技术人员可以理解,图3所示的结构仅为示意,其并不对上述电子装置的结构造成限定。
64.存储器230可用于存储应用软件的软件程序以及模块,处理器210通过运行存储在存储器230内的软件程序以及模块,从而执行各种功能应用以及数据处理。
65.存储器230可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器230可进一步包括相对于处理器210远程设置的存储器,这些远程存储器可以通过网络连接至电子设备200。上述网络的实例包括,但不限于互联网、企业内部网、局域网、移动通信网及其组合。
66.传输装置240用于经由一个网络接收或者发送数据。在本发明中,传输装置240包括可编程的监测设备241,通过该监测设备241与其他电子设备相连进行通讯。作为一个示例,传输装置240可以是交换机芯片组、网卡等负责网络通信的设备,监测设备241可以是可编程硬件,诸如可编程网络芯片,例如asic芯片、p4芯片、tofino芯片等,这些可编程硬件通过替代地或附加地设置在传输装置240中,本发明对此不作限制。
67.本发明实施方式并不限定应用程序的种类,可以为系统类应用程序,也可以为软件类应用程序。
68.本发明实施方式并不限定电子设备200的对端电子设备的类型和数量,例如,对端电子设备可以是与电子设备200相同或相似的设备,例如对端电子设备的传输装置具有与监测设备241相同或相似的设备,或者,对端电子设备可以是不具有上述监测设备的常规的电子设备,例如,常规的交换机、路由器、网关、或者主机等。可以理解,电子设备200可以同时与多个对端电子设备建立链路连接,并进行链路质量检测,例如,在数据中心、集群等场景。
69.在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
70.类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
71.本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的替代特征来代
替。
72.此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1