描述了用于扩充配置相关可扩充软件程序的方法和系统。可以通过添加配置相关扩展来扩充核心可扩充软件程序的类。扩展可在编译软件程序的核心版本之前静态地添加,或者在运行时刻动态地添加。可扩充核心类的声明可包括具有该类是静态可扩充还是动态可扩充的指示的可扩充属性。也描述了用于适当地声明配置相关可扩充类的对象描述语言。也描述了用于处理该对象描述语言来生成可扩充类声明及其扩展的源代码表示的预处理器。源代码表示然后可以用来生成核心软件程序的扩充版本。
【技术实现步骤摘要】
涉及可扩充软件系统,尤其涉及可扩充类的使用。
技术介绍
由于多编程语言、多样的处理器以及多操作系统环境的不断增加,计算的领域每一天都在变得越来越复杂。现在有许多具有特殊能力的编程语言(如,C++、Java、C#)可用来向程序员在编写各种计算任务的程序中提供特殊的优点。类似地,有各种处理器(如X86、IA-64、AMD等等)可用来对执行特定的任务提供特殊的优点。例如,嵌入式处理器尤其适合处理电子设备内较好地定义的任务,而诸如IntelPentium处理器的通用处理器更为灵活且能够处理复杂的任务。因此,计算环境、配置和设备的多样性正在增加。对多样性的增加的需求将构建编译程序的已高度复杂的领域复杂化。传统地,书写编译程序来编译以特定源代码语言书写的软件,并以特定类型的处理器体系结构(如IA-64、X86、AMD、ARM等等)为目标。近来,引入了翻译程序,将以多源代码语言书写的程序转换为单个中间语言表示(如,CIL(C++中间语言)和MSIL(用于.NET的Microsoft中间语言))。然而,改变若干不同类型的目标体系结构中的一个源代码程序的编译的目标仍是复杂且耗时的。减小对诸如多语言和多目标的多软件开发情形构建编译器和其它软件开发工具(如,分析工具、优化器)的复杂性的一个合适的方法是开发一个可扩充核心基础结构或框架,可以向其添加软件扩展来构建特殊配置的编译器和其它软件开发工具。例如,如果用户想要构建为特定目标体系结构配置的及时(JIT,运行时编译执行的技术)编译器,可以通过重新使用核心编译器框架的代码并使用对JIT编译器类型情形特定的代码添加扩展来生成JIT编译器以简化他或她的任务。对其它软件开发工具,如优化工具、分析工具、性能工具、测试工具等等,也可以设想同一方法。使用这一可扩充核心编译器和工具框架来构建这一定制编译器和其它软件开发工具并是没有其自己的复杂性集合。这对根据要构建的语言、目标体系结构和编译器类型(如,JIT、预JIT、本地优化编译器)可以以多种不同的方法配置来反映多种不同软件情形的可扩充编译器和工具框架来说尤为真实。一个这样的复杂性涉及以可扩充方式定义核心框架的数据结构(如,面向对象语言中的对象类),使能够添加依赖于多个不同软件情形的扩展域来扩充核心框架的数据结构。能够使用向类定义添加扩展域的传统技术,但是这仅以由降低的性能和增加的代码复杂度所付出的重大代价来实现,导致增加的开发和维护成本。因此,需要一种简单而有效的方法,使用依赖于多个不同的可能的软件开发情形的多个不同类扩展来扩充核心框架软件系统的对象类。
技术实现思路
这里描述了通过提供配置相关扩充类来扩充软件程序的方法和系统。在一个方面,可以提供并添加依赖于各种软件开发情形的类扩展来扩充核心类。可以组合各种类扩展来开发特别配置的类。在一个方面,可以将核心软件程序的类定义为静态或动态可扩充。如果核心类被声明为静态可扩充,可以生成组合核心类定义及其相应的类扩展的头文件,并对它们进行共同编译来生成扩充类。可以使用这一扩充类来以配置相关方式扩充核心软件程序。然而,如果核心类被声明为运行时刻动态可扩充,则可以生成包括该核心类声明的单独的头文件和包括扩展声明的单独文件。然后分开编译对应于核心类的头文件和对应于类扩展的文件来生成计算机可执行文件,其相互之间有连接,使能够在运行时刻添加类扩展来扩充核心类。在另一方面,可以在核心类声明中提供扩充点,来特别指示核心类声明中应当注入类扩展的点。这里也描述了用于定义可扩充类和类扩展的采用合适语法的对象描述语言。这里还描述了能够以对象描述语言接收输入并以源代码表示生成输出来生成软件程序的扩充版本的预处理器程序。在另一方面,该预处理器能够以最终能够被编译为可由计算机执行的形式的任一语言生成输出。附图说明图1所示是示例性配置相关可扩充核心软件框架的结构图。图2A所示是在示例性面向对象编程语言中实现为类和对象的数据结构的结构图。图2B所示是可扩充核心软件程序的类及其相应的扩展之间的关系的结构图。图3A所示是通过添加类扩展来扩充类定义的总方法的流程图。图3B所示是生成核心软件程序的配置相关扩充版本的总方法的流程图。图4A所示是核心软件框架的扩充版本的结构图,其中,该扩充在编译时刻之前静态地实现。图4B所示是核心软件程序的扩充版本的结构图,其中,该扩充在运行时刻动态地实现。图5所示是用于静态地扩充核心软件程序的方法的流程图。图6所示是如图5所示静态地扩充核心软件程序的系统的结构图。图7所示是用于动态地扩充核心软件程序的方法的流程图。图8所示是如图7所示动态地扩充核心软件程序的系统的结构图。图9A所示是对象描述语言中静态可扩充核心类的核心类声明的清单。图9B所示是对图9A的静态可扩充核心类声明的两个类扩展的清单。图9C所示是通过将图9A的核心类声明与图9B的类扩展相关联而生成的扩充类声明的源代码表示的清单。图10A所示是对象描述语言中动态可扩充核心类的核心类声明的清单。图10B所示是对图10A的动态可扩充核心类声明的扩展的清单。图10C所示是通过将图10A的核心类声明与图10B的类扩展相关联而生成的扩充类声明的源代码表示的清单。图11A所示是指示用于注入类扩展的扩展点的核心类声明的清单。图11B所示是对图11A的核心类定义的扩展的清单。图12所示是依照多个软件开发情形构造软件开发工具的示例性实现的结构图。具体实施例方式示例性软件开发工具尽管这里描述的多种技术已经通过使用编译器的示例初步地说明,然而可以结合其它软件开发工具(如调试器、优化器、反汇编器、仿真器以及软件分析工具)使用这些技术的任一种。可扩充软件开发工具框架图1说明了可以被扩充来构建多个不同配置的自定义编译器和其它软件开发工具来反映多个软件开发情形的示例性核心软件框架。核心110提供了可用作构建块来构建定制软件开发工具111-114的可扩充体系结构。可以通过添加与一个或多个软件开发情形相关的软件扩展来扩充核心110软件。例如,可以通过向核心110提供软件扩展来构建以IA-64处理器121为目标的JIT(及时)编译器111。在这一情况下,编译器为JIT编译器111并且以特定的处理器体系结构(121的IA-64处理器)为目标的事实可以确定对核心110的软件扩展的形式和内容。由此,可以使用与JIT编译器情形和IA-64目标情形相关的软件扩展来指定用于构建定制软件开发工具的配置。其它情形因素,如源语言101-104以及可以基于特定软件开发情形而开启或关闭的工具的特征,也可能通过扩充诸如图1所示的标准核心框架向构建自定义软件开发工具的任务添加复杂度。示例性软件开发情形有许多软件开发情形影响要结合进核心框架110的软件扩展的选择。例如,特定软件开发工具的软件开发情形可包括该工具将用作目标的各种处理器体系结构(如IA-64、X86、AMD、ARM等等)。软件开发情形也可以与执行的编译类型(如,JIT、预JIT、本地优化编译器)相关。软件开发情形也可以与由软件开发工具执行的其它类型的功能,如分析、优化、仿真、调试、代码生成等等的类型相关。另一软件开发情形可以与特定的编程语言(如Java、C++、C#等等)相关,软件开发工具可以特别地为这些编程语言配置。本文档来自技高网...
【技术保护点】
一种生成以面向对象编程语言书写的软件的扩充版本、其通过多个对软件的扩展来提供对象类的方法,其特征在于,所述方法包括:接收包括对要通过所述软件的扩充版本实现的相应软件开发情形的扩展的多个软件开发情形类扩展集的调用;以及如所述扩 展所指示的扩充所述软件的一个或多个类。
【技术特征摘要】
...
【专利技术属性】
技术研发人员:J伯格,DR小塔迪蒂,CL米切尔,AE艾尔斯,VK格罗弗,
申请(专利权)人:微软公司,
类型:发明
国别省市:US[美国]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。