对象级别兼容性和使用语义值的类大小调整制造技术

技术编号:7465361 阅读:267 留言:0更新日期:2012-06-27 01:54
一种在计算设备上将以高级语言编写的软件代码转换成二进制对象的方法,包括在计算设备上接收以高级语言编写的软件代码,以及在计算设备上将软件代码翻译成二进制对象文件。翻译包括确定软件代码包括需要被硬编码到二进制对象中的值的感兴趣的项,并且类是可调整大小的,以及创建语义变量表示硬编码值,并将语义变量和硬编码值存储在二进制对象中的表中。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及为计算机系统创建可执行程序,并且更具体地,涉及通过使用语义值来翻译软件代码。
技术介绍
计算机程序通常由被称为二进制对象的一个或多个组件构成。每个二进制对象代表可执行代码或模块(其组成了它作为组件的程序)的一部分。二进制对象通常由将以更高级语言编写的软件代码转换成二进制对象的编译器(也被称为翻译器)产生。二进制对象然后链接在一起,组成完整的可执行程序。完成这项任务的软件工具被称为链接器。在程序能够运行之前,其必须被装载到计算机存储器内。完成这项任务的操作系统的组件被称为程序装载器。由于各种原因,一些程序组件可能不用链接器被链接到程序。 相反这些组件被装载器添加到可执行文件。这些组件通常被称为共享对象、共享库或动态装载的库。将程序分割为多个二进制对象的好处之一是模块化。能够改变对应于一个二进制对象的源代码而不需要改变每个其它的二进制对象。具体地,仅仅是其源代码发生了改变的二进制对象需要使用编译器被再次翻译。未被影响的模块,包括共享库,不需要被重新翻译。在当代操作系统(包括但不限于AIX、Linux、Windows、和Z/0S)中普遍使用的链接器/装载器技术是在常用的面向对象编程语言出现之前设计的。这样,这些语言引入了当今可用的模块化类型不能很好地解决的新的复杂性。具体地,在面向对象的编程员的日常工作中通常产生的一些活动要求整个程序被重翻译,而不仅仅是直接受影响的二进制对象。这些活动可包括但不限于添加虚拟函数到类接口 ;从类接口移除虚拟函数;把虚拟函数作为基本类接口的因子;添加数据成员到类接口 ;以及添加新的基本类到现有的类。不重新编译程序的所有构成二进制对象,包括其共享库,就无法进行这些活动,这是一个巨大的限制。单个共享库可以被很多独立的应用程序使用。因此,如果任何这些改变在共享库中做出,则共享库作为其组件的每个应用程序必须被重翻译(重编译)。这往往不可能,因为应用程序的用户不是熟练的编程人员,不拥有合适的软件工具或不能访问程序源代码。另外,用户无法控制模块向将来或从过去的开发中链接。因此,共享库的作者在他们能够对于其软件进行的各种改变方面严格受约束。在一些情况下,这些约束使得不能修补甚至很简单的缺陷。这在文献中被称为版本间二进制兼容性(RRBC)问题。
技术实现思路
根据本专利技术的一个实施例,公开了一种在计算设备上将以高级语言编写的软件代码转换成二进制对象的方法。该实施例包括在计算设备上接收以高级语言编写的软件代码;以及在计算设备上将软件代码翻译成二进制对象文件。翻译包括确定软件代码包括需要被硬编码到二进制对象中的值的感兴趣的项,并且类是可调整大小(resizable)的。本实施例中的翻译还包括创建语义变量来表示硬编码值,并将语义变量和硬编码值存储在二进制对象中的表中。本专利技术的另一实施例涉及一种从多个二进制对象创建可执行程序的方法。该实施例的方法包括在计算设备处接收第一组多个二进制对象,至少一个二进制对象包括语义变量表,语义变量代表需要硬编码值的至少一个值的硬编码值,并且将第一组多个二进制对象链接在一起,以及用至少一个表中的硬编码值替换至少一个二进制对象中的语义变量。 该方法还包括将第一组多个二进制对象装载到计算设备中,与一个或多个另外的二进制对象相结合来操作。另外的特征和优点通过本专利技术的技术来实现。本专利技术的其他实施例和方面在此处详细描述,并且认为是所要求保护的专利技术的一部分。为了更好地理解本专利技术的优点和特征, 参考说明书和附图。附图说明被视为本专利技术的主题在说明书结束部分的权利要求中被特别地指出并被清楚地要求保护。本专利技术的前述的和其他特征以及优点能结合附图从以下详细描述中清楚地看到,其中图1是根据本专利技术实施例的计算设备的系统图表;图2是显示本专利技术实施例执行的处理的示例的数据流图;图3示出了根据本专利技术实施例的翻译方法;图4示出了根据本专利技术实施例的链接二进制对象的方法。具体实施例方式本专利技术实施例涉及编译器-链接器-装载器系统,其中通常被编译器写入二进制对象的特定值被此后由链接器或装载器写入的变量和值所替换。这样的一种系统对于以例如C或C++的高级编程语言编写的程序尤其有用。当然本专利技术不仅仅限于以C或C++编写的程序,并且可以用于以其他语言编写的程序。传统C++实现方案在翻译器执行期间(也就是在编译时)计算下述项任何类类型的大小;任何数据成员在类中的偏移;以及任何虚拟函数指针在类的虚拟表(虚函数表或等同物)中的偏移。这些值由翻译器写入对象文件。在本专利技术中,翻译器替代地创建包含链接到这些值的变量的表。所述变量,而非所述值,被写入对象中,并且由链接器或装载器使用所述变量来访问所述表以代替所述值。因此,仅仅那些改变了上述项的定义的对象文件需要被重新编译,而不是程序的所有部分。图1显示了计算系统的例子,在其上可以实现本专利技术的实施例。应当理解的是,系统可以是分布式的,并且以下描述的系统各部分可以存在于彼此不同的物理位置处。在该实施例中,系统100具有一个或多个中央处理单元(处理器)101a、IOlbUOlc 等(共同地或一般性地称为处理器101)。在一实施例中,每个处理器101可以包括精简指令集计算机(RISC)微处理器。处理器101通过系统总线113耦接到系统存储器114以及各种其他组件。只读存储器(ROM) 102耦接到系统总线113,并且可包括基本输入/输出系5统(BIOS),其控制系统100的特定基本功能。图1还描述了输入/输出(I/O)适配器107和耦接到系统总线113的网络适配器 106。I/O适配器107可以是小型计算机系统接口(SCSI)适配器,其与硬盘103和/或磁带存储驱动器105或任何其他类似组件通信。I/O适配器107、硬盘103和磁带存储驱动器 105此处共同地称为大容量存储器104。网络适配器106将总线113与外部网络116互连, 使得数据处理系统100能够与其他这种系统通信。屏幕(例如显示监视器)115通过显示适配器112连接到系统总线113,显示适配器112包括用以提高图形密集应用的性能的图形适配器和视频控制器。在一实施例中,适配器107、106和112可以连接到一个或多个I/O总线,后者通过中间总线桥(未显示)连接到系统总线113。用于连接例如像硬盘控制器、网络适配器和图形适配器的外围设备的合适的I/O总线通常包括常见协议,例如外围元件接口(PCI)。附加的输入/输出设备被示出为通过用户接口适配器108和显示器适配器112 连接到系统总线113。键盘109、鼠标110和扬声器111都通过用户接口适配器108互连到总线113,用户接口适配器108包括例如将多个设备适配器集成在单个集成电路中的超级 I/O芯片。这样,如图1所配置的,系统100包括处理器101形式的处理装置、包括系统存储器114和大容量存储器104的存储装置、例如键盘109和鼠标110的输入装置,以及包括扬声器111和显示器115的输出装置。在一实施例中,系统存储器114和大容量存储器104 的一部分共同地存储一操作系统,例如来自IBM 公司的AIX 操作系统以协调图1中所示的各个组件的功能。应当理解,系统100可以是任何合适的计算机或计算平台,并且可以包括终端、无线设备、信息电器、设备、工作站、微型计本文档来自技高网
...

【技术保护点】

【技术特征摘要】
【国外来华专利技术】...

【专利技术属性】
技术研发人员:F·A·冈多尔菲R·M·N·克拉雷尔
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术