CN105164642B - 对合同的操作系统支持 - Google Patents

对合同的操作系统支持 Download PDF

Info

Publication number
CN105164642B
CN105164642B CN201480014378.5A CN201480014378A CN105164642B CN 105164642 B CN105164642 B CN 105164642B CN 201480014378 A CN201480014378 A CN 201480014378A CN 105164642 B CN105164642 B CN 105164642B
Authority
CN
China
Prior art keywords
contract
code
component
intermediate language
scope
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201480014378.5A
Other languages
English (en)
Other versions
CN105164642A (zh
Inventor
J·J·达菲
J·P·帕森斯
C·S·戈登
A·D·布罗姆菲尔德
M·塔耶费尔
D·A·巴尔托落梅奥
M·巴尼特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN105164642A publication Critical patent/CN105164642A/zh
Application granted granted Critical
Publication of CN105164642B publication Critical patent/CN105164642B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • G06F9/45512Command shells
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

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

Description

对合同的操作系统支持
技术领域
本公开涉及对合同的操作系统支持。
背景技术
计算机和计算系统已经影响了现代生活的近乎每一个方面。计算机通常涉及工作、休闲、医疗保健、运输、娱乐、家政管理等。计算机功能通常是计算系统执行软件代码的结果。
非常大部分的现代软件代码旨在发现错误状况、报告错误状况和从错误状况中恢复。在现实世界场景中,错误状况相对罕见并且通常难以模拟,然而程序员投入了大量的资源来处理它们。
在软件系统内,差错恢复代码中存在与这些系统中的全部代码相比不成比例的隐错数。这与以下事实直接相关:错误状况通常难以模拟且因此在消费者遇到该领域的底层问题之前通常未被测试。不合适的错误恢复逻辑可导致复合错误,并最终导致崩溃和数据破坏。
常规的软件系统混合有不同类型的错误状况,并提供单个机制来处理这些错误状况。这种一致性表面上很吸引人,因为它允许开发者以单个一致的方式为系统推理出错误状况。不幸地是,这种一致性使错误的定性差异模糊。
此处要求保护的主题不限于解决任何缺点或仅在诸如上述环境这样的环境中操作的各实施例。相反,提供该背景仅用于例示其中可实现所述一些实施例的一个示例性技术领域。
发明内容
根据本文描述的至少一个实施例,描述了一种系统,其中前端编译器将源代码编译成中间代码。中间代码之后可被编译成二进制代码。源代码包括合同检查。当在执行作用域的运行时遇到检查时,对该执行作用域的进一步执行以与合同相关联的断言(predicate)是否为真作为条件。如果断言不是真的,则执行作用域不再运行。例如,如果执行作用域是程序,则该程序将放弃而不运行内部错误恢复逻辑。可任选地,可以运行外部错误恢复逻辑。
前端编译器操作以便保留合同检查从而使该检查在语义上继续被结构化,以使得该检查可以继续被程序的语义分析理解。因此,该检查可以被操作中间代码的静态分析工具理解。
例如,静态分析代码可以是基于中间代码生成二进制码的后端编译器。一类分析可以是确定与合同检查相关联的断言是否在所有条件下为真,以及在运行时处使检查的执行居先。另一类分析可以是确定与检查相关联的执行是否在特定条件下为真(诸如,执行组件被另一组件调用),以及当满足该条件时在运行时处使检查居先。另一类分析可以是确定与检查相关联的断言将总是为假,以及警告编程者该程序包含隐错。可以操作中间代码的其他类型的静态分析器包括重构工具、验证工具、自动化文档生成器等。
本概述不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的作用域。
附图说明
为了描述可以获得本发明的上文所列举的及其他优点和特征的方式,下面将通过参考附图来呈现对各实施例的更具体的描述。可以理解,这些附图只描绘了示例实施例,并且因此不被认为是对其作用域的限制,将通过使用附图并利用附加特征和细节来描述和解释各实施例,在附图中:
图1抽象地示出可在其中采用本文所述的一些实施例的计算系统;
图2示意性地示出了其中以源代码中所表达的合同和声明(即,合同检查)在语义上被保留的方式并且以维持源代码中所表达的行为的方式将源代码编译成中间语言代码的环境;
图3A示出了其中执行流到达具有处于前置条件形式的合同的组件的环境,并且示出了如果不满足该前置条件的可能的快速失败;
图3B示出了其中执行流到达具有处于后置条件形式的合同的组件的环境,并且示出了如果不满足该后置条件的可能的快速失败;
图4A示出在源代码中或中间语言代码中表达的潜在组件调用的链,其中每个组件具有处于前置条件形式的合同;
图4B示出以二进制代码表达的潜在组件调用的链,其中执行流已经被优化以去除一些合同检查并包括针对有条件地要求检查该合同的组件的多个入口点;
图5A示出从传送进程的角度来看用于促成进程间通信的方法500A的流程图;
图5B示出从接收进程的角度来看用于促成进程间通信的方法500A的流程图;以及
图6示出了其中可存在进程间通信的环境。
具体实施方式
根据本文描述的各实施例,描述了一种系统,其中前端编译器将源代码编译成中间代码。中间代码之后可被编译成二进制代码。源代码包括合同。当在执行作用域的运行时遇到合同时,对该执行作用域的进一步执行以与该合同相关联的断言是否为真作为条件。如果断言不是真的,则执行作用域不再运行。例如,如果执行作用域是程序,则该程序将放弃而不运行内部错误恢复逻辑。可任选地,可以运行外部错误恢复逻辑。
前端编译器运行以便保留合同从而使该合同在语义上继续被结构化,以使得该合同可以继续被合同的语义分析理解。因此,该合同可以被操作中间代码的静态分析工具理解。此类静态分析工具可以包括后端编译器、重构工具、验证工具、自动化文档生成器,等等。
将参考图1来描述对计算系统的一些介绍性讨论。随后将按以上参考图2-6提供的次序来描述示例系统及其示例操作。
计算系统现在越来越多地采取多种多样的形式。例如,计算系统可以是手持式设备、电器、膝上型计算机、台式计算机、大型机、分布式计算系统或甚至常规上不被认为是计算系统的设备。在本说明书以及权利要求书中,术语“计算系统”被广义地定义为包括任何设备或系统(或其组合),该设备或系统包含至少一个物理有形的处理器以及其上能具有可由处理器执行的计算机可执行指令的物理有形的存储器。存储器可以采取任何形式,并可以取决于计算系统的性质和形式。计算系统可以分布在网络环境中,并可包括多个组分计算系统。
如图1所示,在其最基本的配置中,计算系统100包括至少一个处理单元102和计算机可读介质104。计算机可读介质104在概念上可被认为包括物理系统存储器,其可以是易失性的、非易失性的,或这两者的某种组合。计算机可读介质104还在概念上包括非易失性大容量存储。如果计算系统是分布式的,则处理、存储器和/或存储能力也可以是分布式的。
如此处使用的,术语“可执行模块”或“可执行组件”可以指可以在计算系统上执行的软件对象、例程或方法。此处所描述的不同组件、模块、引擎,以及服务可以实现为在计算系统上执行的对象或进程(例如,作为分开的线程)。在其中实施类型安全性并且其中各进程被分配了它们自己的不同存储器对象的受管环境中执行的情况下,这样的可执行模块可以是受管代码。在可执行模块用本机代码(如C或C++)编写的情况下,这样的可执行模块还可以是非受管代码。
在随后的描述中,参考由一个或多个计算系统执行的动作描述了各实施例。如果这样的动作是以软件实现的,则执行动作的相关联计算系统的一个或多个处理器响应于已经执行了计算机可执行指令来引导计算系统的操作。例如,这样的计算机可执行指令可以在形成计算机程序产品的一个或多个计算机可读介质上实现。这样的操作的示例涉及对数据的操纵。计算机可执行指令(以及被操纵的数据)可被存储在计算系统100的存储器104中。计算系统100还可包含允许计算系统100例如通过网络110与其他处理器通信的通信信道108。
在此描述的各实施例可包括或利用专用或通用计算机,该专用或通用计算机包括诸如例如一个或多个处理器和系统存储器等计算机硬件,如以下更详细讨论的。本文中描述的各实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种显著不同的计算机可读介质:计算机存储介质和传输介质。
计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他有形存储介质。
“网络”被定义为使得电子数据能够在计算机系统和/或模块和/或其它电子设备之间传输的一个或多个数据链路。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可以包括可以用来携带所需要的以计算机可执行的指令或数据结构的形式存在的程序代码装置并可以被通用或专用计算机访问的网络和/或数据链路。上述的组合应当也被包括在计算机可读介质的范围内。
此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动传输到计算机存储介质(或反之亦然)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口控制器(例如,“NIC”)内的RAM中,然后最终被传输到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质。因而,应当理解,计算机存储介质可被包括在还利用(或甚至主要利用)传输介质的计算机系统组件中。
计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言之类的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。更具体而言,上述特征和动作是作为实现权利要求的示例形式而公开的。
本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实施。在分布式系统环境中,程序模块可位于本地和远程存储器存储设备两者中。
图2示出包括编译器210的系统200。编译器210可以使用例如计算系统100来操作。例如,计算系统100可以访问构成计算机程序产品的一个或多个计算机可读存储介质存储的计算机可执行指令。计算系统100可以使用(诸)处理器102来执行这些计算机可执行指令,藉此致使计算系统实例化和/或操作编译器210。
编译器210访问源代码201并作为响应生成中间语言代码211。在没有首先转换成机器可执行代码(常称作“二进制代码”或“二进制码”)的情况下,中间语言代码211不能被计算系统直接运行。然而,中间语言代码211可以被静态分析工具220静态地分析。
所示出的源代码201包括两个合同202A和202B。但是,省略号202C表示在源代码中可以存在任何数目个合同。在下文中合同202A、202B和202C还将被统称为“合同202”。每个合同在其中实际执行二进制码的运行时环境中被遇到时,取决于断言是否为真来作为执行作用域的进一步执行的条件。“执行作用域”被定义为由编译器210编译的程序以及作为编译的一部分被引入程序的任何代码。
例如,合同可以与组件的前置条件相关联,在此情况下当组件被调用时通过评估该前置条件来检查上下文。如果该前置条件不是真的,组件不执行。例如,图3A示出其中执行流301A到达组件310A的环境300A。合同311A具有相关联的断言312A。断言312A被验证以确定前置条件是已被满足还是没被满足。如果断言312A为真,组件310A的逻辑313A被执行且执行流301A继续如常。然而,如果断言312A不是真的,则组件310的逻辑313A不被执行,且取而代之地执行流310A遇到快速失败事件。
快速失败事件指执行上下文(即,所编译的程序)不被准许继续运行。如果执行错误恢复逻辑,不从执行上下文内部提供错误恢复逻辑。取而代之地,错误恢复逻辑(如果一定要运行)是在执行作用域外部运行的外部错误恢复逻辑。
合同可以与组件的后置条件相关联,在此情况下当组件被调用时,仅在已经执行组件的逻辑之后检查后置条件。例如,图3B示出其中执行流310B到达组件310B的环境300B。组件的逻辑313B随后执行。在逻辑313B完成之后,执行流301B遇到具有相关联的断言312B的合同311B。在此时刻,断言312B被验证以确定后置条件是已被满足还是没被满足。如果断言312B为真,则执行流301B从组件310B退出并继续如常。但是,如果断言312B不是真的,则执行流301B遇到快速失败事件。
返回图2,如所示的源代码201还包括三个行为203A、203B和203C。但是,省略号203C表示在源代码201中可以存在任何数目个行为。在下文中行为203A、203B、203C和203D还将被统称为“行为203”。行为是与程序的逻辑相关联的实际动作。例如,参考图3A和3B,行为203是组件210A和210B的逻辑213A和213B的实际部分。
编译器210生成中间语言代码211从而使行为203被全部保留。换言之,当中间语言代码211之后转换成二进制代码时,二进制代码具有致使该行为的二进制指令。中间语言代码211还以在语义上结构化的方式包括合同,从而可以从中间语言代码211去除该合同而不改变所指令的行为203。
在一些实施例中,编译器210被配置成检测至少一些条件,在这些条件下断言包括外部可见副作用。在此情况下,编译器210通过在编译过程中引发错误由此使源代码201的作者作出更正以从包括该断言的合同或声明中去除外部可见副作用来强制执行将不存在外部可见副作用。以此方式,在编译后保留的合同202可被当作不具有外部可见副作用。
作为前置条件的合同在语义上以可执行组件的调用者在调用组件之前具有对合同的语义理解的方式被结构化。例如,考虑图3A的情况,合同311A在语义上对于组件310A的调用者将是可访问的。因此,与调用者具有对组件310A的应用编程接口(API)的语义理解非常相似,调用者还将具有对合同312A的语义理解。因此,在运行时,要调用第二组件的第一组件可以首先检查以确保在作出对第二组件的调用之前将满足第二组件的合同。如果第一组件确定合同将被满足,第一组件可以作出调用。然而,如果第一组件确定合同没有被满足,第一组件可以放弃调用第二组件,因为该调用将导致快速失败事件。第一组件可以随后被配置成尝试替换的执行路径,由此防止不必要的快速失败事件。
系统200还包括静态分析工具220。静态分析工具220被配置成评估中间语言代码211,其包括对在中间语言代码211中所包括的合同检查202的执行。将要提供静态分析工具220的各种示例。这些示例并不是互斥的。可以存在多个静态分析工具220,其静态地分析中间语言代码211(包括其中所含的合同202)。
静态分析器220可以使用例如计算系统100来操作。例如,计算系统100可以访问构成计算机程序产品的一个或多个计算机可读存储介质上存储的计算机可执行指令。计算系统100可以使用(诸)处理器102来执行这些计算机可执行指令,藉此致使计算系统实例化和/或操作静态分析器220。
例如,静态分析器可以是基于中间代码211生成二进制码的后端编译器。相反,编译器210可以被视作前端编译器。前端编译器将源代码转换成中间语言代码。后端编译器将所得的中间语言代码转换成机器代码。具有对中间语言代码211中合同202的语义结构的访问,后端编译器220可以基于这一语义知识作出任何数目个优化。现在将参考图4A和4B来描述这些优化中的数个优化。
图4A示出源代码或中间语言代码中表达的潜在组件调用的链400A。链400A包括五个组件401A到405A,每个组件具有作为前置条件的相关联的合同411到415。组件401A可以调用组件402A,这在合同412被满足时执行。组件402A可以调用组件403A,这在合同413被满足时执行。组件403A可以调用组件404A,这在合同414被满足时执行。组件405A还可以调用组件404A,这在合同414被满足时执行。链400A表示如由源代码(并由此中间语言代码211)中表达的合同202的语义结构和行为203所表示的可能的执行流。
后端编译器可以静态地分析中间语言以制定链400A的概念。后端编译器被配置成执行静态分析以尝试基于后端编译器对在运行时可能发生什么的知识来确定相关联的组件的合同的断言是否总是真的。如果后端编译器确定断言将总是真的,则后端编译器可以通过完全去除合同检查来优化二进制码。
例如,参考图4A,假设后端编译器确定与合同412相关联的断言在组件402A被调用时将总是真的。在此情况下,如果已经发生交互,编译器生成消除在运行时检查合同的二进制码。图4B示出二进制码组件链400B,其具有与中间语言链400A相同的功能行为。具体而言,中间语言组件401A到405A的逻辑由对应的二进制码组件401B到405B来实现。但是,注意二进制码组件402B不检查合同412,由此使得执行二进制码组件402B更加高效。
同样地,后端编译器确定与合同413相关联的断言在组件403A被调用时将总是真的。由此生成对应的二进制码组件403B而无需检查合同413。同样,这使得二进制码组件403的执行更加高效。
如果组件404A被组件403A调用,后端编译器确定合同414将被满足(也即,后端编译器确定与合同相关联的断言将是真的)。但是,如果组件404A被组件405A调用,后端编译器不能确定合同414是否将被满足(也即,后端编译器不能验证与合同相关联的断言的真实性)。在这种情况下,创建具有两个入口点的二进制码组件404B。入口点422之一允许绕过对合同414的检查,在此示例中该入口点将是针对二进制码组件403B的合适的入口点。另一个入口点421使合同414被检查,在此示例中该入口点将是针对二进制码组件405B的合适的入口点。
静态分析器220也可以与前端编译器210协作以确保断言不具有外部可见的副作用。当然,对断言的运行时评估不消耗一些处理周期,但是所述评估既不以其它方式影响组件的逻辑,也不影响编译下的程序的语义表达的行为203。断言可以包括一些副计算(sidecalculations),其不产生程序外部的任何外部可观测结果。然而,在本说明书及权利要求书中这不被认为是“副作用”。通过确保不存在外部可观测副作用,程序将连同相同的外部可观测行为运行而不管是否存在合同检查。由于合同检查常被包括在程序的创作和测试中但常在推出该程序之前被去除,故而这是有帮助的。因此,处于测试的程序的行为将与该程序被推出后的行为相同。
静态分析器220还可以是重构工具、验证工具、自动化文档生成器,和/或对使用在中间语言代码211中语义表达的合同202的中间语言代码211执行任何其他类型的静态分析。例如,静态分析器220可以确定与合同相关联的断言将总是为假,以及警告编程者该程序包含隐错。
因此,本文中所述的诸原理允许对包括合同的中间语言代码的强大且智能的静态分析,并且允许在一个组件调用另一个组件时对二进制码作出显著的优化。诸原理还可以扩展至其中来自一个进程的组件调用来自另一进程的组件的情况。
图5A和5B分别示出用于促成进程间通信的方法500A和500B的流程图。方法500A如果被执行将要早于图5B的方法500B执行。方法500B(以及方法500A,如果其被执行)可以被在概念上驻留于进程间调用的信道内的抽象层来实现。图6示出了其中可发生进程间通信的环境600。因此,将频繁地参考图6的环境600来描述图5A和5B。
响应于对第一进程中的第一组件已经请求与第二进程中的第二组件进行进程间通信的检测来执行图5A的方法500A。例如,在图6的环境600中,假设进程611中的组件601要向进程612中的组件602发送通信。方法500A可以随后在进程611中被信道组件621执行,而方法500B可以随后在进程612中被信道组件622执行。方法500A和500B的操作对组件601和602可以是隐藏的。取而代之地,组件601和602可以简单地将通信视为通过进程间信道610被促成。
响应于要从第一组件601发送进程间通信的通知(图5A中的动作501),信道组件621可以验证是否被满足供继续执行的合同(图5A中的判定框502)。合同可以包括被设计成允许安全的进程间通信的断言。如果合同没被满足(判定框502中为“否”),信道组件621禁止通信(动作503)。在另一方面,如果合同被满足(判定框502中为“是”),信道组件621将进程间消息发送至目标进程中的信道组件622(动作504)。
图5B示出无论是否在先执行了方法500A目标信道组件处理传入消息的方法500B的流程图。信道组件622首先接收进程间消息(动作511)。信道组件621可以随后验证是否满足供继续执行的合同(图5B中的判定框512)。同样,合同可以包括被设计成允许安全的进程间通信的断言。
如果合同没被满足(判定框512中为“否”),信道组件622禁止通信(动作513),并且还可以终止进程611在将来与进程612通信的任何权限。由于目标信道组件622确定合同没被满足,很有可能是调用进程611没执行方法500A。因此,进程看起来不符合安全通信,并且可以批准终止进程611和612之间的任何通信。因此,可能导致快速失败的任何缺陷可以被限于包括该缺陷的进程。在另一方面,如果合同被满足(判定框512中为“是”),进程间通信被传递给目标组件602(动作514)。
因此,在中间语言代码中保留合同的语义结构。此外,已经描述了使用此类语义结构来优化到二进制码的编译。
本发明可具体化为其它具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非前述描述指示。在权利要求书的等价物的含义和范围内的所有变化应被包含在其范围内。

Claims (10)

1.一种用于对合同的操作系统支持的系统,包括:
编译器,配置成在访问源代码中的合同之际执行以下操作:所述合同取决于当在执行作用域的运行时被遇到时断言是否为真,来作为所述执行作用域的进一步执行的条件:
生成中间语言代码的动作,所述中间语言代码具有在语义上以通过读所述中间语言代码能理解所述合同的方式被结构化的合同,
其中当所述编译器无法确定与所述合同相关联的断言的真实性时,生成具有允许绕过对所述合同的检查的第一入口点以及使所述合同被检查的第二入口点的二进制码组件。
2.根据权利要求1所述的系统,其特征在于,所述源代码还指令计算系统执行行为,其中所述合同在所述中间语言代码中在语义上被结构化从而能去除所述合同的检查而不改变所指令的行为。
3.根据权利要求1所述的系统,其特征在于,所述合同与所述执行作用域内的执行组件相关联。
4.根据权利要求3所述的系统,其特征在于,所述合同对于使用所述执行组件的接口的所述执行组件的调用者而言是在语义上可访问的。
5.根据权利要求3所述的系统,其特征在于,所述合同是所述可执行组件的前置条件。
6.根据权利要求3所述的系统,其特征在于,所述合同是所述可执行组件的后置条件。
7.根据权利要求1所述的系统,其特征在于,如果当在运行时被遇到时所述断言不是真的,在所述执行作用域的外部运行外部恢复代码。
8.根据权利要求1所述的系统,其特征在于,如果当在运行时被遇到时所述断言不是真的,响应于所述断言不是真的,不运行恢复代码。
9.根据权利要求1所述的系统,其特征在于,所述编译器被配置成检测至少一些条件,在所述条件下所述断言包括外部可见副作用。
10.一种用于对合同的操作系统支持的系统,包括:
静态分析工具,配置成评估中间语言代码,所述中间语言代码包括在语义上以能从所述中间语言代码去除断言的方式被结构化的合同,其中所述合同取决于当在执行作用域的运行时被遇到时断言是否为真来作为执行作用域的进一步执行的条件,其中所述评估还包括对在所述中间语言中被结构化的所述合同的执行,并且其中当无法确定与所述合同相关联的断言的真实性时,生成具有允许绕过对所述合同的检查的第一入口点以及使所述合同被检查的第二入口点的二进制码组件。
CN201480014378.5A 2013-03-14 2014-03-11 对合同的操作系统支持 Active CN105164642B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/829,561 US9286039B2 (en) 2013-03-14 2013-03-14 Operating system support for contracts
US13/829,561 2013-03-14
PCT/US2014/023258 WO2014159373A2 (en) 2013-03-14 2014-03-11 Operating system support for contracts

Publications (2)

Publication Number Publication Date
CN105164642A CN105164642A (zh) 2015-12-16
CN105164642B true CN105164642B (zh) 2019-02-19

Family

ID=50884465

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480014378.5A Active CN105164642B (zh) 2013-03-14 2014-03-11 对合同的操作系统支持

Country Status (6)

Country Link
US (1) US9286039B2 (zh)
EP (1) EP2972828B1 (zh)
JP (1) JP6401235B2 (zh)
KR (1) KR102118236B1 (zh)
CN (1) CN105164642B (zh)
WO (1) WO2014159373A2 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9841955B2 (en) * 2016-01-26 2017-12-12 Enterpriseweb Llc Unified operating system for distributed computing
US11755382B2 (en) * 2017-11-03 2023-09-12 Coherent Logix, Incorporated Programming flow for multi-processor system
CN107908405A (zh) * 2017-11-17 2018-04-13 苏州蜗牛数字科技股份有限公司 代码静态审核装置及方法
CN110287089B (zh) * 2019-05-07 2023-02-17 华东师范大学 一种基于中间格式及smt技术的微内核ipc验证方法
CN111768187A (zh) * 2020-08-31 2020-10-13 支付宝(杭州)信息技术有限公司 一种部署智能合约的方法、区块链节点和存储介质
CN111770206B (zh) * 2020-08-31 2020-12-29 支付宝(杭州)信息技术有限公司 一种部署智能合约的方法、区块链节点和存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW200937188A (en) * 2007-12-21 2009-09-01 Microsoft Corp Contract programming for code error reduction
CN102402479A (zh) * 2010-09-28 2012-04-04 微软公司 用于静态分析的中间表示结构

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6601192B1 (en) 1999-08-31 2003-07-29 Accenture Llp Assertion component in environment services patterns
US20030023959A1 (en) * 2001-02-07 2003-01-30 Park Joseph C.H. General and efficient method for transforming predicated execution to static speculation
US7143373B2 (en) 2004-10-14 2006-11-28 Synopsys, Inc. Method and apparatus for evaluating and debugging assertions
JP2006139413A (ja) * 2004-11-10 2006-06-01 Hitachi Ltd プログラム、プログラムコードの合理化方法、プログラムコードの生成方法、プログラムコード、及び情報処理装置
US7987456B2 (en) * 2006-01-24 2011-07-26 Microsoft Corporation Qualitatively annotated code
US7934207B2 (en) 2006-12-19 2011-04-26 Microsoft Corporation Data schemata in programming language contracts
US8782607B2 (en) * 2009-02-20 2014-07-15 Microsoft Corporation Contract failure behavior with escalation policy

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW200937188A (en) * 2007-12-21 2009-09-01 Microsoft Corp Contract programming for code error reduction
CN102402479A (zh) * 2010-09-28 2012-04-04 微软公司 用于静态分析的中间表示结构

Also Published As

Publication number Publication date
WO2014159373A3 (en) 2014-11-20
KR102118236B1 (ko) 2020-06-02
CN105164642A (zh) 2015-12-16
KR20150130298A (ko) 2015-11-23
US20140282448A1 (en) 2014-09-18
EP2972828A2 (en) 2016-01-20
JP2016511484A (ja) 2016-04-14
WO2014159373A2 (en) 2014-10-02
US9286039B2 (en) 2016-03-15
JP6401235B2 (ja) 2018-10-10
EP2972828B1 (en) 2019-09-04

Similar Documents

Publication Publication Date Title
CN105164642B (zh) 对合同的操作系统支持
Ehlers et al. Slugs: Extensible gr (1) synthesis
US8893102B2 (en) Method and system for performing backward-driven path-sensitive dataflow analysis
Habchi et al. Code smells in ios apps: How do they compare to android?
CN102422261B (zh) 对所引起的异常的通知
US10839312B2 (en) Warning filter based on machine learning
US9384017B2 (en) System and method to provide grouping of warnings generated during static analysis
US9798973B2 (en) Efficient rule execution in decision services
US20110321020A1 (en) Transforming declarative event rules into executable procedures
Owe Verifiable Programming of Object-Oriented and Distributed Systems.
US10599554B2 (en) Dynamic instrumentation based on detected errors
Kaul et al. A Uniform Representation of Classical and Quantum Source Code for Static Code Analysis
US8954310B2 (en) Automatic designation of equivalent variable values
Ehlers Self-adaptive performance monitoring for component-based software systems
CN112286802B (zh) 一种测试程序性能方法、装置和电子设备
Dehraj et al. A new software development paradigm for intelligent information systems
Aggarwal et al. Enhancing software quality assurance by using knowledge discovery and bug prediction techniques
Munjal et al. Automated slicing of aspect-oriented programs using bytecode analysis
Kühn et al. Distributed coordination runtime assertions for the peer model
Zhang et al. Android-SRV: Scenario-based runtime verification of Android applications
CN115391780B (zh) 应用代码的安全加固方法、系统、设备及存储介质
Panda et al. Hierarchical regression test case selection using slicing
Ring et al. System of systems readiness assessment
CN106897050A (zh) 一种进程清理的方法及装置
CN106897051A (zh) 一种进程清理的方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant