CN116737273A - 编程语言扩展方法、***、计算设备及存储介质 - Google Patents
编程语言扩展方法、***、计算设备及存储介质 Download PDFInfo
- Publication number
- CN116737273A CN116737273A CN202310737375.5A CN202310737375A CN116737273A CN 116737273 A CN116737273 A CN 116737273A CN 202310737375 A CN202310737375 A CN 202310737375A CN 116737273 A CN116737273 A CN 116737273A
- Authority
- CN
- China
- Prior art keywords
- language
- plug
- service
- new
- programming language
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 78
- 230000006870 function Effects 0.000 claims abstract description 128
- 230000015654 memory Effects 0.000 claims description 17
- 230000018109 developmental process Effects 0.000 description 13
- 238000004891 communication Methods 0.000 description 12
- 238000011161 development Methods 0.000 description 12
- 238000010586 diagram Methods 0.000 description 12
- 238000012545 processing Methods 0.000 description 9
- 230000004044 response Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 230000006978 adaptation Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000007723 transport mechanism Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 230000008140 language development Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/541—Interprogram communication via adapters, e.g. between incompatible applications
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种编程语言扩展方法、***、计算设备及存储介质,方法在前端执行以扩展新编程语言,前端包括业务插件,并适于接入与新编程语言相对应的新语言插件;方法包括:基于新编程语言加载业务插件;通过业务插件从新编程语言对应的新语言插件中获取新语言功能参数;通过业务插件,基于新语言功能参数向后端的对应中间协议适配器发送功能服务调用请求,以请求中间协议适配器根据新语言功能参数加载对应的语言功能服务插件,以便与语言功能服务插件进行通信,调用语言功能服务插件提供的功能服务。根据本发明的技术方案,增强了语言的扩展性,解耦了插件之间的依赖关系。
Description
技术领域
本发明涉及应用开发技术领域,尤其涉及一种编程语言扩展方法、编程语言扩展***、计算设备及存储介质。
背景技术
IDE(Integrated Development Environment,集成开发环境)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。
目前,编程语言层出不穷,对IDE的语言扩展能力要求也越来越高。现有技术中,对于QtCreator、Pycharm这种针对性比较强的IDE,支持的语言相对固定,扩展能力较弱。而VSCode作为一款万能编辑器和开发工具,具备较强的扩展能力,但,其基于Electron和TS技术栈实现,虽然简化了IDE开发的复杂度,却由于解释器的存在而牺牲了性能,并且,VSCode的架构并不适合编译型语言开发。QtCreator是在Linux平台使用非常广泛的IDE工具,其主要针对C/C++语言开发。
QtCreator的语言相关的功能都是通过加载不同的插件来实现,编译相关的功能是在cmakeprojectmanager插件中实现,调试相关的功能是在debugger中实现,debugger插件中直接依赖了projectexplorer插件中的逻辑,导致插件内部缺少解耦合操作。另外,QtCreator虽然是基于插件方式来实现相关功能,但其并未考虑扩展性,插件内部的逻辑过重,在IDE的核心业务插件211(编译、调试)中写入了和语言相关的代码,这导致在扩展一个新的语言时需要修改核心业务插件内的代码,这显然不符合开闭原则。并且,工具链均采用直接调用的方式实现,由于语言服务和调试服务都比较消耗资源,直接在IDE中调用会占用IDE本身的资源并影响效率。可见,QtCreator存在扩展性弱、插件之间强依赖、业务未解耦的问题。
鉴于此,需要一种编程语言扩展方法,以解决上述技术方案中存在的问题。
发明内容
为此,本发明提供一种编程语言扩展方法及编程语言扩展***,以解决或至少缓解上面存在的问题。
根据本发明的一个方面,提供一种编程语言扩展方法,适于在前端执行以扩展新编程语言,所述前端包括业务插件,并适于接入与新编程语言相对应的新语言插件;所述方法包括:基于新编程语言加载业务插件;通过所述业务插件,从新编程语言对应的新语言插件中获取新语言功能参数;通过所述业务插件,基于所述新语言功能参数向后端的对应中间协议适配器发送功能服务调用请求,以请求所述中间协议适配器根据所述新语言功能参数加载对应的语言功能服务插件,以便与所述语言功能服务插件进行通信,调用所述语言功能服务插件提供的功能服务。
可选地,根据本发明的编程语言扩展方法,所述中间协议适配器适于从所述语言功能服务插件中获取与所述新编程语言相对应的端口号;所述方法进一步包括:通过所述业务插件,获取所述中间协议适配器返回的所述端口号;根据所述端口号向所述中间协议适配器请求建立语言连接,以便经由所述中间协议适配器与所述语言功能服务插件进行通信,调用所述语言功能服务插件提供的功能服务。
可选地,根据本发明的编程语言扩展方法,所述中间协议适配器适于:根据所述新语言功能参数,确定编程语言为新编程语言,并根据所述新编程语言加载对应的语言功能服务插件。
可选地,根据本发明的编程语言扩展方法,所述前端适于通过独立插件提供一个或多个服务接口,以便所述新语言插件调用所述服务接口,来实现与所述服务接口相对应的服务逻辑。
可选地,根据本发明的编程语言扩展方法,每个所述服务接口对应多个服务插件;所述方法还包括:通过所述新语言插件,调用所述服务接口,以加载与所述服务接口相对应的多个服务插件。
可选地,根据本发明的编程语言扩展方法,所述服务接口包括窗口服务接口,所述方法还包括:通过所述新语言插件,调用所述窗口服务接口,以将与新编程语言相对应的编程页面嵌入到所述前端。
可选地,根据本发明的编程语言扩展方法,所述服务接口包括语言服务接口,所述新语言插件适于主动注册至语言服务接口,以便通过所述语言服务接口提供所述新语言插件所需实现的基础类。
可选地,根据本发明的编程语言扩展方法,所述业务插件包括调试插件、编译插件。
可选地,根据本发明的编程语言扩展方法,所述后端适于接入与所述新编程语言相对应的语言功能服务插件;所述中间协议适配器包括:调试协议适配器、语言服务协议适配器;所述语言功能服务插件包括:调试服务插件、语言服务插件。
可选地,根据本发明的编程语言扩展方法,所述语言连接为基于新编程语言的TCP连接。
根据本发明的一个方面,提供一种编程语言扩展***,包括:前端,包括业务插件,并适于接入与新编程语言相对应的新语言插件;后端,包括中间协议适配器,并适于接入与所述新编程语言相对应的语言功能服务插件;其中,所述前端适于执行如上所述的方法,以扩展新编程语言。
根据本发明的一个方面,提供一种计算设备,包括:至少一个处理器;存储器,存储有程序指令,其中,程序指令被配置为适于由上述至少一个处理器执行,所述程序指令包括用于执行如上所述的编程语言扩展方法的指令。
根据本发明的一个方面,提供一种存储有程序指令的可读存储介质,当该程序指令被计算设备读取并执行时,使得该计算设备执行如上所述的编程语言扩展方法。
根据本发明的技术方案,提供了一种编程语言扩展方法及***,通过在前端接入与新编程语言相对应的新语言插件,在前端使用新编程语言时,可以通过业务插件从新编程语言对应的新语言插件中获取新语言功能参数,基于新语言功能参数向后端的对应中间协议适配器发送功能服务调用请求,中间协议适配器可以根据新语言功能参数加载对应的语言功能服务插件,以便与语言功能服务插件建立通信连接,实现调用语言功能服务插件提供的功能服务。这样,根据本发明的技术方案,在需要扩展新编程语言时,只需要在前后端分别接入与新编程语言对应的插件,便能实现与新编程语言相适配的功能服务,前后端均无需修改代码,从而增强了语言的扩展性,解耦了插件之间的依赖关系,并且,实现各编程语言之间相互隔离。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一个实施例的计算设备100的示意图;
图2示出了根据本发明一个实施例的编程语言扩展***200的示意图;
图3示出了根据本发明一个实施例的编程语言扩展方法300的流程示意图;
图4示出了根据本发明一个实施例的业务插件211、新语言插件、中间协议适配器221、语言功能服务插件222之间的交互时序图;
图5示出了根据本发明一个实施例的服务接口与服务插件的关系示意图;
图6示出了根据本发明一个实施例的语言插件212、服务接口、业务插件211之间的关系示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的计算设备100的示意图。如图1所示,在基本配置中,计算设备100包括至少一个处理单元102和***存储器104。根据一个方面,取决于计算设备的配置和类型,处理单元102可以实现为处理器。***存储器104包括但不限于易失性存储(例如,随机存取存储器)、非易失性存储(例如,只读存储器)、闪速存储器、或者这样的存储器的任何组合。根据一个方面,***存储器104中包括操作***105。
根据一个方面,操作***105例如适合于控制计算设备100的操作。此外,示例结合图形库、其他操作***、或任何其他应用程序而被实践,并且不限于任何特定的应用或***。在图1中通过在虚线内的那些组件示出了该基本配置。根据一个方面,计算设备100具有额外的特征或功能。例如,根据一个方面,计算设备100包括额外的数据存储设备(可移动的和/或不可移动的),例如磁盘、光盘、或者磁带。这样额外的存储在图1中是由可移动存储设备109和不可移动存储设备110示出的。
如在上文中所陈述的,根据一个方面,在***存储器104中存储有程序模块103。根据一个方面,程序模块103可以包括一个或多个应用程序,本发明不限制应用程序的类型,例如应用程序可以包括:电子邮件和联系人应用程序、文字处理应用程序、电子表格应用程序、数据库应用程序、幻灯片展示应用程序、绘画或计算机辅助应用程序、网络浏览器应用程序等。
根据一个方面,程序模块103中还可以包括用于执行本发明的编程语言扩展方法300的多条程序指令,以便本发明的编程语言扩展方法300在计算设备100中执行。
根据一个方面,可以在包括分立电子元件的电路、包含逻辑门的封装或集成的电子芯片、利用微处理器的电路、或者在包含电子元件或微处理器的单个芯片上实践示例。例如,可以经由其中在图1中所示出的每个或许多组件可以集成在单个集成电路上的片上***(SOC)来实践示例。根据一个方面,这样的SOC设备可以包括一个或多个处理单元、图形单元、通信单元、***虚拟化单元、以及各种应用功能,其全部作为单个集成电路而被集成(或“烧”)到芯片基底上。当经由SOC进行操作时,可以经由在单个集成电路(芯片)上与计算设备100的其他组件集成的专用逻辑来对在本文中所描述的功能进行操作。还可以使用能够执行逻辑操作(例如AND、OR和NOT)的其他技术来实践本发明的实施例,所述其他技术包括但不限于机械、光学、流体、和量子技术。另外,可以在通用计算机内或在任何其他任何电路或***中实践本发明的实施例。
根据一个方面,计算设备100还可以具有一个或多个输入设备112,例如键盘、鼠标、笔、语音输入设备、触摸输入设备等。还可以包括输出设备114,例如显示器、扬声器、打印机等。前述设备是示例并且也可以使用其他设备。计算设备100可以包括允许与其他计算设备118进行通信的一个或多个通信连接116。合适的通信连接116的示例包括但不限于:RF发射机、接收机和/或收发机电路;通用串行总线(USB)、并行和/或串行端口。
如在本文中所使用的术语计算机可读介质包括计算机存储介质。计算机存储介质可以包括以任何用于存储信息(例如,计算机可读指示、数据结构、或程序模块103)的方法或技术来实现的易失性的和非易失性的、可移动的和不可移动的介质。***存储器104、可移动存储设备109、和不可移动存储设备110都是计算机存储介质的示例(即,存储器存储)。计算机存储介质可以包括随机存取存储器(RAM)、只读存储器(ROM)、电可擦只读存储器(EEPROM)、闪速存储器或其他存储器技术、CD-ROM、数字通用盘(DVD)或其他光存储、盒式磁带、磁带、磁盘存储器或其他磁存储设备、或者可用于存储信息并且可以由计算机设备100访问的任何其他制品。根据一个方面,任何这样的计算机存储介质都可以是计算设备100的一部分。计算机存储介质不包括载波或其他经传播的数据信号。
根据一个方面,通信介质是由计算机可读指令、数据结构、程序模块103、或者经调制的数据信号(例如,载波或其他传输机制)中的其他数据实施的,并且包括任何信息传递介质。根据一个方面,术语“经调制的数据信号”描述了具有一个或多个特征集或者以将信息编码在信号中的方式改变的信号。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接之类的有线介质,以及诸如声学、射频(RF)、红外线的、以及其他无线介质之类的无线介质。
在根据本发明的实施例中,计算设备100被配置为执行根据本发明的编程语言扩展方法300。计算设备100包括一个或多个处理器、以及存储有程序指令的一个或多个可读存储介质,当程序指令被配置为由一个或多个处理器执行时,使得计算设备执行本发明实施例中的编程语言扩展方法300。
图2示出了根据本发明一个实施例的编程语言扩展***200的示意图。如图2所示,编程语言扩展***200包括前端210、后端220,前端210可以与后端220建立通信连接。
其中,前端210可以被配置为执行本发明的编程语言扩展方法300。本发明的编程语言扩展方法300将在下文详述。
在一个实施例中,前端210可以实现为计算设备100中的应用,例如可以实现为集成开发应用(IDE),并部署在计算设备100的程序模块中。当前端210(集成开发应用)被配置为执行本发明的编程语言扩展方法300时,可以实现在集成开发应用中扩展新编程语言,以便使用新编程语言开发程序。
在一个实施例中,如图2所示,前端210、后端220分别可以包括业务层、插件层、工具层。
在本发明的实施例中,前端210(例如集成开发应用)包括一种或多种业务插件211。并且,前端210可以接入与每种编程语言相对应的语言插件212,其中一种编程语言分别对应一个语言插件212。具体地,各业务插件211部署在前端210的业务层。
在一个实施例中,业务插件211例如包括调试插件、编译插件。
例如,在一个实施例中,前端210的插件层可以包括与一种或多种编程语言相对应的一个或多个语言插件212。需要说明的是,各语言插件212用于封装对应的编程语言相关的特殊处理逻辑,例如调试、工程树生成等处理逻辑。
前端210的工具层可以包括与上述每种语言插件相对应的语言工具链。例如,语言工具链可以包括:语言工程工具(用于工程组织、生成db数据,例如cmake)、语言编译工具(用于语言编译、生成二进制文件,例如gcc、maven)。
在一些实施例中,编程语言例如包括C/C++、Java、Python等,对于每种编程语言均可以在前端210接入与编程语言相对应的语言插件212。
应当指出,本发明的业务插件211中并未写入与编程语言相关的代码。在本发明的实施例中,当需要在前端210(集成开发应用)扩展新编程语言时,可以在前端210接入与新编程语言相对应的新语言插件,而无需修改业务插件211。可以理解,新语言插件用于封装新编程语言相关的特殊处理逻辑,例如调试、工程树生成等处理逻辑。
在本发明的实施例中,后端220可以包括与每种业务插件211相对应的中间协议适配器221,例如包括与调试插件相对应的调试协议适配器(DAP adapter)、与编译插件相对应的语言服务协议适配器(LSP adapter)。其中,调试插件可以通过调试适配协议(DAP)与调试协议适配器进行通信,编译插件可以通过语言服务协议(LSP)与语言服务协议适配器进行通信。
需要说明的是,基于LSP语言服务协议,可以实现语法高亮、符号树、语法树等功能。基于DAP调试适配协议,可以实现被调试程序的启动、运行、断点命中、单步跳入、单步跳出等常用调试功能,通过中间协议的适配,可以解耦业务插件与实际功能服务提供者的依赖,便于扩展编程语言。
后端220还可以包括与一种或多种编程语言分别相对应的语言功能服务插件222,语言功能服务插件222用于为前端(业务插件)提供相应的功能服务。并且,后端220可以接入与新编程语言相对应的语言功能服务插件222(新语言功能服务插件222),以便提供与新编程语言相适配的功能服务。这里,语言功能服务插件222可以包括多种,每种语言功能服务插件222对应一种业务插件211。例如,语言功能服务插件222包括与调试插件相对应的调试服务插件(DAP plugin)、与编译插件相对应的语言服务插件(LSP plugin)。
这里,调试服务插件(DAP plugin)可以封装与对应的编程语言相关的调试功能,以便提供调试服务。语言服务插件(LSP plugin)可以封装与对应的编程语言相关的语法、语意功能,以便提供语法服务。
需要说明的是,后端的中间协议适配器主要用于对不同编程语言的数据区分和数据转发,具体的逻辑可在对应的语言功能服务插件中实现。
在一个实施例中,后端220的工具层可以包括与上述每种语言功能服务插件222相对应的语言服务工具链。例如,语言服务工具链例如可以包括:调试服务工具(调试服务提供者的封装,例如gdb、jdb、pdb)、语言服务工具(语法服务提供者的封装,例如clangd)。
图3示出了根据本发明一个实施例的编程语言扩展方法300的流程示意图。方法300适于在前端210(计算设备100中)执行。
如图3所示,方法300始于步骤310。
首先,在步骤310中,基于新编程语言加载业务插件211。
具体地,在前端210(集成开发应用)使用新编程语言时,例如,在使用新编程语言开发程序时,可以根据所需使用的功能(例如调试功能/编译功能),来加载对应的业务插件211(调试插件/编译插件)。可以理解,在步骤310中加载的业务插件211可以是调试插件或者编译插件。
随后,在步骤320中,通过业务插件211从新编程语言对应的新语言插件中获取新语言功能参数。这里,新语言功能参数可以包括中间协议适配器221的相关数据。
需要说明的是,通过加载业务插件211,可以实现与该业务插件211相对应的业务流程。例如,通过加载调试插件,可以实现调试相关的业务流程。但,每一种编程语言对应的功能参数(对于调试插件即是调试参数)不同、且与编程语言相关,基于此,业务插件211可以根据新编程语言来加载对应的新语言插件,以便从新语言插件中获取新语言功能参数(与新编程语言相关)。这里,新语言功能参数可以包括中间协议适配器221的相关数据,例如,当业务插件211为调试插件时,新语言功能参数可以包括调试协议适配器(DAPadapter)的相关数据。
接下来,在步骤330中,通过业务插件211,基于新语言功能参数向后端220的对应中间协议适配器221发送功能服务调用请求(功能服务调用请求中包含新语言功能参数),以请求该中间协议适配器221根据新语言功能参数加载对应的语言功能服务插件222,以便与语言功能服务插件222进行通信,实现调用该语言功能服务插件222提供的功能服务(例如,调试服务插件提供的调试服务,或者,语言服务插件提供的语法服务)。
具体地,中间协议适配器221在接收到来自于业务插件211的功能服务调用请求后,可以根据功能服务调用请求中的新语言功能参数,来确定前端210使用的编程语言为新编程语言,进而,可以根据所确定的新编程语言来加载与新编程语言对应的语言功能服务插件222。
例如,在一个实施例中,当业务插件211为调试插件时,新语言功能参数可以包括调试协议适配器(DAP adapter)的相关数据,从而,调试插件可以基于新语言功能参数向后端220的调试协议适配器发送调试请求,以请求该调试协议适配器根据新语言功能参数加载对应的调试服务插件(DAP plugin),从而可以与调试服务插件进行通信,调用调试服务插件提供的调试服务。
在一种实现方式中,业务插件211可以通过D-Bus总线来向对应的中间协议适配器221发送功能服务调用请求。
需要指出的是,通过语言功能服务插件222可以针对不同的编程语言进行功能适配,以便接入与新编程语言相适配的功能服务。这样,当需要扩展新编程语言时,通过在前端210接入对应的新语言插件,在后端220接入新编程语言对应的语言功能服务插件222,即可实现在前端210使用新编程语言时,通过后端220的语言功能服务插件222来提供与新编程语言相适配的功能服务。前后端220只需接入插件,均无需修改代码。
图4示出了根据本发明一个实施例的业务插件211、新语言插件、中间协议适配器221、语言功能服务插件222之间的交互时序图。
如图4所示,在一个实施例中,中间协议适配器221在根据新语言功能参数加载(与新编程语言)对应的语言功能服务插件222后,可以从语言功能服务插件222中获取与新编程语言相对应的端口号,并将该端口号返回至业务插件211。
业务插件211在获取到中间协议适配器221返回的与新编程语言相对应的端口号后,可以基于端口号向中间协议适配器221请求建立语言连接(基于新编程语言的语言连接),随后,中间协议适配器221可以向业务插件211返回连接状态。在业务插件211根据连接状态确定语言连接成功后,前端210可以与后端220进行数据传输(发送请求和响应)。具体地,在连接成功后,业务插件211可以经由中间协议适配器221来与语言功能服务插件222进行通信,以调用语言功能服务插件222提供的功能服务。这里,语言连接具体可以为基于新编程语言的TCP连接,通过建立上述语言连接,使得前端与后端之间形成C/S架构,弱化了调用者与被调用者的概念。
如图4所示,在建立语言连接成功后,业务插件211可以基于语言连接向中间协议适配器221发送请求,中间协议适配器221将请求发送至语言功能服务插件222,语言功能服务插件222可以向中间协议适配器221返回响应结果,随后中间协议适配器221将该响应结果发送至业务插件211。这样,便实现业务插件211可以经由中间协议适配器221与语言功能服务插件222进行通信、发送请求和响应数据,从而实现调用语言功能服务插件222提供的功能服务。
需要说明的是,每种编程语言对应的端口号不同,从而,基于新编程语言相对应的端口号与中间协议适配器221建立的是基于新编程语言的TCP连接。
例如,在一个实施例中,当业务插件211为调试插件时,调试插件可以基于新语言功能参数向后端220的调试协议适配器发送调试请求。调试协议适配器可以根据新语言功能参数加载(与新编程语言)对应的调试服务插件,并从调试服务插件中获取与新编程语言相对应的端口号,随后将该端口号返回至业务插件211。这样,前端210的业务插件211可以根据该端口号请求与对应的调试协议适配器建立语言连接(基于新编程语言的TCP连接),使得前端210与后端220可以基于TCP连接进行数据传输(发送请求和响应)。具体地,在连接成功后,业务插件211可以经由调试协议适配器来与调试服务插件进行通信(发送请求和响应),以调用调试服务插件提供的调试服务。
图5示出了根据本发明一个实施例的服务接口与服务插件的关系示意图。
如图5所示,在本发明的一个实施例中,前端210可以基于插件框架独立出一个独立插件,并通过该独立插件来提供一个或多个服务接口,以供各语言插件212调用服务接口。这里,服务接口例如包括Service1、Service2、Service3…。各语言插件212可以通过上下文获取到这些服务接口并进行调用。这样,新语言插件也可以调用上述服务接口,以实现与该服务接口相对应的服务逻辑。应当指出,各语言插件212可以采用主动或被动的调用方式来调用服务接口。
在一个实施例中,每个服务接口可以对应多个服务插件(例如Plugin1~PluginN)。在本发明的方法300中,前端210在使用新编程语言时(例如集成开发应用在使用新编程语言开发程序时),通过新编程语言对应的新语言插件,可以调用上述服务接口,以加载与该服务接口相对应的多个服务插件。
这样,通过服务接口对应的多个服务插件可以实现与该服务接口相对应的服务逻辑。从而,实现将一个完整的服务逻辑分布到服务接口对应的多个服务插件中,降低了服务插件的颗粒度。
在一个实施例中,各服务插件(Plugin1~PluginN)可以与服务接口动态绑定。具体地,各服务插件可以通过服务上下文环境获得服务接口并注册各服务插件所需实现的方法,从而能实现多个服务插件与服务接口动态绑定。这样,使得一个服务接口可以对应多个服务插件(实现者),实现将一个完整的服务逻辑分布到多个服务插件中,降低了服务插件的颗粒度。
图6示出了根据本发明一个实施例的语言插件212、服务接口、业务插件211之间的关系示意图。
在一个实施例中,服务接口对应的服务逻辑可以是定制化的服务逻辑。例如,服务接口可以包括窗口服务接口(window service),窗口服务接口对应的服务逻辑可以为将与编程语言相对应的编程页面嵌入到前端210的预定位置。这样,在该实施例中,通过新语言插件可以调用该窗口服务接口,以将与新编程语言相对应的编程页面嵌入到前端210。
在一个实施例中,服务接口还可以包括语言服务接口,语言服务接口可用于提供各语言插件212所需实现的基础类,并且,语言插件212可以自行进行主动注册至语言服务接口。这样,在前端210接入新编程语言对应的新语言插件时,新语言插件可以主动注册至语言服务接口,从而可以通过语言服务接口来提供新语言插件所需实现的基础类。
另外,一些业务插件211(例如调试插件)在运行到指定位置时,可以调用语言服务接口来执行相应操作,以便完成具体业务流程。
此外,需要说明的是,前端的业务插件可以根据新编程语言的语言特性和工具链参数、运行环境等差异,来实现在对应业务的基础类。例如,对于调试功能,虽然是基于DAP协议实现,并且也已经固定了大部分请求包格式,但有些参数可以灵活定义,例如启动请求对于不同的编程语言可能存在差异,针对这些差异化的处理就需要在业务子类中处理。同理可以推广到其它业务。另外,针对不同编程语言的工具封装也可以在业务插件中实现。例如,对于C++而言,需要用到CMak组织工程结构,可以使用gcc进行编译操作。这些工具的业务流程已经存在于集成开发应用中,而针对每种编程语言的业务逻辑可以在业务插件中实现。
根据本发明的编程语言扩展方法300及***200,通过在前端接入与新编程语言相对应的新语言插件,在前端使用新编程语言时,可以通过业务插件从新编程语言对应的新语言插件中获取新语言功能参数,基于新语言功能参数向后端的对应中间协议适配器发送功能服务调用请求,中间协议适配器可以根据新语言功能参数加载对应的语言功能服务插件,以便与语言功能服务插件建立通信连接,实现调用语言功能服务插件提供的功能服务。这样,根据本发明的技术方案,在需要扩展新编程语言时,只需要在前后端分别接入与新编程语言对应的插件,便能实现与新编程语言相适配的功能服务,前后端均无需修改代码,增强了语言的扩展性,解耦了插件之间的依赖关系,并且,实现各编程语言之间相互隔离。
另外,根据本发明的技术方案,语言插件可以主动调用服务接口绑定的服务插件,以实现相应服务逻辑,从而提高了语言插件的自由度。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,移动终端一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的编程语言扩展方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与本发明的示例一起使用。根据上面的描述,构造这类***所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。
此外,所述实施例中的一些在此被描述成可以由计算机***的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的而非限制性的,本发明的范围由所附权利要求书限定。
Claims (13)
1.一种编程语言扩展方法,适于在前端执行以扩展新编程语言,所述前端包括业务插件,并适于接入与新编程语言相对应的新语言插件;所述方法包括:
基于新编程语言加载业务插件;
通过所述业务插件,从新编程语言对应的新语言插件中获取新语言功能参数;
通过所述业务插件,基于所述新语言功能参数向后端的对应中间协议适配器发送功能服务调用请求,以请求所述中间协议适配器根据所述新语言功能参数加载对应的语言功能服务插件,以便与所述语言功能服务插件进行通信,调用所述语言功能服务插件提供的功能服务。
2.如权利要求1所述的方法,其中,所述中间协议适配器适于从所述语言功能服务插件中获取与所述新编程语言相对应的端口号;所述方法进一步包括:
通过所述业务插件,获取所述中间协议适配器返回的所述端口号;
根据所述端口号向所述中间协议适配器请求建立语言连接,以便经由所述中间协议适配器与所述语言功能服务插件进行通信,调用所述语言功能服务插件提供的功能服务。
3.如权利要求1或2所述的方法,其中,所述中间协议适配器适于:根据所述新语言功能参数,确定编程语言为新编程语言,并根据所述新编程语言加载对应的语言功能服务插件。
4.如权利要求1-3中任一项所述的方法,其中,
所述前端适于通过独立插件提供一个或多个服务接口,以便所述新语言插件调用所述服务接口,来实现与所述服务接口相对应的服务逻辑。
5.如权利要求4所述的方法,其中,每个所述服务接口对应多个服务插件;所述方法还包括:
通过所述新语言插件,调用所述服务接口,以加载与所述服务接口相对应的多个服务插件。
6.如权利要求4-5中任一项所述的方法,其中,所述服务接口包括窗口服务接口,所述方法还包括:
通过所述新语言插件,调用所述窗口服务接口,以将与新编程语言相对应的编程页面嵌入到所述前端。
7.如权利要求4-6中任一项所述的方法,其中,所述服务接口包括语言服务接口,所述新语言插件适于主动注册至语言服务接口,以便通过所述语言服务接口提供所述新语言插件所需实现的基础类。
8.如权利要求1-7中任一项所述的方法,其中,
所述业务插件包括调试插件、编译插件。
9.如权利要求1-8中任一项所述的方法,其中,所述后端适于接入与所述新编程语言相对应的语言功能服务插件;
所述中间协议适配器包括:调试协议适配器、语言服务协议适配器;
所述语言功能服务插件包括:调试服务插件、语言服务插件。
10.如权利要求1-9中任一项所述的方法,其中,所述语言连接为基于新编程语言的TCP连接。
11.一种编程语言扩展***,包括:
前端,包括业务插件,并适于接入与新编程语言相对应的新语言插件;
后端,包括中间协议适配器,并适于接入与所述新编程语言相对应的语言功能服务插件;
其中,所述前端适于执行如权利要求1-10中任一项所述的方法,以扩展新编程语言。
12.一种计算设备,包括:
至少一个处理器;以及
存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要求1-10中任一项所述的方法的指令。
13.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-10中任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310737375.5A CN116737273A (zh) | 2023-06-20 | 2023-06-20 | 编程语言扩展方法、***、计算设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310737375.5A CN116737273A (zh) | 2023-06-20 | 2023-06-20 | 编程语言扩展方法、***、计算设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116737273A true CN116737273A (zh) | 2023-09-12 |
Family
ID=87900837
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310737375.5A Pending CN116737273A (zh) | 2023-06-20 | 2023-06-20 | 编程语言扩展方法、***、计算设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116737273A (zh) |
-
2023
- 2023-06-20 CN CN202310737375.5A patent/CN116737273A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108255545B (zh) | 组件间的功能调用方法、装置及组件化架构*** | |
US6823504B1 (en) | Method and apparatus for interfacing a javascript interpreter with library of host objects implemented in java | |
US8832656B2 (en) | Testing systems and methods for a resource constrained device | |
US20080163265A1 (en) | System and method for reducing the static footprint of mixed-language java classes | |
EP1301854B1 (en) | Method and apparatus for creating efficient native methods that extend a bytecode interpreter | |
CN113407362A (zh) | 基于车载Android***SOA架构SOMEIP通信中间层实现方法及*** | |
CN105094910A (zh) | 一种驱动函数用户态调试***和方法 | |
US6898786B1 (en) | Javascript interpreter engine written in Java | |
CN113703862A (zh) | 基于配置的接口调用方法、装置、设备及存储介质 | |
CN109542464B (zh) | IoT设备脚本程序的开发部署***、方法及存储介质 | |
US8990515B2 (en) | Aliasing buffers | |
CN112905271A (zh) | 一种应用程序接口api的调用方法、装置及电子设备 | |
CN110188071B (zh) | 数据处理方法、装置、电子设备和计算机可读介质 | |
CN111045746B (zh) | 代码扩展方法和框架 | |
WO2023208012A1 (zh) | 程序处理、运行方法、装置、终端、智能卡及存储介质 | |
CN116185495B (zh) | 计算函数构建方法、计算引擎、电子设备及可读存储介质 | |
CN116737273A (zh) | 编程语言扩展方法、***、计算设备及存储介质 | |
JP2007226784A (ja) | インラインされたメソッドの呼出方法およびそれを用いたジャバ仮想マシン | |
CN113986744A (zh) | 一种分库分表组件的测试方法、装置及存储介质 | |
CN110275710B (zh) | 一种Java本地接口一致性检查方法及***、存储介质及终端 | |
US20020038454A1 (en) | Method of compiling code in an object oriented programming language | |
CN114936368A (zh) | 一种Java内存木马检测方法、终端设备及存储介质 | |
EP1337915A1 (fr) | Verification formelle notamment d'une machine virtuelle securisee | |
CN114443316B (zh) | 一种对象访问方法、装置及电子设备 | |
US11645082B2 (en) | Programming language trigger mechanisms for parallel asynchronous enumerations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |