KR102118236B1 - 컨트랙트에 대한 운영 체제 지원 기법 - Google Patents

컨트랙트에 대한 운영 체제 지원 기법 Download PDF

Info

Publication number
KR102118236B1
KR102118236B1 KR1020157025030A KR20157025030A KR102118236B1 KR 102118236 B1 KR102118236 B1 KR 102118236B1 KR 1020157025030 A KR1020157025030 A KR 1020157025030A KR 20157025030 A KR20157025030 A KR 20157025030A KR 102118236 B1 KR102118236 B1 KR 102118236B1
Authority
KR
South Korea
Prior art keywords
contract
component
components
predicate
code
Prior art date
Application number
KR1020157025030A
Other languages
English (en)
Other versions
KR20150130298A (ko
Inventor
존 제이 더피
자레드 포터 파슨스
콜린 스테빈스 고든
알렉산더 다니엘 브롬필드
마틴 테일레퍼
데이비드 앨런 바톨로메오
마이클 바네트
Original Assignee
마이크로소프트 테크놀로지 라이센싱, 엘엘씨
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 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 filed Critical 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20150130298A publication Critical patent/KR20150130298A/ko
Application granted granted Critical
Publication of KR102118236B1 publication Critical patent/KR102118236B1/ko

Links

Images

Classifications

    • 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/41Compilation
    • 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

컨트랙트에 대한 운영 체제 지원 기법{OPERATING SYSTEM SUPPORT FOR CONTRACTS}
컴퓨터 및 컴퓨팅 시스템은 현대의 생활 전반에 영향을 미쳐왔다. 컴퓨터는 일반적으로 직업, 여흥, 헬스케어(healthcare), 교통, 엔터테인먼트, 가계관리 등에 관여한다. 컴퓨터 기능은 통상적으로 컴퓨팅 시스템이 소프트웨어 코드를 실행한 결과이다.
현대의 소프트웨어 코드의 상당 부분은 오류 상태를 찾아내고, 보고하고, 복구하는데 사용된다. 실제 시나리오에서, 오류 상태는 비교적 드물고 흔히 시뮬레이팅하기가 어렵지만, 여전히 프로그래머는 이들을 처리하기 위해 상당 량의 자원을 소비한다.
소프트웨어 시스템 내에서, 이들 시스템 내의 전체 코드에 비해 오류 복구 코드에 일정하지 않은 수의 버그가 존재한다. 이것은 오류 상태가 흔히 시뮬레이팅하기 어렵고 그 결과 흔히 고객이 현장에서 기본적인 문제에 직면할 때까지 테스트되지 않는다는 사실과 직접적인 관련이 있다. 부적절한 오류 복구 로직은 복합적인 오류를 일으킬 수 있고 결국 고장 및 데이터 손상을 일으킬 수 있다.
통상의 소프트웨어 시스템은 상이한 유형의 오류 상태들을 혼합하고 이들 오류 상태를 처리하기 위한 단일 메커니즘을 제공한다. 이런 일관성(uniformity)은, 개발자들이 시스템에 대해 하나의 일관된 방식으로 오류 상태에 대해 추론할 수 있게 하므로 표면적으로는 매력적이다. 유감스럽게도, 이 일관성은 오류들에서의 질적인 차이를 알기 어렵게 한다.
본원 청구항의 청구대상은 어떠한 문제점을 해결하거나 전술한 것과 같은 환경에서만 동작하는 실시예로 한정되지 않는다. 오히려, 이 배경기술은 본 명세서에 기술된 일부 실시예가 실시될 수 있는 하나의 예시적인 기술분야를 예시하기 위해서만 제공된다.
본 명세서에 기술된 적어도 하나의 실시예에 따르면, 프런트엔드(front-end) 컴파일러가 소스 코드를 중간 코드로 컴파일하는 시스템이 설명된다. 중간 코드는 추후에 이진 코드로 컴파일될 수 있다. 소스 코드는 컨트랙트 체크(contract check)를 포함한다. 실행 스코프(execution scope)의 런타임 시에 이 체크를 만나게 되면, 실행 스코프의 추가적인 실행이 컨트랙트와 연관된 술부(predicate)가 참인지 여부에 따라 조정된다. 이 술부가 참이 아니면, 실행 스코프는 더 이상 실행되지 않는다. 예를 들어, 실행 스코프가 프로그램이면, 이 프로그램은 내부 오류 복구 로직을 실행하지 않고 폐기될 것이다. 선택적으로, 외부 오류 복구 로직이 실행될 수도 있다.
프런트엔드 컴파일러는 컨트랙트 체크를 유지하도록 동작하여, 이 체크가 프로그램의 의미론적 분석에 의해 계속 이해될 수 있도록 계속해서 의미론적으로 구조화되게 한다. 따라서, 이 체크는 중간 코드로 동작하는 정적 분석 툴에 의해 이해될 수 있다.
예를 들어, 정적 분석 코드는 중간 코드에 기초하여 바이너리를 생성하는 백엔드(back-end) 컴파일러일 수 있다. 한 유형의 분석은 컨트랙트 체크와 연관된 술부가 모든 조건 하에서 참일지의 여부를 판정하는 것일 수 있고 런타임 시에 이 체크의 실행에 선행하는 것일 수 있다. 다른 유형의 분석은, 그 체크와 연관된 실행이 소정의 조건(예컨대, 실행 컴포넌트가 다른 컴포먼트에 의해 호출됨) 하에서 참일 것을 결정하는 것일 수도 있고 그 조건이 만족되는 런타임 시에 체크에 선행하는 것일 수도 있다. 또 다른 유형의 분석은 체크와 연관된 술부가 항상 거짓일 것임을 결정하는 것일 수 있고 프로그램이 버그를 포함하고 있음을 프로그래머에게 알리는 것일 수 있다. 중간 코드에 대해 작동할 수 있는 다른 유형의 정적 분석기는 리팩토링 툴, 검증 툴, 자동화된 문서 생성기 등을 포함한다.
본 개요는 청구항의 청구대상의 핵심적인 특징이나 필수적인 특징들을 밝히고자 함이 아니며, 청구항의 청구대상의 범위를 결정하는 데 도움이 되고자 함도 아니다.
상기 및 다른 이점들 및 특징들을 얻을 수 있는 방식을 설명하기 위해, 첨부 도면을 참조하여 다양한 실시예에 대해 보다 구체적으로 설명할 것이다. 이들 도면은 샘플 실시예를 도시한 것일 뿐이며 따라서 본 발명의 범위를 한정하는 것으로 간주되어서는 안 된다는 점을 이해하고, 실시예들은 첨부 도면을 이용하여 보다 구체적이고 상세하게 설명할 것이다.
도 1은 본 명세서에 기술된 일부 실시예가 실시될 수 있는 컴퓨팅 시스템을 개략적으로 도시한 것이다.
도 2는 소스 코드로 표현된 컨트랙트(contract) 및 어서션(assertion)(즉, 컨트랙트 체크)이 의미론적으로 유지되는 방식 및 소스 코드로 표현된 동작(behavior)이 유지되는 방식으로 소스 코드가 중간 언어 코드로 컴파일되는 환경을 개략적으로 도시한 것이다.
도 3a는 실행 흐름이 전제 조건의 형태로 컨트랙트를 갖는 컴포넌트에 도달하는 환경 및 전제 조건이 만족되지 않을 경우의 가능한 빠른 실패를 도시한 것이다.
도 3b는 실행 흐름이 사후 조건의 형태로 컨트랙트를 갖는 컴포넌트에 도달하는 환경 및 사후 조건이 만족되지 않을 경우의 가능한 빠른 실패를 도시한 것이다.
도 4a는 소스 코드 또는 중간 언어 코드로 표현된 잠재적 컴포넌트 호(call)의 체인(각각의 컴포넌트가 전제 조건의 형태로 컨트랙트를 가짐)을 도시한 것이다.
도 4b는 실행 흐름이 일부 컨트랙트 체크를 제거하고 컨트랙트 체킹을 조건부로 요구하는 컴포넌트들에 대한 복수의 진입 지점을 포함하도록 최적화된, 이진 코드로 표현된 잠재적 컴포넌트 호의 체인을 도시한 것이다.
도 5a는 전송 프로세스의 관점에서 봤을 때 프로세스간 통신을 용이하게 하는 방법(500A)의 흐름도이다.
도 5b는 수신 프로세스의 관점에서 봤을 때 프로세스간 통신을 용이하게 하는 방법(500A)의 흐름도이다.
도 6은 프로세스간 통신이 일어날 수 있는 환경을 도시한 것이다.
본 명세서에 기술된 실시예에 따르면, 프런트 엔드 컴파일러가 소스 코드를 중간 코드로 컴파일하는 시스템이 기술된다. 중간 코드는 추후에 이진 코드로 컴파일될 수 있다. 소스 코드는 컨트랙트를 포함한다. 컨트랙트가 실행 스코프의 런타임 시에 이 체크를 만나게 되면, 그 실행 스코프의 추가적인 실행이 컨트랙트와 연관된 술부가 참인지 여부에 따라 조정된다. 이 술부가 참이 아니면, 실행 스코프는 더 이상 실행되지 않는다. 예를 들어, 실행 스코프가 프로그램이면, 이 프로그램은 내부 오류 복구 로직을 실행하지 않고 폐기될 것이다. 선택적으로, 외부 오류 복구 로직이 실행될 수도 있다.
프런트엔드 컴파일러는 컨트랙트를 유지하도록 동작하여, 컨트랙트가 컨트랙트의 의미론적 분석에 의해 계속 이해될 수 있도록 계속해서 의미론적으로 구조화되게 한다. 따라서, 이 컨트랙트는 중간 코드로 동작하는 정적 분석 툴에 의해 이해될 수 있다. 이러한 정적 분석 툴은 백엔드 컴파일러, 리팩토링 툴, 검증 툴, 자동화된 문서 생성기 등을 포함할 수 있다.
컴퓨팅 시스템에 대한 서론은 도 1과 관련하여 기술될 것이다. 그 다음에, 예시적인 시스템 및 예시적인 동작을 도 2 내지 6을 참조하여 차례로 설명할 것이다.
컴퓨팅 시스템은 이제 다양한 형태를 취해가고 있다. 컴퓨팅 시스템은, 예를 들어, 핸드헬드 장치, 가전, 랩탑 컴퓨터, 데스크탑 컴퓨터, 메인프레임, 분산 컴퓨팅 시스템, 또는 심지어 통상적으로 컴퓨팅 시스템으로 간주되지 않았던 장치도 포함할 수 있다. 본원의 상세한 설명 및 청구범위에서, "컴퓨팅 시스템"이란 용어는, 적어도 하나의 물리적이고 형태가 있는(tangible) 프로세서와, 프로세서에 의해 실행될 수 있는 컴퓨터 실행가능 명령어를 수록할 수 있는 물리적이고 형태가 있는 메모리를 포함하는, 임의의 장치나 시스템을 포함하는 것으로 넓게 정의된다. 메모리는 임의의 형태를 취할 수 있으며 컴퓨팅 시스템의 특성과 형태에 의존할 수 있다. 컴퓨팅 시스템은 네트워크 환경에 걸쳐 분산될 수 있고 복수의 컴퓨팅 시스템을 포함할 수 있다.
도 1에 도시된 바와 같이, 가장 기본 구성에서, 컴퓨팅 시스템(100)은 적어도 하나의 프로세싱 유닛(102)과 컴퓨터 판독가능 매체(104)를 포함한다. 컴퓨터 판독가능 매체(104)는 개념상 휘발성, 비휘발성, 또는 이 둘의 조합일 수 있는 물리적 시스템 메모리를 포함하는 것으로 생각될 수 있다. 컴퓨터 판독가능 매체(104)는 또한 개념상 비휘발성 대용량 저장부를 포함한다. 컴퓨팅 시스템이 분산되면, 프로세싱, 메모리 및/또는 저장 능력도 분산될 수 있다.
본 명세서에서 사용되는 용어 "실행가능 모듈" 또는 "실행가능 컴포넌트"는 컴퓨팅 시스템에서 실행될 수 있는 소프트웨어 객체, 라우팅, 또는 메소드를 지칭할 수 있다. 본 명세서에 기술되는 다른 컴포넌트, 모듈, 엔진 및 서비스는 컴퓨팅 시스템에서 실행되는 오브젝트나 프로세스로(예컨대, 별도의 스레드들)서 구현될 수 있다. 이들 실행가능 모듈은, 타입 안정성이 적용되고 프로세스가 자신의 별도 메모리 객체를 할당받는 관리된 환경에서 실행될 수 있는 경우에, 관리된 코드일 수 있다. 이러한 실행가능 모듈은 또한, 실행가능 모듈이 C나 C++과 같은 자연어 코드로 저작되는 경우에, 관리되지 않은 코드일 수도 있다.
후술하는 설명에서, 실시예들은 하나 이상의 컴퓨팅 시스템에 의해 수행되는 동작을 참조하여 기술된다. 이들 동작이 소프트웨어로 구현되면, 그 동작을 수행하는 관련 컴퓨팅 시스템의 하나 이상의 프로세서가 컴퓨터 실행가능 명령어를 실행했다는 것에 응답하여 컴퓨팅 시스템의 조작을 지시한다. 예를 들어, 이들 컴퓨터 실행가능 명령어는 컴퓨터 프로그램 제품을 형성하는 하나 이상의 컴퓨터 판독가능 매체에 수록될 수 있다. 그러한 조작의 일례는 데이터의 조작을 포함한다. 컴퓨터 실행가능 명령어(및 조작된 데이터)는 컴퓨팅 시스템(100)의 메모리(104)에 저장될 수 있다. 컴퓨팅 시스템(100)은 또한, 컴퓨팅 시스템(100)이 예컨대 네트워크(110)를 통해 다른 프로세서와 통신할 수 있게 하는 통신 채널(108)을 포함할 수 있다.
본 명세서에 기술된 실시예는, 아래에 보다 상세히 설명하는 바와 같이, 예컨대 하나 이상의 프로세서 및 시스템 메모리와 같은 컴퓨터 하드웨어를 포함하는 특수 목적 또는 범용 컴퓨터를 포함하거나 이용할 수 있다. 본 명세서에 기술된 실시예들은 컴퓨터 실행가능 명령어 및/또는 데이터 구조를 반송 또는 저장하는 물리적 및 기타 컴퓨터 판독가능 매체를 포함한다. 이러한 컴퓨터 판독가능 매체는 범용 또는 특수 목적 컴퓨터 시스템에 의해 액세스될 수 있는 임의의 이용가능 매체일 수 있다. 컴퓨터 실행가능 명령어를 저장하는 컴퓨터 판독가능 매체는 물리적 저장 매체이다. 컴퓨터 실행가능 명령어를 반송하는 컴퓨터 판독가능 매체는 전송 매체이다. 따라서, 예를 들어, 본 발명의 실시예는 적어도 두 종류의 컴퓨터 판독가능 매체, 즉 컴퓨터 저장 매체 및 전송 매체를 포함할 수 있다.
컴퓨터 저장 매체는, RAM, ROM, EEPROM, CD-ROM, 또는 다른 광 디스크 저장부, 자기 디스크 저장부 또는 기타 자기 저장 장치, 또는 컴퓨터 실행가능 명령어 또는 데이터 구조의 형태로 원하는 프로그램 코드 수단을 저장하는데 사용될 수 있고 범용 또는 특수목적 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함한다.
"네트워크"는 컴퓨터 시스템 및/또는 모듈 및/또는 기타 전자 장치 사이에서 전자 데이터의 전달을 가능하게 하는 하나 이상의 데이터 링크로서 정의된다. 네트워크 또는 다른 통신 연결(유선, 무선 또는 유선 또는 무선의 조합)을 통해 컴퓨터에 정보가 전달되는 경우, 컴퓨터는 이 연결을 전송 매체로서 간주한다. 전송 매체는, 컴퓨터 실행가능 명령어 또는 데이터 구조의 형태로 원하는 프로그램 코드 수단을 반송하는데 사용될 수 있고 범용 또는 특수 목적 컴퓨터에 의해 액세스될 수 있는 네트워크 및/또는 데이터 링크를 포함할 수 있다. 이들의 조합이 또한 컴퓨터 판독가능 매체의 범위 내에 포함될 수 있다.
또한, 다양한 컴퓨터 시스템 컴포넌트에 도달하면, 컴퓨터 실행가능 명령어 또는 데이터 구조 형태의 프로그램 코드 수단은 자동으로 전송 매체에서 컴퓨터 저장 매체로 (또는 그 역으로) 전달될 수 있다. 예를 들어, 네트워크 또는 데이터 링크를 통해 수신된 컴퓨터 실행가능 명령어 또는 데이터 구조는 네트워크 인터페이스 컨트롤러(예컨대, "NIC") 내의 RAM 내에 버퍼링될 수 있고, 그 후 최종적으로 컴퓨터 시스템 RAM 및/또는 컴퓨터 시스템에 있는 난휘발성(less vlatile) 컴퓨터 저장 매체로 전달될 수 있다. 따라서, 컴퓨터 저장 매체는 전송 매체를 또한 (또는 주로) 이용하는 컴퓨터 시스템 컴포넌트에 포함될 수 있다.
컴퓨터 실행가능 명령어는, 예컨대, 프로세서에서 실행될 경우에, 범용 컴퓨터, 특수 목적 컴퓨터, 또는 특수 목적 프로세싱 장치로 하여금 소정의 기능 또는 기능 그룹을 수행하게 하는 명령어를 포함한다. 컴퓨터 실행가능 명령어는, 예를 들어, 바이너리, 어셈블리어와 같은 중간 포맷 명령어, 또는 심지어 소스 코드일 수도 있다. 청구대상은 비록 구조적 특징 및/또는 방법론적 동작에 특정된 언어로 기술되었지만, 첨부된 청구항에 정의된 청구대상은 반드시 기술된 특징 또는 전술한 동작으로 제한되지는 않는다는 것을 이해해야 한다. 오히려, 기술된 특징 및 동작은 청구항을 구현하는 예시적인 형태로 개시된다.
당업자는 본 발명이 개인용 컴퓨터, 데스크탑 컴퓨터, 랩탑 컴퓨터, 메시지 프로세서, 핸드헬드 장치, 멀티 프로세서 시스템, 마이크로프로세서 기반 또는 프로그램가능 가전, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 모바일 전화기, PDA, 페이저, 라우터, 스위치 등을 포함하는 많은 유형의 컴퓨터 시스템 구성을 갖는 네트워크 컴퓨팅 환경에서 실시될 수 있음을 이해할 수 있을 것이다. 본 발명은 또한 (유선 데이터 링크, 무선 데이터 링크, 또는 유선 및 무선 데이터 링크의 조합에 의해 )네트워크를 통해 링크되는 로컬 및 원격 컴퓨터 시스템이 모두 태스크를 수행하는 분산 시스템 환경에서 실시될 수도 있다. 분산 시스템 환경에서, 분산 시스템 환경에서, 프로그램 모듈은 로컬 및 원격 메모리 저장 장치에 위치할 수 있다.
도 2는 컴파일러(210)를 포함하는 시스템(200)을 도시한 것이다. 컴파일러(210)는 예컨대 컴퓨팅 시스템(100)을 사용하여 동작할 수 있다. 예를 들어, 컴퓨팅 시스템(100)은 컴퓨터 프로그램 제품을 구성하는 하나 이상의 컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 실행가능 명령어에 액세스할 수 있다. 컴퓨팅 시스템(100)은 프로세서(102)를 사용하여 이들 컴퓨터 실행가능 명령어를 실행할 수 있고, 이에 따라 컴퓨팅 시스템은 컴파일러(210)를 인스턴스화하고/하거나 작동시킬 수 있다.
컴파일러(210)는 소스 코드(201)에 액세스하고 그 응답으로 중간 언어 코드(211)를 생성한다. 중간 언어 코드(211)는, 흔히 "이진 코드" 또는 "바이너리"라고 하는 기계 실행가능 코드로 먼저 변환되지 않으면 컴퓨팅 시스템에 의해 직접 실행될 수 없다. 그러나, 중간 언어 코드(211)는 정적 분석 툴(220)에 의해 정적으로 분석될 수 있다.
도시된 소스 코드(201)는 2개의 컨트랙트(202A, 202B)를 포함한다. 그러나, 생략부호(202C)는 소스 코드 내에 임의의 수의 컨트랙트가 있을 수 있음을 나타낸다. 컨트랙트(202A, 202B, 202C)는 이하에서 총괄하여 "컨트랙트(202)"라고 지칭되기도 한다. 각각의 컨트랙트는, 바이너리가 실제로 실행되는 런타임 환경에 직면할 경우에 술부가 참인지에 따라 실행 스코프의 추가 실행을 조정한다. "실행 스코프(execution scope)"는 컴파일러(210)에 의해 컴파일되는 프로그램 및 컴파일의 일환으로 프로그램에 연관된 임의의 코드로 정의된다.
예를 들어, 컨트랙트는 컴포넌트에 대한 전제 조건과 연관될 수 있으며, 이 경우 그 컴포넌트가 호출될 때, 전제 조건을 평가함으로써 컨텍스트가 체크된다. 전제 조건이 참이 아니면, 컴포넌트는 실행되지 않는다. 예를 들어, 도 3a는 실행 흐름이 컴포넌트(310A)에 도달하는 환경(300A)을 도시한 것이다. 컨트랙트(311A)는 관련 술부(312A)를 갖는다. 술부(312A)는 전제 조건이 만족되는지 여부를 판정하기 위해 검증된다. 술부(312A)가 참이면, 컴포넌트(310A)의 로직(313A)이 실행되고 실행 흐름(301A)이 정상적으로 계속된다. 그러나, 술부(312A)가 참이 아니면, 컴포넌트(310)의 로직(313A)이 실행되지 않고 대신에 실행 흐름(301A)이 빠른 실패 이벤트(fail fast event)에 직면한다.
빠른 실패 이벤트는 실행 컨텍스트(즉, 컴파일된 프로그램)가 계속 실행하도록 허용되지 않음을 의미한다. 오류 복구 로직이 실행되면, 오류 복구 로직은 내부로부터 실행 컨텍스트로 제공되지 않는다. 대신에, 오류 복구 로직은, 실행한다고 해도, 실행 스코프 외부에서 실행되는 외부 오류 복구 로직이다.
컨트랙트는 컴포넌트에 대한 사후 조건과 연관될 수 있는데, 이 경우 컴포넌트가 호출될 때, 사후 조건이 체크된다. 예를 들어, 도 3b는 실행 흐름(301B)이 컴포넌트(310B)에 도달하는 환경을 도시한 것이다. 그 후, 컴포넌트의 로직(313B)이 실행된다. 로직(313B)이 완료된 후에, 실행 흐름(301B)은 연관된 술부(312B)를 갖는 컨트랙트(311B)와 직면한다. 이 점에서, 술부(312B)는 사후 처리가 만족되었는지 여부를 판정하기 위해 검증된다. 술부(312B)가 참이면, 실행 흐름(301B)은 컴포넌트(310B)로부터 빠져나오고 정상적으로 계속된다. 그러나, 술부(312B)가 참이 아니면, 실행 흐름(301B)은 빠른 실패 이벤트와 마주친다.
도 2로 되돌아가서, 도시된 소스 코드(201)는 또한 3개의 동작(203A, 203B, 203C)을 포함한다. 그러나, 생략부호(203D)는 소스 코드(201) 내에 임의의 수의 동작이 있을 수 있음을 나타낸다. 동작(203A, 203B, 203C, 203D)은 이하에서 총괄하여 "동작(203)"으로도 지칭될 것이다. 이들 동작은 동작은 프로그램의 로직과 연관된 실제 동작이다. 예를 들어, 도 3a 및 3b를 참고하면, 동작(203)은 사실 컴포넌트(210A, 210B)의 로직(213A, 213B)의 부분이다.
컴파일러(210)는 동작(203)이 모두 보존되도록 하는 중간 언어 코드(211)를 생성한다. 즉, 중간 언어 코드(211)가 추후에 이진 코드로 변환될 때, 그 이진 코드는 동작을 일으키는 바이너리 명령어를 갖는다. 중간 언어 코드(211)는 또한 컨트랙트(202)가 지시된 동작(203)을 변경하지 않고 중간 언어 코드(211)로부터 제거될 수 있도록 의미론적으로 구조화된 방식으로 이들 컨트랙트를 포함한다.
일부 실시예에서, 컴파일러(210)는 술부가 외부적으로 볼 수 있는 부작용(externally visible side effect)을 포함하는 적어도 몇몇 조건을 검출하도록 구성된다. 이 경우, 컴파일러(210)는, 컴파일 프로세스에서 오류를 일으킴으로써 외부적으로 볼 수 있는 부작용이 없도록 하여 소스 코드(201)의 작성자가 술부를 포함하는 컨트랙트 또는 어서션으로부터 외부적으로 볼 수 있는 부작용을 제거하도록 수정하게 한다. 이런 방식으로, 컴파일 후 남아있는 컨트랙트(202)는 외부적으로 볼 수 있는 부작용을 갖지 않는 것처럼 취급될 수 있다.
전제 조건인 컨트랙트(202)는 실행가능 컴포넌트의 호출자가 컴포넌트를 호출하기 전에 컨트랙트의 의미론적 이해를 갖는 방식으로 의미론적으로 구조화된다. 예를 들어, 도 3a의 경우를 고려해 보면, 컨트랙트(311A)는 컴포넌트(310A)의 호출자에게 의미론적으로 액세스가능할 것이다. 따라서, 호출자가 컴포넌트(310A)의 API(Application Program Interface)에 대한 의미론적 이해를 갖는 것과 마찬가지로, 호출자는 또한 컨트랙트(312A)에 대한 의미론적 이해를 가질 것이다. 따라서, 런타임 시에, 제2 컴포넌트를 호출하는 제1 컴포넌트는 제2 컴포넌트를 호출하기 전에 먼저 제2 컴포넌트의 컨트랙트가 충족될 것인지를 확인하기 위해 체크할 수 있다. 컨트랙트가 충족될 것으로 제1 컴포넌트가 판정하면, 제1 컴포넌트는 호출을 할 수 있다. 그러나, 컨트랙트가 제1 컴포넌트가 충족되지 않을 것으로 판정하면, 제1 컴포넌트는 제2 컴포넌트를 호출하지 않을 수 있는데, 이는 그 호가 빠른 실패 이벤트를 일으킬 것이기 때문이다. 그 다음에 제1 컴포넌트는 다른 실행 경로를 시도하도록 구성될 수 있으며, 이에 따라 불필요한 빠른 실패 이벤트를 방지할 수 있다.
시스템(200)은 또한 정적 분석 툴(220)을 포함한다. 정적 분석 툴(220)은 중간 언어 코드(211) 내에 포함된 컨트랙트 체크(202)의 실행을 비롯하여 중간 언어 코드(211)를 평가하도록 구성된다. 정저거 분석 툴(220)의 다양한 예들이 제공될 것이다. 이들 예는 서로 배타적이지 않다. 내부에 컨트랙트(202)를 포함하는 중간 언어 코드(211)를 정적으로 분석하는 복수의 정적 분석 툴(220)이 존재할 수 있다.
정적 분석기(220)는, 예컨대 컴퓨팅 시스템을 사용하여 동작할 수 있다. 예를 들어, 컴퓨팅 시스템(100)은 컴퓨터 프로그램 제품을 구성하는 하나 이상의 컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 실행가능 명령어에 액세스할 수 있다. 컴퓨팅 시스템(100)은 프로세서(102)를 사용하여 컴퓨터 실행가능 명령어를 실행함으로써 컴퓨팅 시스템으로 하여금 정적 분석기(220)를 인스턴스화하고/하거나 작동시키도록 할 수 있다.
일례로서, 정적 분석기는 중간 언어 코드(211)에 기초하여 바이너리를 생성하는 백엔드 컴파일러일 수 있다. 반면에, 컴파일러(210)는 프론트엔드 컴파일러로서 보일 수 있다. 프론트 엔드 컴파일러는 소스 코드를 중간 언어 코드로 변환한다. 백엔드 컴파일러는 결과의 중간 언어 코드를 기계 코드로 변환한다. 백엔드 컴파일러는, 중간 언더 코드(211) 내의 컨트랙트(202)의 의미론적 구조에 액세스하면, 이 의미론적 지식에 기초하여 임의의 수의 최적화를 만들 수 있다. 이들 최적화 중 몇 개를 이제 도 4a 및 4b를 참고하여 설명할 것이다.
도 4a는 소스 코드 또는 중간 언어 코드로 표현된 잠재적 컴포넌트 호의 체인(400A)을 도시한 것이다. 체인(400A)은 5개의 컴포넌트(401A 내지 405A)를 포함하는데, 이들은 각각 전제 조건인 관련 컨트랙트(411 내지 415)를 갖는다. 컴포넌트(401A)는 컨트랙트(412)가 충족될 경우에 실행되는 호 컴포넌트(402A)일 수 있다. 컴포넌트(402A)는 컨트랙트(413)가 충족될 경우 실행되는 호 컴포넌트(403A)일 수 있다. 컴포넌트(403A)는 컨트랙트(414)가 충족될 경우 실행되는 호 컴포넌트(404A)일 수 있다. 컴포넌트(405A)는 컨트랙트(414)가 충족될 경우 실행되는 호 컴포넌트(404A)일 수 있다. 체인(400A)은 소스 코드 및 따라서 중간 언어 코드(211)로 표현된 동작(203) 및 컨트랙트(202)의 의미론적 구조로 나타낸 가능한 실행 흐름을 나타낸다.
백엔드 컴파일러는 중간 언어를 정적으로 분석하여 체인(400A)의 개념을 공식화할 수 있다. 백엔드 컴파일러는, 런타임 시에 무엇이 발생할 지에 대한 백엔드 컴파일러 지식에 기초하여 연관된 컴포넌트에 대한 컨트랙트의 술부가 항상 참인지 여부를 판정하기 위한 시도를 하기 위해 정적 분석을 수행하도록 구성된다. 백엔드 컴파일러가 술부가 항상 참일 것이라고 판정하면, 백엔드 컴파일러는 컨트랙트 체크를 완전히 제거함으로써 바이너리를 최적화할 수 있다.
예를 들어, 도 4a를 참조하면, 백엔드 컴파일러는 컴포넌트(402A)가 호출될 때 컨트랙트(412)와 연관된 술부가 항상 참일 것으로 판정한다고 가정해 보자. 이 경우, 컴파일러는 상호작용이 일으나면 런타임 시에 컨트랙트를 체크하는 것을 위반하는 바이너리를 생성한다. 도 4b는 중간 언어 체인(400A)과 동일한 기능적 동작을 갖는 바이너리 컴포넌트 체인(400B)을 도시한 것이다. 구체적으로, 중간 언어 컴포넌트(401A 내지 405A)는 대응하는 바이너리 컴포넌트(401B 내지 405B)에 의해 구현된다. 그러나, 바이너리 컴포넌트(402B)는 컨트랙트(412)를 체크하지 않고 이에 따라 바이너리 컴포넌트(402B)의 실행을 보다 효율적으로 만든다는 점에 주목하라.
마찬가지로, 백엔드 컴파일러는 컴포넌트(403A)가 호출되는 시간에 컨트랙트(413)와 연관된 술부가 항상 참일 것이라고 결정한다. 따라서, 대응하는 바이너리 컴포넌트(403B)는 컨트랙트(413)를 체크하지 않고 생성된다. 또한, 이것은 바이너리 컴포넌트(403)의 실행을 보다 효율적으로 만든다.
백엔드 컴파일러는 컴포넌트(404A)가 컴포넌트(403A)에 의해 호출되면 컨트랙트(414)가 충족될 것으로 판정한다(즉, 백엔드 컴파일러는 컨트랙트와 연관된 술부가 참일 것이라고 판정할 수 있다). 그러나, 백엔드 컴파일러는 컴포넌트(404A)가 컴포넌트(405A)에 의해 호출되면 컨트랙트(414)가 충족될 지 여부를 판정할 수 없다(즉, 백엔드 컴파일러는 컨트랙트와 연관된 술부의 진위를 검증할 수 없다). 이 경우, 바이너리 컴포넌트(404B)는 2개의 엔트리 포인트로 생성된다. 엔트리 포인트들 중 하나의 엔트리 포인트(422)는 컨트랙트(414)의 체킹이 우회될 수 있게 하는데, 이는 이 예에서 바이너리 컴포넌트(403B)에 대해 적절한 엔트리 포인트일 것이다. 다른 엔트리 포인트(421)는 컨트랙트(414)가 체킹되게 하는데, 이는 이 예에서 바이너리 컴포넌트(405B)에 대한 적절한 엔트리 포인트일 것이다.
정적 분석기(220)는 술부가 외부적으로 볼 수 있는 부작용을 갖지 않도록 보장하기 위해 프런트엔드 컴파일러(210)와 협력할 수도 있다. 물론, 술부의 런타임 평가는 일부 처리 사이클을 소비하지만, 그렇지 않으면 이 평가는 컴포넌트의 로직에도 영향을 주지 않고, 컴파일 하의 프로그램의 의미론적으로 표현된 동작(203)에도 영향을 주지 않는다. 술부는 프로그램의 외부의 임의의 외부적으로 관측가능한 결과를 발생하지 않는 일부 부수적 계산을 포함할 수 있다. 그러나, 이것은 본 명세서 및 청구범위에서 "부작용(side-effect)"으로 고려되지 않는다. 외부적으로 관측가능한 부작용이 없음을 보장함으로써, 이 프로그램은, 컨트랙트가 존재하는지 여부에 관계없이, 동일한 외부적으로 관측가능한 동작으로 실행할 것이다. 이것은 흔히 프로그램의 저작 및 테스트에 포함되지만, 흔히 프로그램의 탑재 전에 제거된다. 따라서, 테스트 하의 프로그램의 동작은 프로그램이 탑재된 후의 동작과 동일할 것이다.
정적 분석기(220)는 또한 리팩토링(refactoring) 툴, 검증 툴, 자동화된 문서 생성기일 수도 있고, 및/또는 중간 언어 코드(211) 내에서 의미론적으로 표현된 컨트랙트(202)를 사용하여 중간 언어 코드(211)에 대한 임의의 다른 유형의 정적 분석을 수행할 수 있다. 예를 들어, 정적 분석기(220)는 컨트랙트와 연관된 술부가 항상 거짓일 것으로 판정할 수 있고 프로그램이 버그를 포함한다고 프로그래머에게 알릴 수 있다.
따라서, 본 명세서에 기술된 원리는 컨트랙트를 포함하는 중간 언어 코드의 강력하고 지능적인 정적 분석을 허용하며, 하나의 컴포넌트가 다른 컴포넌트를 호출할 때 바이너리에 중요한 최적화가 만들어지게 한다. 이들 원리는 하나의 프로세스로부터의 컴포넌트가 다른 프로세스로부터의 컴포넌트를 호출하는 경우로 확장될 수도 있다.
도 5a 및 5b는 프로세스간 통신을 용이하게 하는 방법(500A 및 500B)의 흐름도를 각각 도시한 것이다. 방법(500A)은, 수행되면, 도 5b의 방법(500B) 이전에 수행될 것이다. 이 방법(500B)(및 수행될 경우 방법(500A))은 프로세스간 호의 채널 내에 개념적으로 존재하는 추상화 계층에 의해 수행될 수 있다. 도 6은 프로세스간 통신이 일어날 수 있는 환경(600)을 도시한다. 따라서, 도 5a 및 5b는 도 6의 환경(600)을 자주 참조하여 설명할 것이다.
도 5a의 방법(500A)은 제1 프로세스 내의 제1 컴포넌트가 제2 프로세스 내의 제2 컴포넌트와 프로세스간 통신을 요청하였다는 검출에 응답하여 수행된다(동작 501). 예를 들어, 도 6의 환경(600)에서, 프로세스(611) 내의 컴포넌트(601)는 프로세스(612) 내의 컴포넌트(602)에 통신을 보내야 한다. 그 다음에, 방법(500A)은 프로세스(611) 내의 채널 컴포넌트(621)에 의해 수행될 수 있고, 방법(500B)은 프로세스(612) 내의 채널 컴포넌트(622)에 의해 수행될 수 있다. 방법(500A, 500B)의 작업들은 컴포넌트(601, 602)로부터 감춰질 수 있다. 대신에, 컴포넌트(601, 602)는 단순히 프로세스간 채널(610)을 통해 용이해지는 통신을 볼 수 있다.
프로세스간 통신이 제1 컴포넌트(601)(도 5a의 동작(501))로부터 송신되어야 한다는 통지에 응답하여, 채널 컴포넌트(621)는 연속 실행에 대한 컨트랙트가 만족되는지 여부를 확인할 수 있다(도 5a의 판정 블록(502)). 컨트랙트는 안전한 프로세스간 통신을 허용하도록 설계된 술부를 포함할 수 있다. 컨트랙트가 만족되지 않으면(판정 블록(502)에서 "아니오"), 채널 컴포넌트(621)는 통신을 금지한다(동작(503)). 반면에, 컨트랙트가 만족되면(판정 블록(502)에서 "예"), 채널 컴포넌트(621)는 타겟 프로세스 내의 채널 컴포넌트(622)에 프로세스간 메시지를 보낸다(동작(504)).
도 5b는 방법(500A)이 이전에 수행되었는지의 여부에 관계없이 타겟 채널 컴포넌트가 인입 메시지를 처리하는 방법(500B)의 흐름도를 도시한 것이다. 채널 컴포넌트(622)는 먼저 프로세스간 메시지를 수신한다(동작(511)). 그 다음에 채널 컴포넌트(621)는 연속 실행에 대한 컨트랙트가 만족되는지 여부를 검증할 수 있다(도 5b의 판정 블록(512)). 또한, 컨트랙트는 안전한 프로세스간 통신을 허용하도록 고안된 술부를 포함할 수 있다.
컨트랙트가 만족되지 않으면(판정 블록(512)에서 "아니오"), 채널 컴포넌트(622)는 통신을 금지하고(동작(513)), 장래에 프로세스(612)와 통신하기 위한 프로세스(611)의 임의의 권한을 종료시킬 수 있다. 컨트랙트는 타겟 채널 컴포넌트(622)에 의해 판정된 대로 만족되지 않았으므로, 호출 프로세스(611)가 방법(500A)을 수행하지 않았을 가능성이 더 많다. 따라서, 프로세스는 안전한 통신을 따르지 않는 것처럼 보일 것이며, 프로세스들(611, 612) 사이의 임의의 통신의 종결이 보장될 수 있다. 따라서, 빠른 실패를 일으킬 수 있는 임의의 결함이 그 결함을 포함하는 프로세스로 한정될 수 있다. 반면에, 컨트랙트가 만족되면(판정 블록(512)에서 "예"), 프로세스간 통신은 타겟 컴포넌트(602)로 전달된다(동작(514)).
따라서, 컨트랙트의 의미론적 구조의 보존이 중간 언어 코드로 이루어진다. 또한, 바이너리로의 컴파일을 최적화하기 위한 그러한 의미론적 구조의 사용이 기술되었다.
본 발명은 그 사상 또는 필수적 특징으로부터 벗어나지 않고 다른 특정한 형태로 구현될 수 있다. 기술된 실시예는 모든 면에서 예시적인 것일 뿐 제한적인 것으로 간주되어서는 안 된다. 따라서, 본 발명의 범위는 전술한 상세한 설명에 의해서가 아니라 첨부한 청구범위에 의해 나타내어진다. 청구범위의 균등물의 의미 및 범위 내에 포함되는 모든 변경들이 이들의 범위 내에 포함되어야 한다.

Claims (20)

  1. 시스템으로서,
    하나 이상의 하드웨어 프로세서와,
    상기 하나 이상의 하드웨어 프로세서에 의해 실행가능하며 중간 언어 프로그램 코드의 정적 분석의 일부로서 적어도 이하의 동작들을 수행하도록 상기 시스템을 구성하는 컴퓨터 실행가능 명령어를 저장한 하나 이상의 하드웨어 저장 장치를 포함하되,
    상기 동작들은
    상기 중간 언어 프로그램 코드 내의 복수의 컴포넌트를 식별하는 동작- 각각의 컴포넌트는 상이한 실행 스코프(execution scope) 및 대응하는 컨트랙트(a corresponding contract)를 포함하고, 각각의 컨트랙트는 대응하는 실행 스코프의 런타임 시에 상기 컨트랙트를 만나게 되면 상기 컨트랙트의 술부(predicate)가 참인지 여부에 따라 상기 대응하는 실행 스코프의 추가 실행을 조정함 -과,
    상기 복수의 컴포넌트 중 특정 컴포넌트에 대응하는 특정 컨트랙트의 특정 술부가 상기 특정 컴포넌트의 런타임시 항상 참이 아닐 수도 있는 것으로 판정하는 동작과,
    하나 이상의 실행가능 바이너리로 상기 복수의 컴포넌트에 대한 실행가능 코드를 생성하는 동작을 포함하되,
    상기 실행가능 코드를 생성하는 동작은 상기 특정 컴포넌트에 대한 실행가능 코드를 생성할 때, 상기 복수의 컴포넌트 중 하나 이상의 다른 컴포넌트의 제1 세트에 의해 상기 특정 컴포넌트가 호출되는 경우 상기 특정 컨트랙트의 체킹이 런타임시 우회되게 하는 제1 엔트리 포인트와, 상기 복수의 컴포넌트 중 하나 이상의 다른 컴포넌트의 제2 세트에 의해 상기 특정 컴포넌트가 호출되는 경우 상기 특정 컨트랙트가 런타임시 체킹되게 하는 제2 엔트리 포인트를 갖는 실행가능 코드의 일부를 생성하는 것을 포함하는
    시스템.
  2. 제1항에 있어서,
    상기 특정 컴포넌트는 상기 시스템에게 행동(behavior)을 수행하도록 명령하고, 상기 특정 컨트랙트는 상기 특정 컨트랙트의 체킹이 상기 행동을 변경하지 않고 제거될 수 있도록 의미론적으로 구조화되는
    시스템.
  3. 제1항에 있어서,
    각각의 컨트랙트는 대응하는 컴포넌트의 인터페이스를 사용하여 상기 대응하는 컴포넌트의 호출자(caller)에게 의미론적으로 액세스가능한
    시스템.
  4. 제1항에 있어서,
    컨트랙트는 대응하는 컴포넌트에 대한 전제조건(pre-condition)인
    시스템.
  5. 제1항에 있어서,
    컨트랙트는 대응하는 컴포넌트에 대한 사후 조건(post-condition)인
    시스템.
  6. 제1항에 있어서,
    런타임시 상기 특정 술부를 만났을 때 상기 특정 술부가 참이 아닌 경우, 상기 시스템은 상기 특정 컴포넌트의 실행 스코프 외부에서 외부 복구 코드(external recovery code)를 실행하도록 구성된
    시스템.
  7. 제1항에 있어서,
    런타임시 상기 특정 술부를 만났을 때 상기 특정 술부가 참이 아닌 경우, 상기 시스템은 상기 특정 술부가 참이 아닌 것에 응답하여 아무런 복구 코드도 실행되지 않도록, 상기 특정 컴포넌트에 대해 빠른 실패(fast fail)를 행하도록 구성된
    시스템.
  8. 제1항에 있어서,
    상기 시스템은 또한 술부가 외부에서 볼 수 있는 부작용(externally visible side effect)을 포함하는 적어도 일부 조건을 검출하도록 구성되는
    시스템.
  9. 제1항에 있어서,
    상기 시스템은 또한 상기 하나 이상의 실행가능 바이너리를 저장 장치에 저장하도록 구성되는
    시스템.
  10. 제1항에 있어서,
    상기 시스템은, 또한,
    상기 복수의 컴포넌트 중 또 다른 컴포넌트에 대응하는 또 다른 컨트랙트의 또 다른 술부가 상기 또 다른 컴포넌트의 런타임시 항상 참일 것이라고 판정하고,
    하나 이상의 실행가능 바이너리로 상기 복수의 컴포넌트에 대한 실행가능 코드를 생성하는 경우, 상기 또 다른 술부가 상기 또 다른 컴포넌트의 런타임시 항상 참일 것이라고 판정한 것에 기초하여, 상기 또 다른 컨트랙트 및 상기 또 다른 술부에 대응하는 어떠한 실행가능 코드도 포함하지 않는 상기 또 다른 컴포넌트에 대한 실행가능 코드의 제3 부분을 생성하도록 구성된
    시스템.
  11. 하나 이상의 하드웨어 프로세서를 포함하는 컴퓨터 시스템에서, 중간 언어 프로그램 코드의 정적 분석을 수행하기 위해 구현되는 방법으로서,
    상기 하나 이상의 하드웨어 프로세서에서, 상기 중간 언어 프로그램 코드 내의 복수의 컴포넌트를 식별하는 단계- 각각의 컴포넌트는 상이한 실행 스코프 및 대응하는 컨트랙트를 포함하고, 각각의 컨트랙트는 대응하는 실행 스코프의 런타임 시에 상기 컨트랙트를 만나게 되면 상기 컨트랙트의 술부가 참인지 여부에 따라 상기 대응하는 실행 스코프의 추가 실행을 조정함 -와,
    상기 하나 이상의 하드웨어 프로세서에서, 상기 복수의 컴포넌트 중 특정 컴포넌트에 대응하는 특정 컨트랙트의 특정 술부가 상기 특정 컴포넌트의 런타임시 항상 참이 아닐 수도 있는 것으로 판정하는 단계와,
    상기 하나 이상의 하드웨어 프로세서에서, 하나 이상의 실행가능 바이너리로 상기 복수의 컴포넌트에 대한 실행가능 코드를 생성하는 단계를 포함하되,
    상기 실행가능 코드를 생성하는 단계는 상기 특정 컴포넌트에 대한 실행가능 코드를 생성할 때, 상기 복수의 컴포넌트 중 하나 이상의 다른 컴포넌트의 제1 세트에 의해 상기 특정 컴포넌트가 호출되는 경우 상기 특정 컨트랙트의 체킹이 런타임시 우회되게 하는 제1 엔트리 포인트와, 상기 복수의 컴포넌트 중 하나 이상의 다른 컴포넌트의 제2 세트에 의해 상기 특정 컴포넌트가 호출되는 경우 상기 특정 컨트랙트가 런타임시 체킹되게 하는 제2 엔트리 포인트를 갖는 실행가능 코드의 일부를 생성하는 것을 포함하는
    방법.
  12. 제11항에 있어서,
    상기 정적 분석은 리팩토링 툴(refactoring tool), 검증 툴, 자동화된 문서 생성기 중 적어도 하나에 의해 수행되는
    방법.
  13. 제11항에 있어서,
    컨트랙트는 대응하는 컴포넌트에 대한 전제조건인
    방법.
  14. 제11항에 있어서,
    컨트랙트는 대응하는 컴포넌트에 대한 사후 조건인
    방법.
  15. 제11항에 있어서,
    런타임시 상기 특정 술부를 만났을 때 상기 특정 술부가 참이 아닌 경우, 상기 특정 컴포넌트의 실행 스코프 외부에서 외부 복구 코드가 실행되는
    방법.
  16. 제11항에 있어서,
    런타임시 상기 특정 술부를 만났을 때 상기 특정 술부가 참이 아닌 경우, 상기 특정 술부가 참이 아닌 것에 응답하여 아무런 복구 코드도 실행되지 않도록, 상기 특정 컴포넌트에 대해 빠른 실패가 행해지는
    방법.
  17. 제11항에 있어서,
    상기 하나 이상의 하드웨어 프로세서에 의해, 상기 하나 이상의 실행가능 바이너리를 하나 이상의 하드웨어 저장 장치에 저장하는 단계를 더 포함하는
    방법.
  18. 제11항에 있어서,
    상기 복수의 컴포넌트 중 또 다른 컴포넌트에 대응하는 또 다른 컨트랙트의 또 다른 술부가 상기 또 다른 컴포넌트의 런타임시 항상 참일 것으로 판정하는 단계와,
    하나 이상의 실행가능 바이너리로 상기 복수의 컴포넌트에 대한 실행가능 코드를 생성하는 경우, 상기 또 다른 술부가 상기 또 다른 컴포넌트의 런타임시 항상 참일 것으로 판정한 것에 기초하여, 상기 또 다른 컨트랙트 및 상기 또 다른 술부에 대응하는 어떠한 실행가능 코드도 포함하지 않는 상기 또 다른 컴포넌트에 대한 실행가능 코드의 제3 부분을 생성하는 단계를 더 포함하는
    방법.
  19. 컴퓨터 실행가능 명령어를 저장한 하나 이상의 하드웨어 저장 메모리로서,
    상기 컴퓨터 실행가능 명령어는 컴퓨터 시스템의 하나 이상의 하드웨어 프로세서에 의해 실행가능하며, 중간 언어 프로그램 코드의 정적 분석의 일부로서 적어도 이하의 동작들을 수행하도록 상기 컴퓨터 시스템을 구성하고,
    상기 동작들은
    상기 중간 언어 프로그램 코드 내의 복수의 컴포넌트를 식별하는 동작- 각각의 컴포넌트는 상이한 실행 스코프 및 대응하는 컨트랙트를 포함하고, 각각의 컨트랙트는 대응하는 실행 스코프의 런타임 시에 상기 컨트랙트를 만나게 되면 상기 컨트랙트의 술부가 참인지 여부에 따라 상기 대응하는 실행 스코프의 추가 실행을 조정함 -과,
    상기 복수의 컴포넌트 중 제1 컴포넌트에 대응하는 제1 컨트랙트의 제1 술부가 상기 복수의 컴포넌트 중 상기 제1 컴포넌트의 런타임시 항상 참일 것이라고 판정하는 동작과,
    상기 복수의 컴포넌트 중 제2 컴포넌트에 대응하는 제2 컨트랙트의 제2 술부가 상기 복수의 컴포넌트 중 상기 제2 컴포넌트의 런타임시 항상 참이 아닐 수도 있는 것으로 판정하는 동작과,
    하나 이상의 실행가능 바이너리로 상기 복수의 컴포넌트에 대한 실행가능 코드를 생성하는 동작을 포함하되,
    상기 실행가능 코드를 생성하는 동작은
    상기 복수의 컴포넌트 중 상기 제1 컴포넌트에 대한 실행가능 코드를 생성할 때, 상기 제1 술부가 상기 복수의 컴포넌트 중 상기 제1 컴포넌트의 런타임시 항상 참일 것이라고 판정한 것에 기초하여, 상기 제1 컨트랙트 및 상기 제1 술부에 대응하는 어떠한 실행가능 코드도 포함하지 않는 실행 코드의 제1 부분을 생성하는 것과,
    상기 복수의 컴포넌트 중 상기 제2 컴포넌트에 대한 실행가능 코드를 생성할 때, 상기 복수의 컴포넌트 중 하나 이상의 다른 컴포넌트의 제1 세트에 의해 상기 제2 컴포넌트가 호출되는 경우 상기 제2 컨트랙트의 체킹이 런타임시 우회되게 하는 제1 엔트리 포인트와, 상기 복수의 컴포넌트 중 하나 이상의 다른 컴포넌트의 제2 세트에 의해 상기 제2 컴포넌트가 호출되는 경우 상기 제2 컨트랙트가 런타임시 체킹되게 하는 제2 엔트리 포인트를 갖는 실행가능 코드의 제2 부분을 생성하는 것을 포함하는
    하드웨어 저장 메모리.
  20. 제19항에 있어서,
    런타임시 상기 제2 술부를 만났을 때 상기 제2 술부가 참이 아닌 경우, 상기 컴퓨터 시스템은 상기 제2 술부가 참이 아닌 것에 응답하여 아무런 복구 코드도 실행되지 않도록, 상기 복수의 컴포넌트 중 상기 제2 컴포넌트에 대해 빠른 실패를 행하도록 구성된
    하드웨어 저장 메모리.
KR1020157025030A 2013-03-14 2014-03-11 컨트랙트에 대한 운영 체제 지원 기법 KR102118236B1 (ko)

Applications Claiming Priority (3)

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

Publications (2)

Publication Number Publication Date
KR20150130298A KR20150130298A (ko) 2015-11-23
KR102118236B1 true KR102118236B1 (ko) 2020-06-02

Family

ID=50884465

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157025030A KR102118236B1 (ko) 2013-03-14 2014-03-11 컨트랙트에 대한 운영 체제 지원 기법

Country Status (6)

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

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验证方法
CN111770206B (zh) * 2020-08-31 2020-12-29 支付宝(杭州)信息技术有限公司 一种部署智能合约的方法、区块链节点和存储介质
CN111768187A (zh) * 2020-08-31 2020-10-13 支付宝(杭州)信息技术有限公司 一种部署智能合约的方法、区块链节点和存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011508317A (ja) 2007-12-21 2011-03-10 マイクロソフト コーポレーション コードエラーを減らすためのコントラクトプログラミング

Family Cites Families (8)

* 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
US8930913B2 (en) * 2010-09-28 2015-01-06 Microsoft Corporation Intermediate representation construction for static analysis

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011508317A (ja) 2007-12-21 2011-03-10 マイクロソフト コーポレーション コードエラーを減らすためのコントラクトプログラミング

Also Published As

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

Similar Documents

Publication Publication Date Title
KR102118236B1 (ko) 컨트랙트에 대한 운영 체제 지원 기법
US9824214B2 (en) High performance software vulnerabilities detection system and methods
US9507943B1 (en) Analysis tool for data security
US20060253739A1 (en) Method and apparatus for performing unit testing of software modules with use of directed automated random testing
US10725897B2 (en) Systems and methods for automatically parallelizing sequential code
US8510604B2 (en) Static data race detection and analysis
US20220335135A1 (en) Vulnerability analysis and reporting for embedded systems
US20120192162A1 (en) Optimizing Handlers for Application-Specific Operations for Validating C++ Programs Using Symbolic Execution
US10185647B2 (en) Debugging remote vertex code on test machine
Perez et al. Generating predicate callback summaries for the android framework
Xu et al. Concolic execution on small-size binaries: Challenges and empirical study
US9075921B2 (en) Error simulation
US8839216B2 (en) Compiler optimization based on collectivity analysis
US10599554B2 (en) Dynamic instrumentation based on detected errors
Wang et al. Which defect should be fixed first? Semantic prioritization of static analysis report
US11030075B2 (en) Efficient register breakpoints
US9841960B2 (en) Dynamic provision of debuggable program code
US9710360B2 (en) Optimizing error parsing in an integrated development environment
US8572594B2 (en) Invasion analysis to identify open types
Kirner et al. Optimizing compilation with preservation of structural code coverage metrics to support software testing
Metcalf et al. Detecting potential deadlocks through change impact analysis
Laaber Deliberate microbenchmarking of software systems
Saïdi Logical foundation for static analysis: Application to binary static analysis for security
Rasheed Security analyses for detecting deserialisation vulnerabilities: a thesis presented in partial fulfilment of the requirements for the degree of Doctor of Philosophy in Computer Science at Massey University, Palmerston North, New Zealand
Pasala et al. An approach based on modeling dynamic behavior of the system to assess the impact of COTS upgrades

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant