当前位置: 首页 > 专利查询>微软公司专利>正文

在编译过程中表示和检查程序组件的一致性的可扩展类型系统技术方案

技术编号:2920118 阅读:216 留言:0更新日期:2012-04-11 18:40
提供了用于各种形式的中间语言校验的一致性的类型表示、类型检查器和编译器。在编译器中对编程语言进行类型检查是通过取一个或多个规则集作为对类型检查器的输入来实现的,类型检查器基于多个准则中的任一个或两个或多个的组合来选择一个或多个规则集。它们之中有编译阶段、源语言、体系结构以及进行类型检查的语言中存在的类型化级别。语言然后使用所选择的一个或多个规则集来进行类型检查。规则集可包括对应于强类型检查的一个规则集、对应于弱类型检查的一个规则集、以及对应于表示类型检查的一个规则集。作为替换,可提供具有基于先前提到的准则的的任一个,或两个或多个的组合从一较大的规则集在运行时选择一个或多个规则集的类型检查器的编译器。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及类型系统,尤其涉及可扩展到新的和经更新的编程语言的类型系统。背景类型系统是在编程语言中用于协助检测和防止运行时出错的系统。如果编程语言包含一组对于诸如变量、函数等对象声明的类型,且这些类型在以该语言编写的程序的编译期间对照一组规则来检查,则该编程语言是“类型化的”。如果以类型化语言编写的源代码违反了类型规则之一,则确定为编译器错误。用于编译器的类型化的中间语言在过去几年中经受了研究团体的大量研究。它们增强了编译器的可靠性和健壮性,以及提供了一种跟踪和检查无用信息收集器所需的信息的系统方法。其概念是具有一种在其上附加了类型且可以用类似于源程序的类型检查的方式来进行类型检查的中间表示。然而,类型化的中间语言更难以实现,因为在编译过程中把表示项的类型变得明确是必要的。如果类型化的中间语言必须表示多个不同的高级编程语言,则它甚至更难以实现。不同的语言不仅具有不同的原语操作和类型,而且高级编程语言具有不同的类型化级别。例如,诸如汇编语言等某些语言一般是非类型化的。换言之,它们没有类型系统。在类型化的语言中,某些是强类型化的,而其它是更松散地类型化的。例如,C++是一般被认为松类型化的语言,而ML或Pascal被认为是强类型化的语言。此外,松类型化的某些语言具有较小的语言子集,这些子集允许程序内的大部分代码段是强类型化的,而其它代码段是松类型化的。例如,C#和.NET中使用的微软中间语言(MSIL)允许这一类型化。因此,用于表示这些高级语言的任一种的类型化的中间语言必须能够表示不同的类型强度。同样,这一类型化的中间语言的类型系统必须能够根据进行类型检查的代码的特征来实现不同的规则。当贯穿整个编译过程降级类型化的中间语言时,会引发另一问题。语言的降级指的是将语言的形式从诸如程序员所编写的较高级形式改为诸如中间语言等较低级形式的过程。语言然后可从中间语言进一步降级到诸如机器相关的本机代码等接近于计算机执行的级别。为在编译过程中对被降级到不同级别的中间语言进行类型检查,必须对每一表示使用一组不同的规则。创建类型化的中间语言的尝试通常无法解决上述问题。例如,Cedilla System的Special J编译器使用了一种类型化的中间语言。然而,这一编译器对于Java源语言是专用的,且因此不需要处理例如具有非类型安全代码的多种语言。另外,该编译器仅使用一组规则用于类型检查,且因此不能用于多个编译级别。在研究团体中,类型化的中间语言往往对源语言是高度专用的,因此难以为多个编译阶段工程实现(以及设计类型)。概述提供了一种用于检查各种形式的中间语言的一致性的类型表示、类型检查器、方法和编译器。具体地,类型化的中间语言适用于表示以多种(完全不同的)源语言编写的程序,这些源语言包括类型化的和非类型化的语言、松和强类型化的语言、以及带有和不带有无用信息收集的语言。另外,该类型检查器体系结构是可扩展的,以处置具有不同类型和原语操作的新语言。类型表示、类型检查器、方法和编译器包括各个方面。各个方面可分开且独立地使用,或者各个方面可以按各种组合和子组合来使用。在一方面,提供了一种在编译器中对编程语言进行类型检查的方法。取一个或多个规则集作为对类型检查器的输入,类型检查器基于多个准则中的任何一个,或两个或多个的组合选择规则集中的一个或多个。在它们之中的是编译阶段、源语言、体系结构以及进行类型检查的语言中存在的类型化级别。语言然后使用所选择的一个或多个规则集进行类型检查。在另一方面,提供了一种带有类型检查器的编译器,类型检查器基于多个准则中的任何一个,或两个或多个的组合构造一个或多个规则集。规则集可包括对应于强类型检查的一个规则集、对应于弱类型检查的一个规则集、对应于表示类型检查的一个规则集。弱规则集可允许类型化中的更多灵活性,诸如允许类型强制转换,而表示规则集可允许在中间程序表示的各部分中丢弃的类型信息。在另一方面,提供了一种用于构造用于检查程序的中间表示的一致性的多个规则的编程接口。检查中间表示的一致性可包括向类型检查器提供多个规则,类型检查器基于预定准则向一个中间表示应用第一组规则,以及向另一中间表示应用第二组规则。当参考附图阅读以下详细描述,可以清楚这些和其它方面。附图简述附图说明图1是通用编译过程的流程图。图2是示出将源代码语句转换成高级表示,然后转换成机器相关的低级表示的表清单。图3是示出用于在各个编译阶段对类型化的中间语言进行类型检查的编译器系统的一个实施例的数据流程图。图4是用于编译器系统的类型检查器的框图。图5是用于选择要由类型检查器应用的规则集的一种可能的过程的流程图。图6是示出类型之间的分层关系的有向图。图7是示出将类型添加到类型之间的分层关系的有向图。图8是用于对照类型检查系统中的类型规则检查指令的方法的流程图。图9是担当类型检查系统的一个实施例的操作环境的计算机系统的示例的框图。详细描述提供了用于检查各种形式的中间语言的一致性的类型表示、类型检查器和编译器。类型检查器和编译器允许根据编程组件和/或编译阶段的源语言使用不同的类型和类型检查规则。例如,可能期望将高级优化器应用于以各种语言编写的程序。这些语言可具有不同的原语类型和原语操作。例如,一种语言可以包含用于复杂算术的类型和操作,而另一种语言可包含对计算机图形专用的类型和操作。通过允许由不同的类型系统来参数化中间表示,优化器可用于具有不同原语类型和操作的语言。另一示例可包括其中某些组件以强类型化的语言子集来编写,而其它组件以非类型安全的完全语言来编写的程序。期望对于第一组组件进行更多的检错。这可以通过对不同的组件使用不同的类型检查规则来实现。又一示例是在编译期间丢弃类型信息。类型检查器和编译器可允许在较晚的阶段丢弃类型信息,而可在较早的阶段强迫维护精确的信息。这可以通过对不同的编译阶段结合不同的类型检查规则使用未知类型来实现。图1示出了使用具有不同降级级别的类型化的中间语言来表示多种不同的源语言的系统的通用编译过程。源代码100-106是以四种不同的源语言来编写的,这些源语言可以是类型化或不是类型化的,且具有不同的类型强度级别。例如,以C#编写的源代码100将比以C++编写的源代码106更强地类型化。源代码首先由读取器108处理并进入系统。源语言然后被翻译成类型化的中间语言的高级中间表示(HIR)。HIR然后可在框110被可任选地分析并优化。HIR然后被翻译成类型2化的中间语言的中级中间表示(MIR)。该表示低于HIR,但是仍是机器无关的。在这一点上,MIR可如框112所示被可任选地分析并优化。MIR然后由代码生成在框114翻译成类型化的中间语言的机器相关的低级表示(LIR)。LIR然后可在框116被可任选地分析并优化,并在框118被提供给发放器。发放器将以表示读入系统的原始源代码的多种格式120-126中的一种输出代码。贯穿整个过程,完成过程所必需的数据被储存在某一形式的持久存储器128中。由此,该编译过程包括将中间语言指令从一个表示级别翻译成另一表示级别。例如,图2示出将源代码语句转换成HIR,以及将HIR转换成机器相关的LIR。源代码语句200可以用多种高级编程语言来编写。这些语言被设计成允许程序员以容易理解的方式读写代码。由此本文档来自技高网...

【技术保护点】
一种依照一个或多个规则集在编译器中对编程语言进行类型检查的方法,包括:基于当前编译阶段选择所述规则集的一个或多个;以及基于所选择的一个或多个规则集对所述编程语言进行类型检查。

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

【专利技术属性】
技术研发人员:MR普莱斯科小DR塔迪提
申请(专利权)人:微软公司
类型:发明
国别省市:US[美国]

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

1