编译方法、编译装置及编译程序制造方法及图纸

技术编号:2921181 阅读:205 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种编译方法、编译装置及编译程序。该编译方法是一种程序员没有必要有意识地使用引用传递来进行编程,即使在使用了值传递的情况下代码生成效率也很高的编译方法,包括:中间代码生成步骤,由源程序生成中间代码;优化步骤,在没有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将调用具有上述值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数,由此优化上述中间代码;以及目标代码转换步骤,将优化了的上述中间代码转换为目标代码。

【技术实现步骤摘要】

本专利技术涉及一种编译方法,特别涉及将由以C++语言为代表的面向对象语言描述的源程序转换为目标程序的编译方法。
技术介绍
近年来,在软件开发方面,程序规模逐渐大规模化,与此同时,维护性、再利用性高的面向对象语言(Object-oriented 1anguage)正在受到关注。有代表性的面向对象语言可以列举出C++语言。C++语言是对作为移植性优异的高级语言的C语言进行形式扩展,以便以面向对象的方式自然地进行描述的语言。在C++语言中,能在程序中定义函数,在必要的位置调用该函数,从而执行由函数定义的处理。给函数赋予自变量时,赋予自变量的方法有“值传递”和“引用传递(指针传递)”。在现有的C++语言中,给函数赋予自变量时,在生成所赋予的自变量的副本之后,该副本存储在存储器中。值传递时,在传递的对象作为自变量全部被复制之后,副本存储在存储器中。例如,在对象为分类目标时,首先执行生成该分类目标的副本的处理,然后所生成的分类目标存储在存储器中。另一方面,在引用传递时,对象是指针值(目标的地址值),因此该指针值被复制并存储在存储器中。根据Scott Meyers著、吉川邦夫译“Effective C++修订第2版”,ASUKI,1998年5月1日,22项“与值传递相比,若使用引用传递”(以下,称为相关文献。),则值传递中的分类目标的副本,有可能暗中引起许多复制构造程序的调用,因此能成为编译结果的代码量增加的原因。另外,一般来讲,与值传递相比,使用引用传递(passby reference/リフアレンス渡し)时代码生成效率高。因此,重要的是程序员尽可能有意识地使用引用传递来进行编程。但是,相关文献所记载的内容,明确指出程序员应该从头到尾有意识地使用引用传递来进行编程,这无非是强迫程序员进行考虑了代码生成率的编程。另外,使用引用传递时,有可能引起别名使用问题(为了对相同的目标使用多个名字,存在无意识地改变目标的状态的危险性的问题)。这样,存在程序中容易混入程序错误(bug)的问题。
技术实现思路
本专利技术是鉴于这样的课题而做出的,目的在于提供一种编译方法,程序员没有必要有意识地使用引用传递进行编程,即使是使用值传递进行编程时,代码生成率也很高。本专利技术所涉及的编译方法,是将用高级语言描述的源程序转换为目标代码的编译方法,包括以下步骤中间代码生成步骤,由源程序生成中间代码;优化步骤,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将自变量的值传递转换为引用传递,由此优化上述中间代码;以及目标代码转换步骤,将优化了的上述中间代码转换为目标代码。根据该方法,即使程序员用值传递编写程序,也能转换为引用传递的程序。因此,程序员没有必要有意识地使用引用传递进行编程。这样,对于程序员,不用强迫进行考虑代码生成率的编程,并且程序中也难以混入错误。优选上述优化步骤,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将调用具有上述值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数,由此优化上述中间代码。另外,上述优化步骤包括值传递自变量更新信息抽取子步骤,从上述中间代码中抽取值传递自变量更新信息,该值传递自变量更新信息至少包括具有值传递自变量的函数、直接调用具有该值传递自变量的函数的函数、有可能间接调用具有该值传递自变量的函数的函数、具有该值传递自变量的函数的值传递自变量、以及表示该值传递自变量在具有值传递自变量的函数的定义内是否已被更新的更新判断信息;以及转换子步骤,根据上述值传递自变量更新信息,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将调用具有值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数。另外,优选在上述转换子步骤中,在没有强制地使调用具有上述值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数的指定的情况下,根据上述值传递自变量更新信息,在没有有可能间接调用具有上述值传递自变量的函数的函数、并且上述值传递自变量在具有值传递自变量的函数的定义内未被更新的情况下,将直接调用具有上述值传递自变量的函数的函数转换为直接调用具有引用传递自变量的函数的函数。根据该方法,具有值传递自变量的函数,在定义内未更新自变量时,能删除作为冗余的函数调用侧的副本生成代码。因此,能生成高效的代码。另外,优选在上述转换子步骤中,在有强制地使调用具有值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数的指定的情况下,对于有该指定的具有值传递自变量的函数,根据上述值传递自变量更新信息,将直接地调用具有上述值传递自变量的函数的函数和有可能间接调用具有上述值传递自变量的函数的函数,分别转换为直接调用具有引用传递自变量的函数的函数和有可能间接调用具有引用传递自变量的函数的函数。根据该方法,具有值传递自变量的函数在定义内更新了自变量的情况下,也能删除作为冗余的函数调用侧的副本生成代码,能生成高效的代码。更优选上述优化步骤,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递,由此优化上述中间代码。并且,上述优化步骤包括值传递自变量更新信息抽取子步骤,从上述中间代码中抽取值传递自变量更新信息,该值传递自变量更新信息至少包括具有值传递自变量的函数、直接调用具有该值传递自变量的函数的函数、有可能间接调用具有该值传递自变量的函数的函数、具有该值传递自变量的函数的值传递自变量、以及表示该值传递自变量在具有值传递自变量的函数的定义内是否已被更新的更新判断信息;以及转换子步骤,根据上述值传递自变量更新信息,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递。更优选在上述转换子步骤中,在没有强制地使基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递的指定的情况下,根据上述值传递自变量更新信息,在没有有可能间接调用具有上述值传递自变量的函数的函数、并且上述值传递自变量在具有值传递自变量的函数的定义内未被更新的情况下,将基于具有上述值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递。根据该方法,在具有值传递自变量的函数在定义内未更新自变量的情况下,对具有值传递自变量的函数定义中的自变量的存取成为与具有引用传递自变量的函数定义同样的存取,因此能生成高效的代码。更优选在上述转换子步骤中,在有强制地使基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递的指定的情况下,对于有该指定的具有值传递自变量的函数,根据上述值传递自变量更新信息,将基于具有上述值传递自变量的函数的值传递而进行的自本文档来自技高网
...

【技术保护点】
一种编译方法,将用高级语言描述的源程序转换为目标代码,其特征在于,包括以下步骤:中间代码生成步骤,由源程序生成中间代码;优化步骤,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函 数的定义内未被更新的情况下,将自变量的值传递转换为引用传递,由此优化上述中间代码;以及目标代码转换步骤,将优化了的上述中间代码转换为目标代码。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:浅尾忍
申请(专利权)人:松下电器产业株式会社
类型:发明
国别省市:JP[日本]

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

1