本发明涉及编程语言的解析引用技术,具体涉及用于同平台具有不同编程语言项目的混合引用方法及系统。
背景技术:
近年来,多种不同的编程语言百花齐放、层次不穷、各有千秋,开发人员经常会结合不同语言的特性来解决不同的问题。现有的管理工具,对于不同的语言,必须要编译成二进制包以后,才能互相引用。对开发和调试带来了不必要的开销,开发过程中往往不能及时的了解其他语言提供的功能是否完备。
技术实现要素:
本发明的目的在于为了解决现有技术中在多语言开发的过程中需要编译整个项目才能实现项目之间互相引用,而为开发和调试带来了不必要的开销等问题的出现;提供用于同平台具有不同编程语言项目的混合引用方法及系统。
为了达到上述目的,本发明通过以下技术方案实现:
一种用于同平台具有不同编程语言项目的混合引用方法,所述方法包含:
建立项目目录结构;所述项目目录结构内包含:信息子目录、源文件目录以及目标子目录;所述源文件目录内包含至少两个语言子目录,每个所述语言子目录内包含至少一个项目,每个所述项目包含使用对应的编程语言编写的所述项目的源文件;
读取每个所述项目的源文件,编译为具有属于所述平台的中间语言的中间文件存入所述目标子目录;
读取每个所述中间文件的元数据信息,并存入所述信息子目录;
至少根据任一所述项目的命名空间信息,对所述信息子目录中的所有所述元数据信息检索,获得对应所述项目的项目信息;所述项目信息包含:属于所述项目的所有类的信息、属于每个所述类的成员信息,所述类的信息包含所述项目的类与其他所述项目的类之间的引用关系信息。
较佳地,所述项目目录结构内还包含建立配置子目录,所述建立配置子目录内包含至少一个项目配置信息;
每个所述项目配置信息包含:所述项目的项目名称、使用的编程语言、所述使用的编程语言的版本、以及所述项目与其他所述项目之间的引用关系信息。
较佳地,在读取每个所述项目的源文件,编译为具有属于所述平台的中间语言的中间文件存入所述目标子目录的步骤之前,所述方法还包含:
采用所述平台的任一所述编程语言将对应的所述项目的源文件写入所述源文件目录中对应的所述语言子目录。
较佳地,在至少根据任一所述项目的命名空间信息,对所述信息子目录中的所有所述元数据信息检索,得到对应所述项目的项目信息的步骤中,还包含:
根据任一所述项目的所述命名空间信息、至少一个所述类的名称,从所述信息子目录检索,得到所述项目的至少一个所述类的信息;
根据任一所述项目的所述命名空间信息、一个所述类的名称以及属于所述类中的至少一个成员名称,从所述信息子目录检索,得到所述项目的至少一个所述成员的信息。
较佳地,在至少根据任一所述项目的命名空间信息,对所述信息子目录中的所有所述元数据信息检索,得到对应所述项目的项目信息的步骤之后,所述方法还包含:
将所述项目的类与其他所述项目的类之间的引用关系信息作为所述项目与其他项目之间的引用关系信息存入所述建立配置子目录内对应所述项目配置信息内。
一种用于同平台具有不同编程语言项目的混合引用系统,所述混合引用系统包含:
建立目录单元,建立项目目录结构;所述项目目录结构内包含:信息子目录、源文件目录以及目标子目录;所述源文件目录内包含至少两个语言子目录,每个所述语言子目录内包含至少一个项目,每个所述项目包含使用对应的编程语言编写的所述项目的源文件;
编译器,读取每个所述项目的源文件,编译为具有属于所述平台的中间语言的中间文件存入所述目标子目录;
中间语言读取器,读取每个所述中间文件的元数据信息,并存入所述信息子目录;
解释器,至少根据任一所述项目的命名空间信息,对所述信息子目录中的所有所述元数据信息检索,获得对应所述项目的项目信息;所述项目信息包含:属于所述项目的所有类的信息、属于每个所述类的成员信息,所述类的信息包含所述项目的类与其他所述项目的类之间的引用关系信息。
较佳地,所述建立目录单元建立的所述项目目录结构内还包含建立配置子目录,所述建立配置子目录内包含至少一个项目配置信息;
每个所述项目配置信息包含:所述项目的项目名称、使用的编程语言、所述使用的编程语言的版本、以及所述项目与其他所述项目之间的引用关系信息。
较佳地,所述混合引用系统还包含:
编程器,采用所述平台的任一所述编程语言将对应的所述项目的源文件写入所述源文件目录中对应的所述语言子目录。
较佳地,所述解释器还用于:
根据任一所述项目的所述命名空间信息、至少一个所述类的名称,从所述信息子目录检索,得到所述项目的至少一个所述类的信息;
根据任一所述项目的所述命名空间信息、一个所述类的名称以及属于所述类中的至少一个成员名称,从所述信息子目录检索,得到所述项目的至少一个所述成员的信息。
较佳地,所述解释器还用于:
将所述项目的类与其他所述项目的类之间的引用关系信息作为所述项目与其他项目之间的引用关系信息存入所述建立配置子目录内对应所述项目配置信息内。
在符合本领域常识的基础上,上述各优选条件,可任意组合,即得本发明各较佳实例。
本发明的积极进步效果在于:
本发明公开的用于同平台具有不同编程语言项目的混合引用方法及系统,首先,建立项目目录结构;其次,读取每个项目的源文件,编译为具有平台的中间语言的中间文件存入目标子目录;再次,读取每个中间文件的元数据信息,并存入信息子目录;最后,至少根据任一项目的命名空间信息,从信息子目录中的所有元数据信息检索,获得对应项目的信息。本发明能够为单一平台的多编译语言开发提供了无需全局编译和打包过程,直接为项目提供该项目中所有编译语言的主要信息,便于开发人员跨语言开发以及集成不同的编译语言。
附图说明
图1为本发明用于同平台具有不同编程语言项目的混合引用方法的整体结构示意图。
图2为本发明用于同平台具有不同编程语言项目的混合引用方法的实施例示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
如图1所示,一种用于同平台具有不同编程语言项目的混合引用方法,方法包含:
S1,建立项目目录结构。
如图2所示,其中,项目目录结构内包含:信息子目录info、源文件目录src以及目标子目录target;源文件目录src内包含至少两个语言子目录,每个语言子目录内包含至少一个项目,每个项目包含使用对应的编程语言编写的项目的源文件。
S2,读取每个项目的源文件,编译为具有属于平台的中间语言的中间文件存入目标子目录target。
在实际使用的过程中,存在多种平台,例如,.NET为Microsoft(微软)面向XML Web服务的平台,jvm平台等。每个平台具有各自不同的编程语言,例如,.NET平台的编程语言包括c#、f#等,jvm平台的编程语言包括jave、scala、clojure等。并且,目前单一平台的多种编译语言之间都有统一的中间语言,例如,jvm平台上的bytecode、.NET平台的il等。
本实施例将每个平台中将用不同语言编写的项目全部编译为具有该平台同一中间语言的中间文件。
S3,读取每个中间文件的元数据信息,并存入信息子目录info。
S4,至少根据任一项目的命名空间信息,对信息子目录info中的所有元数据信息检索,获得对应项目的项目信息。
其中,项目信息包含:属于项目的所有类的信息、属于每个类的成员信息,类的信息包含项目的类与其他项目的类之间的引用关系信息。
以上是实施例1的具体实施方式,首先,建立项目目录结构;其次,读取每个项目的源文件,编译为具有属于平台的中间语言的中间文件存入目标子目录;再次,读取每个中间文件的元数据信息,并存入信息子目录;最后,至少根据任一项目的命名空间信息,对信息子目录中的所有元数据信息检索,获得对应项目的项目信息。本实施例能够实现确定每个项目中的任一类与其他编程语言编写的其他项目中的一个或多个类、同编程语言编写的其他项目中的一个或多个类之间的相互引用关系,便于开发人员进行实际检索。
实施例2
如图1所示,一种用于同平台具有不同编程语言项目的混合引用方法,方法包含:
S1,建立项目目录结构。
如图2所示,项目目录结构内包含:信息子目录info、源文件目录src、目标子目录target以及建立配置子目录build config。
其中,源文件目录src内包含至少两个语言子目录,每个语言子目录内包含至少一个项目,每个项目包含使用对应的编程语言编写的项目的源文件。
建立配置子目录build config内包含至少一个项目配置信息。每个项目配置信息包含:项目的项目名称、使用的编程语言、使用的编程语言的版本、以及项目与其他项目之间的引用关系信息。
如图2所示,项目目录结构内包含:管理子目录lib。在管理子目录lib中包含该平台上每种编程语言的依赖包。
如图2所示,在.NET平台上建立的项目目录结构,其中源文件目录src内包含c#、f#两个语言子目录,c#语言子目录中包含项目名称为helloworld的一个项目,在该项目中包含该项目的源文件helloworld.cs;f#语言子目录中包含项目名称为fsworld的一个项目,在该项目中包含该项目的源文件help.fs。
在步骤S2之前,方法还包含:
采用平台的任一编程语言将对应的项目的源文件写入源文件目录中对应的语言子目录。
例如,在.NET平台上可以采用c#编写项目helloworld的源文件helloworld.cs;采用f#编写项目fsworld的源文件help.fs。
S2,读取每个项目的源文件,编译为具有属于平台的中间语言的中间文件存入目标子目录。
本实施例中,在.NET平台上将helloworld.cs、help.fs分别可编译为il中间语言的中间文件存入目标子目录target中。
S3,读取每个中间文件的元数据信息,并存入信息子目录info。
本实施例中,在.NET平台上读取每个具有il中间语言的中间文件的所有元数据信息,并将该元数据信息保存至信息子目录info。
S4,至少根据任一项目的命名空间信息,对信息子目录info中的所有元数据信息检索,获得对应项目的项目信息。
其中,项目信息包含:属于项目的所有类的信息、属于每个类的成员信息,类的信息包含项目的类与其他项目的类之间的引用关系信息。
步骤S4还包含:
根据任一项目的命名空间信息、至少一个类的名称,从信息子目录检索,得到项目的至少一个类的信息。
根据任一项目的命名空间信息、一个类的名称以及属于类中的至少一个成员名称,从信息子目录检索,得到项目的至少一个成员的信息。
本实施例中,可以利用一个项目的命名空间信息namespace,从信息子目录info中的所有元数据信息查找到与该项目相关的项目信息。
也可以利用一个项目的命名空间信息namespace、属于该项目的一个类的名称,从信息子目录info中的所有元数据信息查找到该类的信息。类的信息包含该类与其他项目中类之间的引用关系。
也可以利用一个项目的命名空间信息namespace、属于该项目的一个类的名称、该类中的一个或多个成员名称,从信息子目录info中的所有元数据信息查找到该成员的信息。
在步骤S4之后,本方法还包含:
将项目的类与其他项目的类之间的引用关系信息作为项目与其他项目之间的引用关系信息存入建立配置子目录build config内对应项目配置信息内。
具体实施例如下:
采用c#语言编写的项目如下:
采用f#语言编写的项目如下:
得出的dll分别为consoleapplication1.dll和library1.dll,位于目标子目录target中读取出来的il为:
其中元数据信息为:
F#:
class Library1.HelloClass
.property instance string Hello()
.property instance string X()
其中Library1.HelloClass是待检索的类名;hello和x是待检索的函数名C#:
class ConsoleApplication1.Program
.method private static void Main
其中ConsoleApplication1.Program是待检索的类名;main是待检索的函数名。
以上是实施例2公开的一种用于同平台具有不同编程语言项目的混合引用方法。首先,建立项目目录结构;其次,读取每个项目的源文件,编译为具有平台的中间语言的中间文件存入目标子目录;再次,读取每个中间文件的元数据信息,并存入信息子目录;最后,至少根据任一项目的命名空间信息,对信息子目录中的所有元数据信息检索,获得对应项目的项目信息。本实施例实现了确定每个项目中的任一类与其他编程语言编写的其他项目中的一个或多个类、同编程语言编写的其他项目中的一个或多个类之间的相互引用关系,便于开发人员进行实际检索。当被引用的类发生改变时,无需将该被引用的类编译成二进制包,而是直接将改变后的被引用类重新编译为具有平台的中间语言的中间文件存入目标子目录,采用修改后的该被引用类的元数据信息即可实现对该类进行重新引用。
实施例3
一种用于同平台具有不同编程语言项目的混合引用系统,混合引用系统包含:建立目录单元、编译器、中间语言读取器以及解释器。
其中,建立目录单元用于建立项目目录结构。编译器用于读取每个项目的源文件,编译为具有平台的中间语言的中间文件存入目标子目录。中间语言读取器用于读取每个中间文件的元数据信息,并存入信息子目录。解释器用于至少根据任一项目的命名空间信息,从信息子目录中的所有元数据信息检索,获得对应项目的项目信息。
如图2所示,本实施例中,项目目录结构内包含:信息子目录info、源文件目录src以及目标子目录target。其中,源文件目录src内包含至少两个语言子目录,每个语言子目录内包含至少一个项目,每个项目包含使用对应的编程语言编写的项目的源文件。
本实施例中,项目的项目信息包含:属于项目的所有类的信息、属于每个类的成员信息,类的信息包含项目的类与其他项目的类之间的引用关系信息。
实施例3公开的一种用于同平台具有不同编程语言项目的混合引用系统,采用建立目录单元、编译器、中间语言读取器以及解释器形成混合引用系统。首先,建立目录单元建立项目目录结构;其次,编译器读取每个项目的源文件,编译为具有平台的中间语言的中间文件存入目标子目录;再次,中间语言读取器读取每个中间文件的元数据信息,并存入信息子目录;最后,解释器至少根据任一项目的命名空间信息,从信息子目录中的所有元数据信息检索,获得对应项目的项目信息。本发明中,由于解释器从信息子目录中得到的是平台通用的中间语言信息,所以可以提供具有不同编译语言编译项目的同一种中间语言信息,从而达到了多种编译语言混合引用的效果。
实施例4
一种用于同平台具有不同编程语言项目的混合引用系统,混合引用系统包含:建立目录单元、编译器、中间语言读取器、解释器以及编程器。
其中,建立目录单元用于建立项目目录结构。编程器采用平台的任一编程语言将对应的项目的源文件写入源文件目录中对应的语言子目录。编译器用于读取每个项目的源文件,编译为属于平台的中间语言的中间文件存入目标子目录。中间语言读取器用于读取每个中间文件的元数据信息,并存入信息子目录。解释器用于至少根据任一项目的命名空间信息,从信息子目录中的所有元数据信息检索,获得对应项目的项目信息。
本实施例中,项目目录结构内包含:信息子目录info、源文件目录src、目标子目录target以及建立配置子目录build config。
其中,源文件目录src内包含至少两个语言子目录,每个语言子目录内包含至少一个项目,每个项目包含使用对应的编程语言编写的项目的源文件。建立配置子目录build config内包含至少一个项目配置信息,每个项目配置信息包含:项目的项目名称、使用的编程语言、使用的编程语言的版本、以及项目与其他项目之间的引用关系信息。目标子目录target内包含所有具有属于平台的中间语言的中间文件。信息子目录info内包含每个中间文件的元数据信息。
本实施例中,项目信息包含:属于项目的所有类的信息、属于每个类的成员信息,类的信息包含项目的类与其他项目的类之间的引用关系信息。
本实施例中,解释器还用于:
根据任一项目的命名空间信息、至少一个类的名称,从信息子目录检索,得到项目的至少一个类的信息。
根据任一项目的命名空间信息、一个类的名称以及属于类中的至少一个成员名称,从信息子目录检索,得到项目的至少一个成员的信息。
进一步,解释器还用于:
将项目的类与其他项目的类之间的引用关系信息作为项目与其他项目之间的引用关系信息存入建立配置子目录内对应项目配置信息内。
实施例4以实施例3为基础,公开的一种用于同平台具有不同编程语言项目的混合引用系统,采用建立目录单元、解释器、编译器、中间语言读取器以及解释器形成混合引用系统。首先,建立目录单元建立项目目录结构;其次,解释器采用平台的任一编程语言将对应的项目的源文件写入源文件目录中对应的语言子目录。再次,编译器读取每个项目的源文件,编译为具有平台的中间语言的中间文件存入目标子目录;第四,中间语言读取器读取每个中间文件的元数据信息,并存入信息子目录;最后,解释器至少根据任一项目的命名空间信息,从信息子目录中的所有元数据信息检索,获得对应项目的项目信息。本发明中,由于解释器从信息子目录中得到的是平台通用的中间语言信息,所以可以提供具有不同编译语言编译项目的同一种中间语言信息,从而达到了多种编译语言混合引用的效果;并且便于开发人员利用解释器检索到任一项目中一个或多个类与其他项目中的类之间的引用关系;同时当被引用类发生改变时,编译器直接将改变后的被引用类重新编译为具有平台的中间语言的中间文件存入目标子目录,采用修改后的该被引用类的元数据信息即可实现对该类进行重新引用。
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这些仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。