对合同的操作系统支持技术方案

技术编号:12511417 阅读:58 留言:0更新日期:2015-12-16 08:57
前端编译器将源代码编译成中间代码,该中间代码之后被编译成二进制代码。源代码定义执行作用域并包括合同。当在执行作用域的运行时遇到合同时,对该执行作用域的进一步执行以与该合同相关联的断言是否为真作为条件。前端编译器操作以便保留合同从而使该合同在语义上继续被结构化,以使得可以从中间语言代码去除该断言。该合同可因此继续被合同的语义分析所理解。因此,该断言可以被操作中间代码的静态分析工具理解。

【技术实现步骤摘要】
【国外来华专利技术】背景计算机和计算系统已经影响了现代生活的近乎每一个方面。计算机通常涉及工作、休闲、医疗保健、运输、娱乐、家政管理等。计算机功能通常是计算系统执行软件代码的结果。非常大部分的现代软件代码旨在发现错误状况、报告错误状况和从错误状况中恢复。在现实世界场景中,错误状况相对罕见并且通常难以模拟,然而程序员投入了大量的资源来处理它们。在软件系统内,差错恢复代码中存在与这些系统中的全部代码相比不成比例的隐错数。这与以下事实直接相关:错误状况通常难以模拟且因此在消费者遇到该领域的底层问题之前通常未被测试。不合适的错误恢复逻辑可导致复合错误,并最终导致崩溃和数据破坏。常规的软件系统混合有不同类型的错误状况,并提供单个机制来处理这些错误状况。这种一致性表面上很吸引人,因为它允许开发者以单个一致的方式为系统推理出错误状况。不幸地是,这种一致性使错误的定性差异模糊。此处要求保护的主题不限于解决任何缺点或仅在诸如上述环境这样的环境中操作的各实施例。相反,提供该背景仅用于例示其中可实现所述一些实施例的一个示例性
概述根据本文描述的至少一个实施例,描述了一种系统,其中前端编译器将源代码编译成中间代码。中间代码之后可被编译成二进制代码。源代码包括合同检查。当在执行作用域的运行时遇到检查时,对该执行作用域的进一步执行以与合同相关联的断言(predicate)是否为真作为条件。如果断言不是真的,则执行作用域不再运行。例如,如果执行作用域是程序,则该程序将放弃而不运行内部错误恢复逻辑。可任选地,可以运行外部错误恢复逻辑。前端编译器操作以便保留合同检查从而使该检查在语义上继续被结构化,以使得该检查可以继续被程序的语义分析理解。因此,该检查可以被操作中间代码的静态分析工具理解。例如,静态分析代码可以是基于中间代码生成二进制码的后端编译器。一类分析可以是确定与合同检查相关联的断言是否在所有条件下为真,以及在运行时处使检查的执行居先。另一类分析可以是确定与检查相关联的执行是否在特定条件下为真(诸如,执行组件被另一组件调用),以及当满足该条件时在运行时处使检查居先。另一类分析可以是确定与检查相关联的断言将总是为假,以及警告编程者该程序包含隐错。可以操作中间代码的其他类型的静态分析器包括重构工具、验证工具、自动化文档生成器等。本概述不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的作用域。附图简述为了描述可以获得本专利技术的上文所列举的及其他优点和特征的方式,下面将通过参考附图来呈现对各实施例的更具体的描述。可以理解,这些附图只描绘了示例实施例,并且因此不被认为是对其作用域的限制,将通过使用附图并利用附加特征和细节来描述和解释各实施例,在附图中:图1抽象地示出可在其中采用本文所述的一些实施例的计算系统;图2示意性地示出了其中以源代码中所表达的合同和声明(即,合同检查)在语义上被保留的方式并且以维持源代码中所表达的行为的方式将源代码编译成中间语言代码的环境;图3A示出了其中执行流到达具有处于前置条件形式的合同的组件的环境,并且示出了如果不满足该前置条件的可能的快速失败;图3B示出了其中执行流到达具有处于后置条件形式的合同的组件的环境,并且示出了如果不满足该后置条件的可能的快速失败;图4A示出在源代码中或中间语言代码中表达的潜在组件调用的链,其中每个组件具有处于前置条件形式的合同;图4B示出以二进制代码表达的潜在组件调用的链,其中执行流已经被优化以去除一些合同检查并包括针对有条件地要求检查该合同的组件的多个入口点;图5A示出从传送进程的角度来看用于促成进程间通信的方法500A的流程图;图5B示出从接收进程的角度来看用于促成进程间通信的方法500A的流程图;以及图6示出了其中可存在进程间通信的环境。详细描述根据本文描述的各实施例,描述了一种系统,其中前端编译器将源代码编译成中间代码。中间代码之后可被编译成二进制代码。源代码包括合同。当在执行作用域的运行时遇到合同时,对该执行作用域的进一步执行以与该合同相关联的断言是否为真作为条件。如果断言不是真的,则执行作用域不再运行。例如,如果执行作用域是程序,则该程序将放弃而不运行内部错误恢复逻辑。可任选地,可以运行外部错误恢复逻辑。前端编译器运行以便保留合同从而使该合同在语义上继续被结构化,以使得该合同可以继续被合同的语义分析理解。因此,该合同可以被操作中间代码的静态分析工具理解。此类静态分析工具可以包括后端编译器、重构工具、验证工具、自动化文档生成器,等等。将参考图1来描述对计算系统的一些介绍性讨论。随后将按以上参考图2-6提供的次序来描述示例系统及其示例操作。计算系统现在越来越多地采取多种多样的形式。例如,计算系统可以是手持式设备、电器、膝上型计算机、台式计算机、大型机、分布式计算系统或甚至常规上不被认为是计算系统的设备。在本说明书以及权利要求书中,术语“计算系统”被广义地定义为包括任何设备或系统(或其组合),该设备或系统包含至少一个物理有形的处理器以及其上能具有可由处理器执行的计算机可执行指令的物理有形的存储器。存储器可以采取任何形式,并可以取决于计算系统的性质和形式。计算系统可以分布在网络环境中,并可包括多个组分计算系统。如图1所示,在其最基本的配置中,计算系统100包括至少一个处理单元102和计算机可读介质104。计算机可读介质104在概念上可被认为包括物理系统存储器,其可以是易失性的、非易失性的,或这两者的某种组合。计算机可读介质104还在概念上包括非易失性大容量存储。如果计算系统是分布式的,则处理、存储器和/或存储能力也可以是分布式的。如此处使用的,术语“可执行模块”或“可执行组件”可以指可以在计算系统上执行的软件对象、例程或方法。此处所描述的不同组件、模块、引擎,以及服务可以实现为在计算系统上执行的对象或进程(例如,作为分开的线程)。在其中实施类型安全性并且其中各进程被分配了它们自己的不同存储器对象的受管环境中执行的情况下,这样的可执行模块可以是受管代码。在可执行模块用本机代码(如C或C++)编写的情况下,这样的可执行模块还可以是非受管代码。在随后的描述中,参考由一个或多个计算系统执行的动作描述了各实施例。如果这样的动作是以软件实现的,则执行动作的相关联计算系统的一个或多个处理器响应于已经本文档来自技高网...

【技术保护点】
一种系统,包括:编译器,配置成在访问源代码中的合同之际执行以下操作:所述合同取决于当在执行作用域的运行时被遇到时断言是否为真,来作为所述执行作用域的进一步执行的条件:生成中间语言代码的动作,所述中间语言代码具有在语义上以通过读所述中间语言代码能理解所述合同的方式被结构化的合同。

【技术特征摘要】
【国外来华专利技术】2013.03.14 US 13/829,5611.一种系统,包括:
编译器,配置成在访问源代码中的合同之际执行以下操作:所述合同取决
于当在执行作用域的运行时被遇到时断言是否为真,来作为所述执行作用域的
进一步执行的条件:
生成中间语言代码的动作,所述中间语言代码具有在语义上以通过读所述
中间语言代码能理解所述合同的方式被结构化的合同。
2.根据权利要求1所述的系统,其特征在于,所述源代码还指令计算系统
执行行为,其中所述合同在所述中间语言代码中在语义上被结构化从而能去除
所述合同的检查而不改变所指令的行为。
3.根据权利要求1所述的系统,其特征在于,所述合同与所述执行作用域
内的执行组件相关联。
4.根据权利要求3所述的系统,其特征在于,所述合同对于使用所述执行
组件的接口的所述执行组件的调用者而言是在语义上可访问的。
5.根据权利要求3所述的系统,其特征在于,所述合...

【专利技术属性】
技术研发人员:J·J·达菲J·P·帕森斯C·S·戈登A·D·布罗姆菲尔德M·塔耶费尔D·A·巴尔托落梅奥M·巴尼特
申请(专利权)人:微软技术许可有限责任公司
类型:发明
国别省市:美国;US

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

1