KR102093531B1 - 외부 참조를 나타내지 않는 참조 속성 어노테이션 - Google Patents

외부 참조를 나타내지 않는 참조 속성 어노테이션 Download PDF

Info

Publication number
KR102093531B1
KR102093531B1 KR1020157009591A KR20157009591A KR102093531B1 KR 102093531 B1 KR102093531 B1 KR 102093531B1 KR 1020157009591 A KR1020157009591 A KR 1020157009591A KR 20157009591 A KR20157009591 A KR 20157009591A KR 102093531 B1 KR102093531 B1 KR 102093531B1
Authority
KR
South Korea
Prior art keywords
returned
input argument
executable component
object graph
immutable
Prior art date
Application number
KR1020157009591A
Other languages
English (en)
Other versions
KR20150070152A (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 KR20150070152A publication Critical patent/KR20150070152A/ko
Application granted granted Critical
Publication of KR102093531B1 publication Critical patent/KR102093531B1/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/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • G06F16/288Entity relationship models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • 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/468Specific access rights for resources, e.g. using capability register
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)
  • Storage Device Security (AREA)

Abstract

실행가능 컴포넌트로부터의 반환된 참조의 어노테이션(annotation)은 반환된 참조에 의해 참조된 특정 객체 그래프에 대한 외부 참조가 존재하지 않음을 나타낸다. 1) 실행가능 컴포넌트에 대한 입력 아규먼트가 없거나 또는 2) 각각의 입력 아규먼트가 변경불가능하거나 또는 객체 그래프를 가리키는 외부 변경가능 참조 및 외부 객체를 참조하는 내부 변경가능 참조를 갖고 있지 않은 객체 그래프를 나타낼 경우, 특정 속성이 반환된 참조에 할당된다. 따라서, 반환된 참조가 기록가능하면(실행가능 컴포넌트에 대한 호출 코드 또는 선언 코드를 평가함으로써 결정됨), 반환된 참조는 그것에 할당된 어떠한 액세스 승인도 자유롭게 가져야 하며, 또한 격리된 메모리 위치에 할당될 수 있는데, 이러한 할당은 반환된 참조로 하여금 특정 속성을 잃게 만들 것이다.

Description

외부 참조를 나타내지 않는 참조 속성 어노테이션{REFERENCE ATTRIBUTE ANNOTATION SIGNIFYING NO EXTERNAL REFERENCE}
컴퓨팅 시스템은 소프트웨어 프로그램을 실행함으로써 고도의 기능을 획득한다. 프로그램은 하드드라이브, 컴팩트 디스크, 썸드라이브(thumbdrive), 플래시 메모리 등과 같은 몇몇 지속 형태로 유지되는 컴퓨터 실행가능 명령어로 이루어진다. 실행 중에, 이러한 컴퓨터 실행가능 명령어는 흔히 휘발성 메모리에 로딩되며, 컴퓨팅 시스템의 하나 이상의 프로세서에 의해 실행되어 컴퓨팅 시스템으로 하여금 태스크를 수행하게 한다.
복수의 프로세서 또는 프로세서 코어를 갖는 컴퓨팅 시스템은 흔히 프로그램을 복수의 동시 실행 태스크로 분할한다. 이러한 동시 실행은 응답성 및 처리 효율을 향상시킬 수 있지만, 동시 실행은 상이한 태스크들이 컴퓨팅 시스템 내의 동일 데이터("공유 상태"로 알려져 있음)에 액세스하게 하도록 만들 수 있다.
그러나, 공유 상태에 대한 제한없는 액세스는 검출, 재현 및 해결하기 어려운 문제를 일으킬 수 있다. 이들 문제들 중에 데이터 레이스(data race)가 있다. 데이터 레이스는 하나의 태스크가 메모리에서 객체의 무효 상태를 관측할 수 있는 동안에 다른 태스크가 동시에 그 객체의 상태를 변화시키고 있는 상황이다. 데이터 레이스를 회피하면서 동시성의 혜택을 이용하는 것은 역사적으로 해결하기 어려운 문제이다.
본 명세서에 기술된 적어도 하나의 실시예는 실행가능 컴포넌트로부터의 반환된 참조(returned reference)의 어노테이션(annotation)에 관한 것이다. 반환된 참조는 특정 객체 그래프를 참조한다. 1) 실행가능 컴포넌트에 대한 입력 아규먼트가 없거나 또는 2) 각각의 입력 아규먼트가 변경불가능하거나 또는 객체 그래프를 가리키는 외부 변경가능 참조 및 외부 객체를 참조하는 내부 변경가능 참조를 갖고 있지 않은 객체 그래프를 나타낼 경우, 특정 속성이 반환된 참조에 할당된다. 특정 속성은 1) 반환된 참조에 의해 참조된 특정 객체 그래프(또는 특정 객체 그래프 내의 임의의 객체)에 대한 외부 참조가 없다는 것과, 2) 객체 그래프 외부의 임의의 객체에 대한 객체 그래프 내에 변경가능 참조가 없다는 것을 나타낸다. 따라서, 반환된 참조는 반환된 참조에 할당된 승인(permission)의 범위 내에서 그것에 할당된 어떠한 액세스 승인도 자유롭게 가져야 한다. 예를 들어, 반환된 참조가 기록가능한 것으로 선언되면, 반환된 참조는 반환된 참조가 임의의 승인을 할당받고/또는 격리된 메모리 위치에 할당될 수 있음을 나타내기 위해 특정 속성으로 어노테이트될 수 있는데, 이러한 할당은 반환된 참조로 하여금 특정 속성을 잃게 만들 수도 있다. 따라서, 본 명세서에 기술된 원리는 외부 참조가 없는 참조의 적절한 검출 및 어노테이션을 허용한다.
본 개요는 청구항의 청구대상의 핵심적은 특징이나 필수적 특징을 밝히고자 함이 아니며, 청구항의 청구대상의 범위를 결정하는 것을 돕기 위한 것도 아니다.
전술한 이점들 및 특징들을 얻을 수 있는 방법을 설명하기 위해, 첨부한 도면을 참고하여 다양한 실시예들의 보다 구체적인 설명을 할 것이다. 이들 도면은 단지 샘플 실시예를 도시한 것이며 따라서 본 발명의 범위를 제한하는 것으로 고려되어서는 안 된다는 점을 이해하면서, 첨부 도면을 사용하여 부가적인 특징 및 세부사항을 갖는 실시예들을 설명할 것이다.
도 1은 본 명세서에 기술된 일부 실시예들이 실시될 수 있는 컴퓨팅 시스템을 개략적으로 도시한 것이다.
도 2는 객체 그래프의 변경가능성(mutability) 및 아이솔레이션(isolation)을 추적하는 프레임워크 및 및 어노테이션 컴포넌트를 포함하는 환경을 도시한 것이다.
도 3은 특정 객체 그래프를 참조하는 참조를 적어도 반환하는 실행가능 컴포넌트를 평가하고 실행가능 컴포넌트에 의해 반환된 참조를 어노테이트하기 위한, 도 2의 어노테이션 컴포넌트와 같은 어노테이션 컴포넌트에 대한 방법의 흐름도를 도시한 것이다.
도 4는 실행가능 컴포넌트가 입력 아규먼트를 수신하고 반환된 참조를 생성하는 환경을 도시한 것이다.
본 명세서에 기술된 실시예에 따르면, 실행가능 컴포넌트로부터의 반환된 참조의 어노테이션이 기술된다. 반환된 참조는 특정 객체 그래프를 참조한다. 1) 실행가능 컴포넌트에 대한 입력 아규먼트가 없거나 또는 2) 각각의 입력 아규먼트가 변경불가능하거나 또는 객체 그래프를 가리키는 외부 변경가능 참조 및 외부 객체를 참조하는 내부 변경가능 참조를 갖고 있지 않은 객체 그래프를 나타낼 경우, 특정 속성이 반환된 참조에 할당된다. 특정 속성은 1) 반환된 참조에 의해 참조된 특정 객체 그래프(또는 특정 객체 그래프 내의 임의의 객체)에 대한 외부 참조가 없다는 것과, 2) 객체 그래프 외부의 임의의 객체에 대한 객체 그래프 내에 변경가능 참조가 없다는 것을 나타낸다. 따라서, 반환된 참조는 반환된 참조에 할당된 승인의 범위 내에서 그것에 할당된 어떠한 액세스 승인도 자유롭게 가져야 한다. 예를 들어, 반환된 참조가 기록가능한 것으로 선언되면, 반환된 참조는 그 반환된 참조를 나타내기 위해 특정 속성으로 어노테이트될 수 있고, 따라서 임의의 승인을 할당받을 수도 있고/또는 격리된 메모리 위치에 할당될 수도 있는데, 이러한 할당은 반환된 참조로 하여금 특정 속성을 잃게 만들 수도 있다. 따라서, 본 명세서에 기술된 원리는 외부 참조가 없는 참조의 적절한 검출을 허용한다. 컴퓨팅 시스템에 대한 서두의 논의는 도 1과 관련하여 설명할 것이다. 그 다음에 도 2 내지 4와 관련하여 어노테이션의 동작 원리를 설명할 것이다.
컴퓨팅 시스템은 이제 점점 더 광범위한 형태를 취하고 있다. 컴퓨팅 시스템은, 예를 들어, 핸드헬드 장치, 어플라이언스, 랩탑 컴퓨터, 데스크탑 컴퓨터, 메인프레임, 분산 컴퓨팅 시스템, 또는 심지어 종래에는 컴퓨팅 시스템으로 고려되지 않던 장치들일 수도 있다. 본원 상세한 설명 및 청구범위에서, "컴퓨팅 시스템"이란 용어는 적어도 하나의 물리적 및 유형의 프로세서와, 프로세서에 의해 실행될 수 있는 컴퓨터 실행가능 명령어를 포함할 수 있는 물리적 및 유형의 메모리를 포함하는 임의의 장치 또는 시스템(또는 그 조합)을 포함하는 것으로 광범위하게 정의된다. 메모리는 임의의 형태를 취할 수 있으며 컴퓨팅 시스템의 특성 및 형태에 의존할 수 있다. 컴퓨팅 시스템은 네트워크 환경에 걸쳐 분산될 수 있고 복수의 구성 컴퓨팅 시스템(constituent computing system)을 포함할 수 있다.
도 1에 도시된 바와 같이, 가장 기본적인 구성에서, 컴퓨팅 시스템(100)은 통상적으로 적어도 하나의 프로세싱 유닛(102) 및 메모리(104)를 포함한다. 메모리(104)는 휘발성, 비휘발성 또는 이들의 일부 조합일 수 있는 물리적 시스템 메모리일 수 있다. "메모리"란 용어는 본 명세서에서 물리적 저장 매체와 같은 비휘발성 대용량 저장부를 지칭하는데 사용될 수 있다. 컴퓨팅 시스템이 분산되면, 프로세싱, 메모리 및/또는 저장 능력 또한 분산될 수 있다. 본 명세서에서 사용되는 바와 같이, "실행가능 모듈" 또는 "실행가능 컴포넌트"란 용어는 컴퓨팅 시스템 상에서 실행될 수 있는 소프트웨어 객체, 라우팅, 또는 방법을 지칭할 수 있다. 본 명세서에서 기술되는 다른 컴포넌트, 모듈, 엔진, 및 서비스는 컴퓨팅 시스템 상에서 실행되는 객체 또는 프로세스로서(예컨대, 별도의 스레드로서) 구현될 수 있다
이하의 설명에서, 하나 이상의 컴퓨팅 시스템에 의해 수행되는 동작들을 참조하여 실시예들을 설명한다. 이러한 동작들이 소프트웨어로 구현되면, 그 동작을 수행하는 관련 컴퓨팅 시스템의 하나 이상의 프로세서는 컴퓨팅 실행가능 명령어를 실행한 것에 응답하여 컴퓨팅 시스템의 동작을 지시한다. 예를 들어, 그러한 컴퓨터 실행가능 명령어는 컴퓨터 프로그램 제품을 형성하는 하나 이상의 컴퓨터 판독가능 매체 상에서 실시될 수 있다. 그러한 동작의 일례로 데이터 조작이 있다. 컴퓨터 실행가능 명령어(및 조작된 데이터)는 컴퓨팅 시스템(100)의 메모리(104)에 저장될 수 있다. 컴퓨팅 시스템(100)은 또한, 컴퓨팅 시스템(100)이 예컨대 네트워크(110)를 통해 다른 메시지 프로세서와 통신할 수 있게 하는 통신 채널(108)을 포함할 수도 있다.
본 명세서에 기술된 실시예는 예컨대 하나 이상의 프로세서 및 시스템 메모리와 같은 컴퓨터 하드웨어를 포함하는 특수 목적 또는 범용 컴퓨터를 포함하거나 이용할 수 있는데, 이에 대해서는 보다 상세히 후술한다. 본 명세서에 기술된 실시예는 또한 컴퓨터 실행가능 명령어 및/또는 데이터 구조를 반송 또는 저장하는 물리적 및 기타 컴퓨터 판독가능 매체를 포함한다. 이러한 컴퓨터 판독가능 매체는 범용 또는 특수목적 컴퓨터 시스템에 의해 액세스될 수 있는 임의의 이용가능 매체일 수 있다. 컴퓨터 실행가능 명령어를 저장하는 컴퓨터 판독가능 매체는 물리적 저장 매체이다. 컴퓨터 실행가능 매체를 반송하는 컴퓨터 판독가능 매체는 전송 매체이다. 따라서, 예를 들어 본 발명의 실시예들은 적어도 2개의 분명히 다른 종류의 컴퓨터 판독가능 매체, 즉 컴퓨터 저장 매체와 전송 매체를 포함한다.
컴퓨터 저장 매체는 RAM, ROM, EEPROM, CD-ROM, 또는 다른 광 디스크 저장부, 자기 디스크 저장부 또는 기타 자기 저장 장치, 또는 컴퓨터 실행가능 명령어 또는 데이터 구조의 형태로 원하는 프로그램 코드 수단을 저장하는데 사용될 수 있고 범용 또는 특수목적 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함한다.
"네트워크"는 컴퓨터 시스템 및/또는 모듈 및/또는 기타 전자 장치 사이에서 전자 데이터의 전달을 가능하게 하는 하나 이상의 데이터 링크로서 정의된다. 네트워크 또는 다른 통신 연결(유선, 무선 또는 유선 또는 무선의 조합)을 통해 컴퓨터에 정보가 전달되는 경우, 컴퓨터는 이 연결을 전송 매체로서 간주한다. 전송 매체는, 컴퓨터 실행가능 명령어 또는 데이터 구조의 형태로 원하는 프로그램 코드 수단을 반송하는데 사용될 수 있고 범용 또는 특수 목적 컴퓨터에 의해 액세스될 수 있는 네트워크 및/또는 데이터 링크를 포함할 수 있다. 이들의 조합이 또한 컴퓨터 판독가능 매체의 범위 내에 포함될 수 있다.
또한, 다양한 컴퓨터 시스템 컴포넌트에 도달하면, 컴퓨터 실행가능 명령어 또는 데이터 구조 형태의 프로그램 코드 수단은 자동으로 전송 매체에서 컴퓨터 저장 매체로 (또는 그 역으로) 전달될 수 있다. 예를 들어, 네트워크 또는 데이터 링크를 통해 수신된 컴퓨터 실행가능 명령어 또는 데이터 구조는 네트워크 인터페이스 모듈(예컨대, "NIC") 내의 RAM 내에 버퍼링될 수 있고, 그 후 최종적으로 컴퓨터 시스템 RAM 및/또는 컴퓨터 시스템에 있는 휘발성 컴퓨터 저장 매체로 전달될 수 있다. 따라서, 컴퓨터 저장 매체는 전송 매체를 또한 (또는 주로) 이용하는 컴퓨터 시스템 컴포넌트에 포함될 수 있다.
컴퓨터 실행가능 명령어는, 예컨대, 프로세서에서 실행될 경우에, 범용 컴퓨터, 특수 목적 컴퓨터, 또는 특수 목적 프로세싱 장치로 하여금 소정의 기능 또는 기능 그룹을 수행하게 하는 명령어를 포함한다. 컴퓨터 실행가능 명령어는, 예를 들어, 이진수, 어셈블리어와 같은 중간 포맷 명령어, 또는 심지어 소스 코드일 수도 있다. 청구대상은 비록 구조적 특징 및/또는 방법론적 동작에 특정된 언어로 기술되었지만, 첨부된 청구항에 정의된 청구대상은 반드시 기술된 특징 또는 전술한 동작으로 제한되지는 않는다는 것을 이해해야 한다. 오히려, 기술된 특징 및 동작은 청구항을 구현하는 예시적인 형태로 개시된다.
당업자는 본 발명이 개인용 컴퓨터, 데스크탑 컴퓨터, 랩탑 컴퓨터, 메시지 프로세서, 핸드헬드 장치, 멀티 프로세서 시스템, 마이크로프로세서 기반 또는 프로그램가능 가전, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 모바일 전화기, PDA, 페이저, 라우터, 스위치 등을 포함하는 많은 유형의 컴퓨터 시스템 구성을 갖는 네트워크 컴퓨팅 환경에서 실시될 수 있음을 이해할 수 있을 것이다. 본 발명은 또한 (유선 데이터 링크, 무선 데이터 링크, 또는 유선 및 무선 데이터 링크의 조합에 의해 )네트워크를 통해 링크되는 로컬 및 원격 컴퓨터 시스템이 모두 태스크를 수행하는 분산 시스템 환경에서 실시될 수도 있다. 분산 시스템 환경에서, 분산 시스템 환경에서, 프로그램 모듈은 로컬 및 원격 메모리 저장 장치에 위치할 수 있다.
도 2는 본 명세서에 기술된 원리가 작동하는 환경(200)을 도시한 것이다. 환경(200)은 객체 그래프의 아이솔레이션(isolation) 및 변경가능성(mutability)을 추적하는 프레임워크(210)를 포함한다. 프레임워크(210)는 참조에 대한 액세스를 제어함으로써 객체 그래프에 대한 다양한 참조(221)를 조직한다. 참조는 로컬 변수, 메소드 파라미터, 객체 필드, 또는 객체 그래프에 대한 임의의 다른 참조일 수 있다. 도시된 실시예에서, 참조(221)는 참조(221A 내지 221E)를 포함하는 것으로 도시되어 있으며, 생략부호(221F)는 프레임워크(210)가 어떠한 수의 참조(220)에 대한 액세스도 관리할 수 있음을 상징적으로 나타낸다.
프레임워크(210)는 참조에 대한 승인을 할당함으로써 참조(221)에 대한 액세스를 관리한다. "승인(permission)"은 참조가 변경될 수 있는 지에 대한 일부 속성을 나타내는 참조에 대한 어노테이션이다. 이러한 승인은 도 2에 승인(211)으로 추상적으로 표현된다. 승인은 판독가능 승인(211A), 기록가능 승인(211B) 및 변경불가능 승인(211C)을 포함한다. "판독가능" 승인(211A)은 대응 객체(및 모든 필드, 모든 필드의 필드 등)가 판독될 수 있음을 의미한다. "기록가능" 승인(211B)은 대응하는 객체가 기록될 수 있음을 의미한다. "변경불가능" 승인(211C)은 판독가능 승인(211A)과 유사하지만, 그 외의 다른 어떠한 승인도 이 객체에 대한 기록가능 참조를 갖지 않음을 더 보장한다. 변경불가능 승인(211C)은 이 객체에 대한 기록가능 참조가 다시는 없을 것임을 더 보장할 수 있다. 따라서, 변경불가능 승인(211C)은, 대응하는 객체가 절대로 기록되지 않을 것이며, 마찬가지로 모든 필드, 및 모든 필드의 필드 등이 기록되지 않을 것임을 의미한다. 객체 내의 모든 정적인 필드는 프레임워크(210)에 의해 변경불가능 승인(211C)을 갖는 것으로 취급된다.
프레임워크(210)는 또한 메모리 위치를 격리되는 것으로 어노테이트하는 격리된 메모리 관리자(212)를 포함한다. 저장 위치 상의 "격리된(isolated)" 어노테이션은 위치가 외부적으로 고유한 값을 저장함을 의미한다. 즉, 그 위치에 저장된 임의의 객체에 대해, 시스템 내의 그 객체에 대한 어떠한 외부 참조도 없고, 임의의 객체의 필드 또는 그 필드의 필드 등에 대한 어떠한 참조도 없다. 예를 들어, 격리된 메모리 관리자(212)는 격리된 메모리 위치(222)를 관리한다. 격리된 메모리 위치는 2개의 격리된 메모리 위치(222A, 222B)를 포함하는 것으로 도시되어 있으며, 생략부호(222C)는 격리된 메모리 위치(222)가 임의의 수의 격리된 메모리 위치를 포함할 수도 있음을 나타낸다.
어노테이션 컴포넌트(201)는 프레임워크(210) 상에 구축되며 본 명세서에 더 설명되는 바와 같이 동작한다. 이에 더하여 또는 이에 갈음하여, 어노테이션 컴포포넌트(201)는 프레임워크(210)의 일부로서 동작할 수 있다. 어노테이션 컴포넌트(201)는 도 2의 참조들(221) 중 하나와 같이 참조를 반환하는 실행가능 컴포넌트를 평가하도록 구성된다. 도 3은 적어도 특정 객체 그래프를 참조하는 참조를 반환하는 실행가능 컴포넌트를 평가하고 실행가능 컴포넌트에 의해 반환된 참조를 어노테이트하기 위한 어노테이션 컴포넌트에 대한 방법(300)의 흐름도를 도시한 것이다. 도 3의 방법은 도 2의 어노테이션 컴포넌트(201)에 의해 수행될 수 있으므로, 방법(300)은 도 2 및 3을 자주 참조하여 설명할 것이다.
방법(300)은 실행가능 컴포넌트를 평가(동작 311)하여 실행가능 컴포넌트를 실행하는 결과로서 발생하는 하나 이상의 반환된 참조를 식별(동작 312)하는 것을 포함한다. 방법(300)의 나머지는 특정 속성이 반환된 참조를 할당받을 수 있는지를 판정하기 위해 반환된 참조를 평가하는 것과 관련된다. 일부 경우에, 방법의 나머지는 먼저 실행가능 컴포넌트가 선언되는 코드를 평가함으로써 수행될 수 있다. 다른 경우에, 실행 컴포넌트가 호출되는 코드가 평가되는데, 여기서 반환된 참조의 핵심 특징은 선언 코드로 식별될 수 없다.
도 4는 실행가능 컴포넌트(401)가 입력 아규먼트(411, 412)를 수신하고 반환된 참조(421, 422)를 생성하는 환경(400)을 도시한 것이다. 그러나, 생략부호(413)은 실행가능 컴포넌트(401)에 대한 임의의 수의 입력 아규먼트(0개, 하나 또는 둘 이상)가 있을 수 있음을 나타낸다. 생략부호(423)는 실행가능 컴포넌트(401)의 실행으로 인한 임의의 수(0개 이상)의 반환된 참조가 있을 수 있음을 나타낸다. 어노테이션 컴포넌트(201)는 실행가능 컴포넌트(401)를 선언 또는 호출하는 코드를 평가할 수 있다.
실행가능 코드와 관련된 선언 코드 또는 호출 코드가 평가되고 있는지에 관계없이, 실행가능 컴포넌트에 대한 임의의 입력 아규먼트가 존재하는지 여부가 판정된다(판정 블록(313)). 어떠한 입력 아규먼트도 없다면(판정 블록(313)에서 "아니오"인 경우), 시그니파잉(signifying) 속성이 반환된 참조에 할당(315)될 수 있다. 시그니파잉 속성은 1) 반환된 참조에 의해 참조된 특정 객체 그래프(또는 특정 객체 그래프 내의 임의의 객체)에 대한 어떠한 외부 참조도 존재하지 않고, 2) 객체 그래프 내에 객체 그래프 외부의 임의의 객체에 대한 어떠한 변경가능 참조도 존재하지 않음을 나타낸다. 본원 상세한 설명 및 청구항에서, 속성은, 그 속성이 하나 이상의 클레임 세트가 참임을 나타내는 것으로 시스템에 의해 해석될 수 있으면, 하나 이상의 클레임 세트를 나타낸다.
예컨대, 다음 코드 예를 고려해 보자.
Figure 112015036231397-pct00001
메소드 MyClass는 생성자(constructor)이다. 일반적으로, 생성자는 기록가능 값을 반환한다. (심지어 런타임 전에) 이 생성자를 평가함으로써, 표현 "new MyClass()"은 외부 세계로부터 완전히 격리된 값을 반환한다. 생성자에 대한 입력 아규먼트가 존재하지 않는다(판정 블록(313)에서의 "아니오"). 그러므로, 새로 생성된 객체의 필드에 저장된 임의의 값은, 1) 이들이 객체의 생성자 내부에 새로 생성되거나 또는 2) 이들이 정적 필드에서 기원하는 두 경우 중 하나에서 비롯된다. 생성자는 메소드를 자유롭게 호출하고 반환값을 필드에 저장하는 반면에, 임의의 메소드 호출의 반환 값 자체는 타동적으로 이들 두 경우 중 한 경우에서 비롯된다.
본 명세서에 기술된 원리는 프레임워크(210)가 변경불가능하거나 변경가능한 스태틱스(statics)를 구현하는지 여부에 관계없이 작동한다. 변경불가능 스태틱스의 경우에, 프레임워크(210)는 정적 필드가 변경불가능임을 보장한다. 따라서, 변경불가능 정적 필드에서 비롯된 새로 생성된 필드는 마찬가지로 시그니파잉 속성에 의해 나타내어진 보장을 갖는다. 즉, 이러한 새로 생성된 필드는 1) 새로 생성된 필드에 의해 참조된 특정 개체 그래프(또는 특정 객체 그래프 내의 임의의 객체)에 대한 외부 참조를 갖지 않고, 2) 객체 그래프 내에 객체 그래프 외부의 임의의 객체에 대한 어떠한 변경가능 참조도 존재하지 않는다.
변경가능 스태틱스를 구현하는 프레임워크의 경우에, 실행가능 컴포넌트가 (프로그래머에 의해 또는 컴파일러에 의해 자동으로) 변경가능 스태틱스를 사용하여 어노테이트되면 이 원리가 여전히 적용된다. 이것은 메소드에 대해 기록가능 아규먼트로서 모델링될 수 있으며, 따라서 이 메소드의 출력은 속성을 할당하지는 못한다.
예를 들어, 이 멘탈 모델은 다음과 같다.
Figure 112015036231397-pct00002
따라서, 동작(315)에서, 어노테이션 컴포넌트(201)는 특별한 시그니파잉 속성을 할당하는데, 이것은 이들 새로 구축된 별칭없는(non-aliased) 값을 모델링하는데 사용된다. 표현 "new MyClass()"는 시그니파잉 속성을 갖는 것으로 취급된다. 일부 구현예에서, 이 시그니파잉 속성은 "신규(fresh)" 값을 갖는 승인 유형이다. 이 실시예에서, 생성자는 아무런 입력도 갖지 않기 때문에, (일반적으로 단지 "기록가능(writable)"인)반환 값의 승인이 "기록가능"에서 "신규"로 승격된다. 신규 참조는 임의의 승인, 즉 판독가능, 기록가능, 또는 변경불가능을 갖는 위치에 저장될 수 있는데, 비록 한번 그렇게 했더라도, 신규 승인이 소실된다. 또한, 그것은 격리된 위치에 저장될 수도 있으며, 이에 따라 "신규" 승인을 소실할 수 있다. 이 위치들은 신규로서 마킹되어서는 안 된다는 점에 유의하라. 따라서 일단 값이 한 위치에 저장되었으면, 그 값은 에일리어싱될 수 있고, 따라서 더 이상 신규가 아니다. 따라서, 이런 방식으로 시그니파잉 속성(예를 들어, 신규 승인 상태)이 소실될 수 있다.
도 3으로 돌아가서, 실행가능 컴포넌트에 대한 하나 이상의 입력 아규먼트가 존재한다면(판정 블록(313)에서의 "예"), 입력 아규먼트가 변경불가능하거나 또는 객체 그래프를 가리키는 어떠한 외부 변경가능 참조도 갖지 않고 외부 객체를 참조하는 어떠한 내부 변경가능 참조도 갖지 않는 객체 그래프를 나타내는지 여부를 판정한다(판정 블록(314)). 입력 아규먼트가 존재하고, 이들 모두가 변경불가능하지도 않고 이들 기준을 만족하지도 않으면(판정 블록(314)에서의 "아니오"), 시그니파잉 속성(예컨대, 신규 승인)이 할당되지 않는다(동작 316).
그러나, 실행가능 컴포넌트에 대한 모든 입력 아규먼트가 변경불가능하거나 또는 객체 그래프를 가리키는 어떠한 외부 변경가능 참조도 갖지 않고 외부 객체를 참조하는 어떠한 내부 변경가능 참조도 갖지 않는 객체 그래프를 참조하면(판정 블록(314)에서의 "예"), 시그니파잉 속성(예컨대, 신규 승인)이 또한 이 상황에서 할당될 수 있다(동작 315).
생성자가 변경불가능한 일부 입력 아규먼트에서 취하는 다음의 코드 예를 고려해 보자.
Figure 112015036231397-pct00003
이 경우에, 동일한 분석이 적용된다. MyClass2의 임의의 새로 구성된 인스턴스는 외부 세상과 임의의 변경가능 상태를 공유할 수 없다. 따라서, 새로 구성된 MyClass2 객체는 시그니파잉 속성(예컨대, 신규 승인)을 할당받을 수 있다. 이것은 MyClass2 생성자의 선언의 분석을 통해 런타임 전에 결정될 수 있다.
이제 생성자가 항상 변경불가능하지는 않은 일부 아규먼트를 취하는 경우를 고려해 보자.
Figure 112015036231397-pct00004
이 참조가 변경을 허용하지 않지만 다른 개체가 여전히 기록가능 참조를 보유할 수 있고, 따라서 참조의 변경이 관측될 수 있음을 판독가능 승인이 나타낸다는 것을 상기해 보자. 따라서, 첫번째 2개의 입력 아규먼트 x 및 y가 모두 변경불가능할지라도, 제3 입력 아규먼트 myClass는 변경불가능하지 않고 판독가능하다. 따라서, 선언의 분석에만 기초하여 속성이 이 생성자에 의해 구성된 반환된 myClass에 할당될 수 있는지 여부가 결정될 수 없다.
그러나, myClass의 인스턴스의 실제 실행의 런타임 환경(즉, 호출 코드)을 평가할 시에, 변경불가능 승인은 단지 추가 제한이 주어진 소정 유형의 판독가능 승인이므로, 아마도 제3 입력 아규먼트는 변경불가능 상태로 평가될 수 있을 것이다. 실제 런타임 환경에서, 추가적인 제한이 관측되면, 제3 입력 아규먼트는 변경불가능할 것이다. 예를 들어, 다음 런타임 코드를 고려해 보자.
Figure 112015036231397-pct00005
이 경우, 새로운 표현의 실제 아규먼트가 모두 변경불가능함이 관측될 수 있다. 따라서, 이 특정 예에서, 비록 동일한 생성자가 흔히 비신규(non-fresh) 값을 생성할지라도, 반환된 참조는 시그니파잉 속성(예컨대, 신규 승인)을 할당받을 수 있다. 위 예들 모두에서, 입력 아규먼트가 시그니파잉 속성(예컨대, 신규 승인)을 가지면 반환된 참조는 시그니파잉 속성(예컨대, 신규 승인)을 할당받을 수 있다. 일부 경우에, 어노테이팅 컴포넌트(201) 자체는 이전 시점에서 입력 아규먼트에 대한 신규 승인을 할당받을 수 있다.
지금까지, 이들 예들 모두는 생성자를 사용하였다. 사실, 동일한 분석이 임의의 실행가능 컴포넌트들에게 적용된다. 다음 예를 고려해보자. 증분(increment)의 파라미터 리스트 다음의 '판독가능' 어노테이션은 '이것'에 대한 승인과 이에 따른 모든 인스턴스 필드 액세스 또는 인스턴스 메소드 호출에 대한 승인이 판독가능함에 유의하라.
Figure 112015036231397-pct00006
"new Counter()"에 대한 원래의 호출은, Counter()에 대한 입력 아규먼트가 없기 때문에, 전술한 바와 같이 신규 객체를 반환한다. Increment()는 Counter()로부터 반환된 값이기 때문에 신규한 하나의 입력을 갖는다. 그러므로, Increment()의 반환 값의 승인이 "기록가능"하므로, 반환 값은 안전하게 '신규'로 승격될 수 있다. 이 로직은 시퀀스 내의 각각의 호출에 적용된다. 1의 "신규" 출력은 그 다음의 "신규" 입력이 된다. Increment()에 대한 최종 호출은 "변경불가"로 변환될 수 있는 "신규" 값을 반환한다.
다음 표현들이 판독가능 값을 반환한다.
Figure 112015036231397-pct00007
이 경우, 동일한 분석이 적용되지만, 반환 값을 신규로 승격하기에 안전하지 않다. 그렇게 하면 그것이 변경되도록 허용할 것이다. 판독가능 값을 기록가능 값 또는 격리된 값으로 변환하는 것은 위험하다. 그러나, 반환된 값은 판독가능 또는 변경불가능 승인을 할당받을 수 있다. 변경불가능 승인은 항상 판독가능하도록 감소될 수 있으므로, 판독가능 값을 반환하는 방법은 변경 불가능 객체의 임의의 필드를 가상하여 반환할 수 있다. 이 경우, 반환 값을 신규로 승격하는 것은 일관성없는 변경불가능 데이터가 변경될 수 있게 할 것이다. 대신에, 상이한 승인 규칙이 적용되는데, 출력이 "신규" 승인이 아니라 "변경불가능" 승인을 갖는 것으로 취급된다. 이 승격은 앞에서와 같이 안전하며, 모든 입력이 변경불가능하거나 신규이면, 임의의 변경가능 상태를 외부 세계와 공유하는 것이 가능하지 않고, 따라서 (이미 변경될 수 없는) 반환 값이 변경불가능한 것으로 안전하게 처리될 수 있다.
따라서, 본 명세서에 기술된 원리는 외부 객체로부터의 반환된 참조가 외부 참조가 객체에 액세스할 수 있는지 여부를 나타내는 속성을 수신하도록 허용한다.
본 발명은 그 기술적 사상이나 필수적 특징에서 벗어나지 않고 다른 특정 형태로 실시될 수 있다. 기술된 실시예들은 모든 면에서 예시적인 것일 뿐 제한적이 아닌 것으로 고려되어야 한다. 그러므로, 본 발명의 범위는 전술한 설명보다는 첨부한 청구범위에 의해 나타내어진다. 청구항의 균등물의 의미 및 범위 내에 있는 모든 변경들은 이들 범위 내에 포함된다.

Claims (20)

  1. 컴퓨팅 시스템의 하나 이상의 프로세서에 의해 실행될 경우 상기 컴퓨팅 시스템으로 하여금 메모리 내에서 적어도 특정 객체 그래프를 참조하는 참조(reference)를 반환하는 실행가능 컴포넌트를 평가하고 상기 실행가능 컴포넌트에 의해 반환된 상기 참조를 어노테이트(annotate)하도록 구성되는 어노테이션 컴포넌트(annotation component)를 인스턴스화하게 하는 컴퓨터 실행가능 명령어를 포함하는 하나 이상의 컴퓨터 판독가능 하드웨어 저장 장치로서,
    상기 어노테이션 컴포넌트는
    실행될 경우, 상기 특정 객체 그래프를 참조하는 참조를 생성하고 반환하는 실행가능 컴포넌트에 액세스하는 것과,
    상기 실행가능 컴포넌트에 대한 임의의 입력 아규먼트가 존재하는지 여부를 판정하는 것과,
    상기 실행가능 컴포넌트에 대한 하나 이상의 입력 아규먼트가 존재할 경우, 각각의 입력 아규먼트에 대해 상기 각각의 입력 아규먼트가 변경불가능한지(immutable) 또는 상기 각각의 입력 아규먼트가 상기 객체 그래프를 가리키는 외부 변경가능(mutable) 참조 및 외부 객체를 참조하는 내부 변경가능 참조를 전혀 갖지 않는 객체 그래프를 나타내는지의 여부를 판정하는 것과,
    상기 실행가능 컴포넌트에 대한 입력 아규먼트가 존재하지 않거나, 또는 각각의 입력 아규먼트가 변경불가능하거나 또는 상기 각각의 입력 아규먼트가 상기 외부 변경가능 참조 및 외부 객체를 참조하는 내부 변경가능 참조를 전혀 갖지 않는 객체 그래프를 나타내는 경우, 신규(fresh) 값을 갖는 시그니파잉(signifying) 속성을 상기 반환된 참조에 할당하는 것 -상기 신규 시그니파잉 속성은 1) 상기 반환 참조에 의해 참조된 상기 특정 객체 그래프에 대한 외부 참조가 존재하지 않고, 2)상기 객체 그래프 외부의 임의의 객체에 대한 상기 객체 그래프 내의 변경가능 참조가 존재하지 않음을 나타냄-
    을 수행하도록 구성되는 컴퓨터 판독가능 하드웨어 저장 장치.
  2. 제1항에 있어서,
    상기 실행가능 컴포넌트는 어떠한 입력 아규먼트도 갖지 않는
    컴퓨터 판독가능 하드웨어 저장 장치.
  3. 제1항에 있어서,
    상기 실행가능 컴포넌트는 적어도 하나의 입력 아규먼트를 갖는
    컴퓨터 판독가능 하드웨어 저장 장치.
  4. 제3항에 있어서,
    상기 어노테이션 컴포넌트는 상기 입력 아규먼트가 상기 시그니파잉 속성을 갖는다고 판정함으로써 상기 입력 아규먼트가 어떠한 외부 변경가능 참조도 갖지 않는 객체 그래프를 참조한다고 판정하는
    컴퓨터 판독가능 하드웨어 저장 장치.
  5. 제4항에 있어서,
    상기 실행가능 컴포넌트의 상기 입력 아규먼트의 상기 시그니파잉 속성은 상기 어노테이션 컴포넌트에 의해 할당되는
    컴퓨터 판독가능 하드웨어 저장 장치.
  6. 제3항에 있어서,
    상기 어노테이션 컴포넌트는 상기 입력 아규먼트의 변경불가능한 승인(permission)을 평가함으로써 상기 입력 아규먼트가 변경불가능하다고 판정하는
    컴퓨터 판독가능 하드웨어 저장 장치.
  7. 제3항에 있어서,
    상기 어노테이션 컴포넌트는 상기 입력 아규먼트를 변경불가능한 것으로 제한하는 상기 실행가능 컴포넌트의 실행 컨텍스트를 평가함으로써 상기 입력 아규먼트가 변경불가능하다고 판정하는
    컴퓨터 판독가능 하드웨어 저장 장치.
  8. 제1항에 있어서,
    상기 실행가능 컴포넌트는 상기 반환된 참조를 판독가능으로 제한하지만 잠재적으로는 다른 개체에 의해 기록가능한 것으로 선언되고, 상기 시그니파잉 속성은 상기 반환된 참조가 변경불가능한 것인
    컴퓨터 판독가능 하드웨어 저장 장치.
  9. 제1항에 있어서,
    상기 실행가능 컴포넌트는 상기 반환된 참조를 판독가능으로 제한하는 것으로 선언되지 않는
    컴퓨터 판독가능 하드웨어 저장 장치.
  10. 제9항에 있어서,
    상기 반환된 참조가 변경불가능 승인을 할당받으면 상기 반환된 참조의 상기 시그니파잉 속성은 제거되는
    컴퓨터 판독가능 하드웨어 저장 장치.
  11. 제9항에 있어서,
    상기 반환된 참조가 판독가능 승인을 할당받으면 상기 반환된 참조의 시그니파잉 속성은 제거되는
    컴퓨터 판독가능 하드웨어 저장 장치.
  12. 제9항에 있어서,
    상기 반환된 참조가 기록가능 승인을 할당받으면 상기 반환된 참조의 시그니파잉 속성은 제거되는
    컴퓨터 판독가능 하드웨어 저장 장치.
  13. 제9항에 있어서,
    상기 반환된 참조가 격리된 메모리 위치에 기록되면 상기 반환된 참조의 시그니파잉 속성은 제거되는
    컴퓨터 판독가능 하드웨어 저장 장치.
  14. 제1항에 있어서,
    상기 실행가능 컴포넌트는 객체 생성자(object constructor)인
    컴퓨터 판독가능 하드웨어 저장 장치.
  15. 컴퓨팅 시스템의 어노테이션 컴포넌트에 대해, 적어도 특정 객체 그래프를 참조하는 참조를 반환하는 실행가능 컴포넌트를 평가하고, 상기 실행가능 컴포넌트에 의해 반환된 상기 참조를 어노테이트하는 방법으로서,
    실행될 경우, 상기 특정 객체 그래프를 참조하는 참조를 생성하고 반환하는 실행가능 컴포넌트에 대응하는 코드에 액세스하는 단계와,
    상기 실행가능 컴포넌트에 대응하는 상기 코드를 평가하는 단계와,
    실행 시 상기 실행가능 컴포넌트에 의해 반환되었을, 반환된 참조를 식별하는 단계와,
    상기 실행가능 컴포넌트에 대한 임의의 입력 아규먼트가 존재하는지 여부를 판정하는 단계와,
    상기 실행가능 컴포넌트에 대한 하나 이상의 입력 아규먼트가 존재할 경우, 각각의 입력 아규먼트에 대해, 상기 각각의 입력 아규먼트가 변경불가능한지 또는 상기 각각의 입력 아규먼트가 상기 객체 그래프를 가리키는 외부 변경가능 참조 및 외부 객체를 참조하는 내부 변경가능 참조를 전혀 갖지 않는 객체 그래프를 나타내는지의 여부를 판정하는 단계와,
    상기 실행가능 컴포넌트에 대한 입력 아규먼트가 존재하지 않거나, 또는 각각의 입력 아규먼트가 변경불가능하거나 또는 상기 각각의 입력 아규먼트가 외부 변경가능 참조 및 외부 객체를 참조하는 내부 변경가능 참조를 전혀 갖지 않는 객체 그래프를 나타내는 경우, 신규 값을 갖는 시그니파잉(signifying) 속성을 상기 반환된 참조에 할당하는 단계 -상기 신규 시그니파잉 속성은 1) 상기 반환 참조에 의해 참조된 상기 특정 객체 그래프에 대한 외부 참조가 존재하지 않고, 2)상기 객체 그래프 외부의 임의의 객체에 대한 상기 객체 그래프 내의 변경가능 참조가 존재하지 않음을 나타냄-
    를 포함하는 방법.
  16. 제15항에 있어서,
    상기 실행가능 컴포넌트는 상기 반환된 참조를 판독가능으로 제한하지만 잠재적으로는 다른 개체에 의해 기록가능한 것으로 선언되고, 상기 시그니파잉 속성은 상기 반환된 참조가 변경불가능한 것인
    방법.
  17. 제15항에 있어서,
    상기 반환된 참조가 액세스 승인을 할당받으면 상기 반환된 참조의 상기 시그니파잉 속성은 제거되는
    방법.
  18. 제15항에 있어서,
    상기 반환된 참조가 격리된 메모리 위치에 기록되면 상기 반환된 참조의 시그니파잉 속성은 제거되는
    방법.
  19. 제18항에 있어서,
    상기 실행가능 컴포넌트는 객체 생성자(object constructor)가 아닌
    방법.
  20. 컴퓨팅 시스템의 하나 이상의 프로세서에 의해 실행될 경우 상기 컴퓨팅 시스템으로 하여금 메모리 내에서 적어도 특정 객체 그래프를 참조하는 참조(reference)를 반환하는 실행가능 컴포넌트를 평가하고 상기 실행가능 컴포넌트에 의해 반환된 상기 참조를 어노테이트(annotate)하도록 구성되는 어노테이션 컴포넌트(annotation component)를 인스턴스화하게 하는 컴퓨터 실행가능 명령어를 포함하는 하나 이상의 컴퓨터 판독가능 하드웨어 저장 장치로서,
    상기 어노테이션 컴포넌트는
    실행될 경우, 상기 특정 객체 그래프를 참조하는 참조를 생성하고 반환하는 실행가능 컴포넌트에 액세스하는 것과,
    상기 실행가능 컴포넌트에 대한 임의의 입력 아규먼트가 존재하는지 여부를 판정하는 것과,
    상기 실행가능 컴포넌트에 대한 하나 이상의 입력 아규먼트가 존재할 경우, 각각의 입력 아규먼트에 대해 상기 각각의 입력 아규먼트가 변경불가능한지(immutable) 또는 상기 각각의 입력 아규먼트가 상기 객체 그래프를 가리키는 외부 변경가능(mutable) 참조 및 외부 객체를 참조하는 내부 변경가능 참조를 전혀 갖지 않는 객체 그래프를 나타내는지의 여부를 판정하는 것과,
    상기 실행가능 컴포넌트에 대한 입력 아규먼트가 존재하지 않거나, 또는 각각의 입력 아규먼트가 변경불가능하거나 또는 상기 각각의 입력 아규먼트가 외부 변경가능 참조 및 외부 객체를 참조하는 내부 변경가능 참조를 전혀 갖지 않는 객체 그래프를 나타내는 경우, 신규(fresh) 값을 갖는 시그니파잉(signifying) 속성을 상기 반환된 참조에 할당하는 것 -상기 신규 시그니파잉 속성은 1) 상기 반환 참조에 의해 참조된 상기 특정 객체 그래프에 대한 외부 참조가 존재하지 않고, 2)상기 객체 그래프 외부의 임의의 객체에 대한 상기 객체 그래프 내의 변경가능 참조가 존재하지 않음을 나타냄-
    을 수행하도록 구성되며,
    상기 반환된 참조가 변경불가능 승인, 판독가능 승인, 기록가능 승인을 할당받거나 또는 격리된 메모리 위치에 기록되면, 상기 반환된 참조의 상기 시그니파잉 속성은 제거되는
    컴퓨터 판독가능 하드웨어 저장 장치.
KR1020157009591A 2012-10-15 2013-10-15 외부 참조를 나타내지 않는 참조 속성 어노테이션 KR102093531B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/652,436 2012-10-15
US13/652,436 US9971578B2 (en) 2012-10-15 2012-10-15 Reference attribute annotation signifying no external reference
PCT/US2013/065139 WO2014062739A1 (en) 2012-10-15 2013-10-15 Reference attribute annotation signifying no external reference

Publications (2)

Publication Number Publication Date
KR20150070152A KR20150070152A (ko) 2015-06-24
KR102093531B1 true KR102093531B1 (ko) 2020-03-25

Family

ID=49582796

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157009591A KR102093531B1 (ko) 2012-10-15 2013-10-15 외부 참조를 나타내지 않는 참조 속성 어노테이션

Country Status (6)

Country Link
US (1) US9971578B2 (ko)
EP (1) EP2907026A1 (ko)
JP (1) JP6272336B2 (ko)
KR (1) KR102093531B1 (ko)
CN (1) CN104718529B (ko)
WO (1) WO2014062739A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9026993B2 (en) * 2008-06-27 2015-05-05 Microsoft Technology Licensing, Llc Immutable types in imperitive language
US9569282B2 (en) 2009-04-24 2017-02-14 Microsoft Technology Licensing, Llc Concurrent mutation of isolated object graphs
US9098269B2 (en) 2013-01-04 2015-08-04 Microsoft Technology Licensing, Llc System and method to ensure resource access safety with immutable object types
US10996945B1 (en) * 2014-09-17 2021-05-04 Amazon Technologies, Inc. Splitting programs into distributed parts
US10754644B2 (en) * 2015-08-04 2020-08-25 International Business Machines Corporation Annotations in software development
US11521744B1 (en) 2019-06-18 2022-12-06 Cigna Intellectual Property, Inc. Machine learning system for generating predictions according to varied attributes

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005339534A (ja) 2004-05-21 2005-12-08 Microsoft Corp グラフ分析および同期の方法およびシステム

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6721747B2 (en) * 2000-01-14 2004-04-13 Saba Software, Inc. Method and apparatus for an information server
US6925638B1 (en) 2000-09-21 2005-08-02 International Business Machines Corporation Mutability analysis in Java
US6785693B2 (en) * 2001-02-02 2004-08-31 International Business Machines Corporation Management of multiple links to a file in a file system
US7114152B2 (en) 2002-01-08 2006-09-26 International Business Machines Corporation Method, apparatus, and program to determine the mutability of an object at loading time
CN101055518A (zh) 2007-05-31 2007-10-17 上海交通大学 基于面向对象的智能空间建模方法
CN100517224C (zh) 2007-06-13 2009-07-22 北京北大方正电子有限公司 对象的串行化存储和恢复的系统和方法
JP2009129127A (ja) 2007-11-22 2009-06-11 Fujitsu Ltd プログラムの不変物抽出処理プログラム,処理装置,および処理方法,ならびに該プログラムを記憶する記憶媒体
WO2009097586A1 (en) 2008-01-31 2009-08-06 Bea Systems, Inc. System and method for transactional cache
US9569282B2 (en) * 2009-04-24 2017-02-14 Microsoft Technology Licensing, Llc Concurrent mutation of isolated object graphs

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005339534A (ja) 2004-05-21 2005-12-08 Microsoft Corp グラフ分析および同期の方法およびシステム

Also Published As

Publication number Publication date
US20140108438A1 (en) 2014-04-17
US9971578B2 (en) 2018-05-15
CN104718529A (zh) 2015-06-17
JP2015531529A (ja) 2015-11-02
JP6272336B2 (ja) 2018-01-31
EP2907026A1 (en) 2015-08-19
CN104718529B (zh) 2018-05-15
WO2014062739A1 (en) 2014-04-24
KR20150070152A (ko) 2015-06-24

Similar Documents

Publication Publication Date Title
KR102093531B1 (ko) 외부 참조를 나타내지 않는 참조 속성 어노테이션
US20090222827A1 (en) Continuation based declarative definition and composition
US20160092183A1 (en) Compiler Caching for Runtime Routine Redundancy Tracking
US8566544B2 (en) Compiler-enforced agent access restriction
AU2019200748B2 (en) Immutable object types
US10387126B2 (en) Data marshalling optimization via intermediate representation of workflows
US8424107B2 (en) Selectively exposing base class libraries based on application execution context
Alur et al. GPUDrano: Detecting uncoalesced accesses in GPU programs
US8695003B2 (en) Method for managing data accessibility by scheduling three types of executable agents associated with pre-defined access rights within a domain
US20240028316A1 (en) Preventing garbage object accumulation on minimal runtimes while supporting an implicit deallocation programming experience
EP2941702B1 (en) Object graph partial immutability and isolation enforcement
US8572594B2 (en) Invasion analysis to identify open types
Fernandez-Reyes et al. Towards Gradual Checking of Reference Capabilities
US20210279044A1 (en) Performance optimization of class instance comparisons
Kumar Efficient execution of fine-grained actors on multicore processors
Fan et al. Advanced Memory Checking for MPI Parallel Applications Using MemPin
Su Parallel pointer analysis for large-scale software
Louden Answers to Selected Exercises

Legal Events

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