KR20040111020A - 동적 런타임 환경에서 태그형을 사용한 시스템 및 방법 - Google Patents

동적 런타임 환경에서 태그형을 사용한 시스템 및 방법 Download PDF

Info

Publication number
KR20040111020A
KR20040111020A KR1020040042322A KR20040042322A KR20040111020A KR 20040111020 A KR20040111020 A KR 20040111020A KR 1020040042322 A KR1020040042322 A KR 1020040042322A KR 20040042322 A KR20040042322 A KR 20040042322A KR 20040111020 A KR20040111020 A KR 20040111020A
Authority
KR
South Korea
Prior art keywords
type
class
tag
tag value
language
Prior art date
Application number
KR1020040042322A
Other languages
English (en)
Other versions
KR101046035B1 (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 KR20040111020A publication Critical patent/KR20040111020A/ko
Application granted granted Critical
Publication of KR101046035B1 publication Critical patent/KR101046035B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/4492Inheritance

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 관리 코드 환경(managed code environment)에서 동적 프로그래밍 언어 실행을 용이하게 하는 시스템 및 방법에 관한 것이다. 동적 프로그래밍 언어에 관련된 하나 이상의 태그값(tagged value)에 대하여 계승 계층을 선언하는 클래스 콤포넌트가 제공된다. 태그값의 실행 동안, 규칙 콤포넌트(rule component)는 유형 안전 런타임 환경(type safe runtime environment)을 지원하기 위해서 사용자 정의형이 상기 태그형 값으로부터 속성을 유도 또는 계승하는 것을 완화시킨다. 트리의 일측에서는 비태그형 요소(non-tagged type element)를 트리의 다른 브랜치 상에 태그형 요소값을 정의하는 분기된 클래스 트리가 제공된다. 규칙 콤포넌트는 상기 트리의 하나의 콤포넌트로부터의 데이터가 트리의 다른 콤포넌트로부터 유도 또는 계승되는 것을 방지할 수 있게 하는 런타임 확장(runtime extension)을 분석한다. 상기 런타임 확장은 캐스트 클래스 확장, 테스트 클래스 확장, 및 하나의 클래스 서브타입으로부터 다른 것으로 데이터형을 변환하는 변환 클래스 확장 등을 포함한다.

Description

동적 런타임 환경에서 태그형을 사용한 시스템 및 방법{SYSTEMS AND METHODS FOR EMPLOYING TAGGED TYPES IN A DYNAMIC RUNTIME ENVIRONMENT}
본 발명은 컴퓨터 시스템에 관한 것으로서, 특히, 동적 런타임 환경에서 동적 언어의 동작 및 실행을 용이하게 하는 시스템 및 방법에 관한 것이다.
컴퓨터 과학이 발전함에 따라, 객체 지향 프로그램은 설계자와 프로그래머가 컴퓨터 시스템 내에서 기능을 구현하는데 사용하는 많은 친숙한 모델들 중의 하나가 되어가고 있다. 객체 모델은 통상 클래스에 속하는 메소드 및 관련 데이터 요소를 모두 제공하는 클래스 멤버를 포함하는 클래스 구조로 정의된다. 따라서, 클래스 멤버는 컴퓨터 프로그램 내에서 원하는 기능을 제공/정의하며, 여기서 객체는 특정 클래스의 인스턴스로서 선언된다. 통상, 객체는 종종 데이터를 교환하거나 및/또는 동일 플랫폼 상에서 동작하는 다른 객체를 호출하거나 원격 플랫폼에 속하는 객체들과 통신하여야 한다. 객체들 사이에서 통신하기 위해서는, 객체가 서로 어떻게 통신 및/또는 상호작용하는지를 정의하는 인터페이스 시스템 및 표준이 개발되어야 한다.
콤포넌트 객체 모델(Component Object Model; COM)으로 알려진 객체들 간의 통신 및 인터페이스에 대한 친숙한 시스템이 공지되어 있으며, 이에는 공통 객체 요청 브로커 아키텍쳐(Common Object Request Brokers Architecture; COBRA)라 불리는 다른 유사한 시스템도 있다. 또다른 통신 인터페이스는 예를 들어 자바 가상 머신의 운영 프레임워크 내의 JAVA와 같은 언어로 정의될 수 있다. 이들 및 다른 시스템이 개발되었지만, 예를 들어, 관리 및 비관리 객체 시스템으로 통상 정의될 수 있는 두개의 공통 객체 아키텍쳐 또는 모델로 통상 구분된다.
관리 객체(managed object)는 관리 소프트웨어 환경 내에서 힙(heap)으로부터 할당될 수 있으며, 통상, 관련 객체 수명(object lifetime)에 대하여 책임지지 않는다. 관리 객체는 데이터형(예를 들어, 메타데이터)으로 기술될 수 있으며 객체가 더이상 액세스되지 않을 경우에 메모리로부터 객체를 제거하는 관리 환경 "쓰레기 수집기(garbage collector)"에 의해 자동 수집(예를 들어, 회수)될 수 있다. 그와 달리, 비관리 객체(non-managed object)는 표준 운영 체계 힙으로부터 할당될 수 있으며, 객체 자체는 객체에 대한 참조가 더이상 존재하지 않을 때 그것이 채용하는 메모리를 해제할 책임이 있다. 이는 예를 들어 참조 카운팅(reference counting)과 같은 공지의 기술을 통해 달성될 수 있다.
상술한 바와 같이, 관리 객체는 관리 힙과 자동으로 수집된 쓰레기로부터 할당될 수 있다. 이들 달성하기 위해서, 관리 객체에 대한 참조가 추적된다. 객체에 대한 최종 참조가 제거될 때, 쓰레기 수집기는 객체가 차지한 메모리를 회수하여 참조 카운트 관리 객체에 대한 요구를 덜어준다. 따라서, 관리 환경은 본질적으로 참조 카운팅을 내부적으로 처리한다. 관리 환경이 객체 상에 존재하는 현저한 참조를 추적하기 때문에 추적은 관리 코드 내에서 가능하다. 각각의 새로운 객체 참조는 관리 코드 내에서 선언되기 때문에, 관리 환경은 현재의 참조 리스트에 참조를 추가한다.
따라서, 주어진 임의의 시간에서, 객체 그 자체가 아닌 관리 환경이 해당 객체 상에 존재하는 현재 참조를 인식하게 된다. 참조가 범위 또는 변화값의 밖에 있게 됨에 따라, 현재 참조의 리스트가 갱신되고, 참조가 관리 코드 내에 남아 있는 동안에는, 관리 환경은 이를 추적할 수 있게 된다. 상술한 객체 주기 쟁점과 더불어, 관리 및 비관리 객체 시스템은 통상 많은 다른 중요한 점에서 상이하다. 이들 차이점은, 예를 들어, 객체 시스템이 개별 객체 시스템 내에서 객체 인터페이스를 어떻게 제공하는지, 데이터가 어떻게 구조화 및/또는 정의되는지, 및 에러와 예외가 어떻게 처리되는지를 포함한다.
객체 실행 환경과 관련하여, 동적 프로그래밍 언어는 복수의 애플리케이션을 개발하는 서로 다른 다양한 코드형을 제공한다. Perl, Scheme, Ruby, Python, Smalltalk 등과 같은 동적 유형의 언어는 통상 여러 태깅 방식을 사용하여 힙 상에 소형(통상 워드 크기) 객체를 할당하는 부하(overhead)를 극복하지만, 파라미터 연산에 있어서 값이 일정하게 표현되는 이점을 여전히 가지고 있다. 예를 들어, 포인터는 4바이트 경계(boundary)에서 정렬된다고 가정하면, 통상의 기술은 포인터와 중간값 사이를 구별하도록 32비트 값의 최하위 비트를 사용하는 것이다. 윈도우즈기반 시스템 상에서는, 예를 들어, 포인터는 최상위 메모리 세그먼트를 포인트하지는 않으므로 두개의 최상위 비트를 설정하는 것을 생각할 수 있다.
그러나, 많은 시스템은 이러한 인코딩(예를 들어, 포인터와 정수값 사이를 구별하기 위한 인코딩)을 사용한 프로그램은 공통 언어 런타임 또는 자바 가상 머신과 같은 관리 실행 환경(managed execution environment) 상에서 실행되는 경우 검증가능하지 않게 된다. 현재, 일정한 표현을 달성하기 위한 검증가능 방법들 중 하나는 복싱(boxing)(예를 들어, 복싱은 정수를 객체와 관련시킨다)을 사용하는 것지만, 복싱된 값에 대한 연산은 하위 값에 직접 동작하는 것보다는 프로세서 실행 성능에 있어서 수 배 크기만큼 느릴 수 있다.
도 1은 본 발명의 일 양태에 따른 태그형 프로세싱 시스템의 개략 블록도.
도 2는 본 발명의 일 양태에 따른 태그형 계층을 예시하는 블록도.
도 3은 본 발명의 일 양태에 따른 태그형 프로세싱을 예시하는 흐름도.
도 4는 본 발명의 일 양태에 따른 태그형 명령을 예시하는 흐름도.
도 5는 본 발명의 일 양태에 따른 실행 규칙을 나타내는 도면.
도 6은 본 발명의 일 양태에 따른 캐스트 클래스 규칙을 예시하는 흐름도.
도 7은 본 발명의 일 양태에 따른 테스트 클래스 규칙을 예시하는 흐름도.
도 8은 본 발명의 일 양태에 따른 정수에서 태그형으로의 변환 규칙을 예시하는 흐름도.
도 9는 본 발명의 일 양태에 따른 태그형에서 정수로의 변환 규칙을 예시하는 흐름도.
도 10은 본 발명의 적절한 운영 환경을 예시하는 개략 블록도.
도 11은 본 발명이 상호작용할 수 있는 샘플 계산 환경의 개략 블록도.
<도면의 주요 부분에 대한 부호의 설명>
110 : 동적 언어
120 : 컴파일러
130 : 가상 머신
140 : 태그형
150 : 확인 규칙
160 : 스택 예외 처리기
이하, 본 발명의 몇몇 양태의 기본 이해를 제공하기 위한 본 발명의 간략한 요약이 제공된다. 이 요약은 본 발명의 넓은 개요는 아니다. 이는 본 발명의 주요/중요 요소를 식별하거나 본 발명의 범위를 상세히 나타내려는 것은 아니다. 단지 그 목적은 이하 제시되는 보다 상세한 설명에 앞서 본 발명의 일부 개념을 간략한 형태로 제공하려는 것이다.
본 발명은 관리 객체 환경에서의 동적 프로그래밍 언어로부터 생성된 태그형 값을 처리하는 시스템 및 방법에 관한 것이다. 태그형 값은 실행 엔진이 예를 들어 포인터와 즉시 데이터값(immediate data value)을 구별할 수 있게 하는 32비트 값의 최하위 비트와 같은 데이터의 특별 인코딩 부위를 포함한다. 본 발명은 가상 머신에 의해 제공되는 바와 같은 관리 객체 환경에서 실행가능한 동적 프로그래밍언어에 대한 추상 루트형 클래스를 정의한다. 이 유형의 클래스는 클래스의 상부 아래에서 정의되는 데이터 요소에 대한 불투명, 자연 크기값(opaque, natural size value)을 나타내는 클래스 계층에서의 상부를 갖는 것으로 정의된다.
하나의 경우에서, 분기된 트리는 클래스의 상부 또는 루트 아래에서 구현되며, 여기서, 트리의 한 측에서는 시스템 객체 계층(예를 들어, 비태그 요소(non-tagged element))가 구현되고 트리의 다른 측에서는 태그값을 나타내는 실드형이 구현된다. 그 후, 태그형(예를 들어, 사용자 정의형에서 태그형으로 데이터 액세스를 방지 또는 억제하는 것)을 사용하는 동적 프로그래밍 언어의 적절한 실행을 용이하게 하기 위해 추상 루트형 클래스에 여러 규칙이 인가된다. 특히, 실행 규칙은 사용자 정의형과 관련된 값 또는 데이터가 추상 클래스의 태그 멤버로부터 계승하거나 속성을 유도하는 것을 완화시킨다. 이러한 방식으로, 태그형 값은 유형 안전 실행 환경에서 실행될 수 있다. 또한, 추상 클래스를 정의하고 클래스의 멤버에 대한 액세스를 제한함으로써, 코드 실행 성능은 상술한 바와 같은 복싱 프로토콜에 의해서와 같이 태그값을 사용하는 종래의 알고리즘보다 개선된다.
본 발명의 일 양태에 따르면, 태그형 요소와 탑(top)형 요소가 정의되며, 여기서 탑은 트리의 한 브랜치에서 태그 데이터 서브타입 및 트리의 다른 브랜치에서 비태그 멤버와 관련된 데이터 서브타입을 갖는 트리의 최상위 멤버를 정의한다. 따라서, 메타데이터 규칙은 비태그 브랜치의 멤버는 태그 서브타입으로부터 또는 탑형 요소로부터 속성을 유도 또는 계승하지 않음을 보장하도록 확장된다. 또한, 이 규칙은 태그값에 산술 적용 등의 연산 또는 다른유형의 연산을 지원하도록 확장될 수 있다. 또한, 이는 개별 클래스 또는 서브타입의 멤버의 값인지를 결정하는 연산을 테스트하는 것을 포함한다. 다른 실행 규칙은 한 유형의 데이터(예를 들어, 정수)를 태그형으로 변환 또는 그 역으로 변환하는 것을 포함한다. 태그값과 비태그값을 모두 포함하는 추상 클래스를 정의함으로써, 그리고 클래스 서브타입들 간의 계승을 분리하는 규칙을 제공함으로써, 본 발명은 동적 프로그래밍 언어를 실행하기 위한 빠르고 안전한 환경을 제공한다.
상기 및 관련 목적의 달성을 위해, 본 발명의 몇몇 양태들이 아래의 설명 및 첨부 도면과 관련하여 여기서 설명된다. 이들 양태는 본 발명이 실시될 수 있는 여러 방식을 나타내며, 이들 모두는 본 발명에 의해 커버하려는 것이다. 본 발명의 다른 이점 및 신규한 특징은 도면을 참조하는 본 발명의 상세한 설명으로부터 보다 명백해질 것이다.
<실시예>
본 발명의 관리 코드 환경에서 동적 프로그래밍 언어 실행을 용이하게 하는 시스템 및 방법에 관한 것이다. 동적 프로그래밍 언어에 관련된 하나 이상의 태그값에 대한 계승 계층을 선언하는 클래스 콤포넌트가 제공된다. 태그값의 실행 동안, 규칙 콤포넌트는 유형 안전 런타임 환경을 지원하기 위해서 사용자 정의형이 태그값에서 속성을 유도 또는 계승하는 것을 완화시킨다. 트리의 일측에는 비태그형 요소가 트리의 다른 브랜치에는 태그형 요소값을 정의하는 분기된 클래스 트리가 제공된다. 규칙 콤포넌트는 트리의 일 콤포넌트로부터의 데이터가 트리의 다른 콤포넌트로부터의 속성 계승 또는 유도를 방지할 수 있게 하는 런타임 확장을 분석한다. 런타임 확장은 캐스트 클래스 확장, 테스트 클래스 확장 및 하나의 클래스 서브타입에서 다른 것(예를 들어, 태그 요소에서 비태그 요소로 또는 그 역으로)으로 데이터형을 변환하는 변환 클래스 확장과 같은 양태를 포함한다.
이 애플리케이션에서 사용되는 바와 같이, "콤포넌트", "클래스", "계층", "시스템" 등의 용어는 하드웨어, 하드웨어와 소프트웨어의 조합, 소프트웨어 또는 실행중인 소프트웨어에 관련된 컴퓨터 관련 엔티티를 의미하려는 것이다. 예를 들어, 콤포넌트는 프로세서 상에서 실행되는 프로세스, 프로세서, 객체, 실행가능, 실행의 스레드(thread), 프로그램 및/또는 컴퓨터를 포함하지만 이에 국한되지는 않는다. 예를 들어, 서버 상에서 실행하는 애플리케이션과 서버 모두 콤포넌트일 수 있다. 하나 이상의 콤포넌트는 프로세스 및/또는 실행 스레드에 상주할 수 있으며, 콤포넌트는 둘 이상의 컴퓨터 상에서 분산되어 및/또는 하나의 컴퓨터 상에 로컬화될 수 있다.
도 1을 우선 참조하면, 시스템(100)은 본 발명의 일 양태에 따른 태그형을 나타낸다. 하나 이상의 동적 언어(110)가 가상 머신(130)에 의해 실행되는 중간 언어 명령(intermediate language instruction; 124)을 생성하는 컴파일러(120; 예를 들어, 저스트 인 타임 컴파일러)에 입력된다. 동적 언어(110)는 예를 들어, 가상 머신(130)에 의해 실행되고 컴파일러(120)에 의해 컴파일되는 Perl, Scheme, Ruby, Python 및 Smalltalk과 같은 임의 유형의 컴퓨터 언어를 실질적으로 포함한다. 이러한 머신은, 예를 들어, 가상 예외 시스템(VES), 공통 언어 런타임(CLR) 또는 자바 가상 머신을 포함할 수 있다. 본 발명의 일 양태에서, 동적 언어(110)는 컴파일되고 가상 머신(130) 상에서 실행되는 하나 이상의 태그형(140)을 선언하고 생성한다. 태그형(140)은 즉시 데이터값 등의 다른 값과 포인터값을 구별하여 동적 언어(110)에 의해 종종 사용되는 인코딩을 나타낸다.
태그형(140)은 클래스 구조의 일측 또는 루트 상에서 태그값을 가지고 다른 측 또는 루트에서 비태그 또는 사용자 정의값을 갖는 분기된 클래스 구조로 선언되며, 여기서, 이러한 유형의 클래스 구조는 도 2를 참조하여 이하 상세히 설명된다. 즉시 명령(124)과 태그형(140)을 처리하기 위해서, 가상 머신(130) 및/또는 컴파일러(120)는 일련의 확인 규칙(150)을 사용하여 사용자 정의 데이터형이 태그 데이터형으로부터 유도 또는 계승되지 않음을 보장할 수 있게 된다. 또한, 여러 스택 실행 규칙(160; 후술함)은 태그 및 비태그값을 처리하기 위해 스택 예외 핸들러에 의해 변형되고 실행된다. 새로운 클래스형 프레임워크, 확인 규칙(150) 및/또는 스택 예외 핸들링(160)을 제공함으로써, 본 발명은 가상 머신(130)의 실행 성능을 향상시킨다. 이는 클래스 프레임워크 및 규칙에 따른 태그값을 처리함으로써 또한 그에 병행하여 및/또는 "복싱된(boxed)" 변수와 같은 태그값을 처리하는 기술을 완화함으로써 달성된다. 이들 변수는 공통 언어 기반구조(CLI)를 정의하는 "ECMA 표준" 등의 표준으로 설명된다.
통상, 시스템(100)은 여러 하이 레벨 언어로 기재된 애플리케이션이 이들 환경의 고유 특성을 고려하기 위해 애플리케이션을 다시 작성할 필요없이 서로 다른 시스템 환경에서 실행될 수 있는 ECMA 표준 및 공통 언어 기반구조(CLI)에 부응한다. 동적 언어 및/또는 가상 실행 환경을 다루는 다른 표준은 본 발명에 따라 또한 적합될 수 있음이 이해되어져야 한다. ECMA 표준은 그들의 개별 섹션에서 이들의 콤포넌트를 설명함으로써 다양한 콤포넌트의 이해를 용이하게 하기 위해서 인터넷 상에서 용이하게 이용할 수 있는 여러 섹션으로 이루어져 있다. 이들 섹션은:
파티션 I: 아키텍쳐
파티션 II: 메타데이터 정의 및 의미
파티션 III: CIL 명령 집합
파티션 IV: 프로파일 및 라이브러리
파티션 V: 부록
공통 언어 기반구조(CLI)는 그것이 곧 실행되는 실행가능 코드 및 실행 환경(가상 실행 시스템 즉 VES)에 대하여 구체적으로 설명된다. 실행가능 코드는 모듈로서 VES에 제공된다. 모듈은 통상 규정된 포맷 내의 실행가능 컨텐츠를 포함하는 단일 파일이다. 통상, 공통 언어 기반구조(CLI)의 중앙에는 단일형 시스템, 즉 컴파일러 도구 및 CLI 자체에 의해 공유되는 공통 유형 시스템(CTS)이 있다. 이는 유형을 선언, 사용 및 관리할 때 CLI가 따르는 규칙을 정의하는 모델이다. CTS는 교차 언어 통합, 유형 안정 및 고성능 코드 실행을 가능하게 하는 프레임워크를 설정한다. CLI는 다음 기본 콤포넌트를 포함한다.
공통 유형 시스템.공통 유형 시스템(CTS)은 많은 프로그래밍 언어에서 발견되는 유형 및 연산을 지원하는 리치형(rich type) 시스템을 제공한다. 공통 유형 시스템은 광범위한 프로그래밍 언어의 완전한 구현을 지원하려는 것이다.
메타데이터.CLI는 메타데이터를 사용하여 공통 유형 시스템에 의해 정의되는 유형을 설명하고 참조한다. 메타데이터는 임의의 특정 프로그래밍 언어에 독립적인 방식으로 저장(유지)된다. 따라서, 메타데이터는 프로그램(컴파일러, 디버거 등)을 다루는 도구들 사이 뿐만 아니라 이들 도구와 가상 실행 시스템 사이에서 사용하기 위한 공통 교환 메커니즘을 제공한다.
공통 언어 사양.공통 언어 사양은 언어 설계자와 프레임워크(클래스 라이브러리) 설계자 간의 합의이다. 이는 CTS 유형 시스템의 부분집합과 사용 규약의 집합을 규정한다. 언어는 이들의 사용자에게 CLS의 일부인 CTS의 적어도 일부를 구현함으로써 프레임워크를 액세스하는 최대 능력을 제공한다. 유사하게, 프레임워크는 그들이 공개적으로 노출된 양태(클래스, 인터페이스, 메소드, 필드 등)이 CLS의 일부이거나 CLS 규약에 맞는 유형을 사용하면 가장 광범위하게 사용될 수 있다.
가상 실행 시스템.가상 실행 시스템(VES)은 CTS 모델을 구현하여 실행한다. VES는 CLI에 대해 기재된 프로그램을 로딩하고 실행하는 것을 맡고 있다. 이는 관리 코드 및 데이터를 실행하는데 필요한 서비스를 런타임(지연 바인딩)과 개별 생성된 모듈을 접속하도록 메타데이터를 사용하여 제공한다.
이와 함께, 이들 CLI 양태는 분산 컴포넌트 및 애플리케이션을 설계, 개발, 배치 및 실행하는 통합 프레임워크를 형성한다. 공통 유형 시스템의 적절한 서브셋은 CLI를 타겟으로 하는 각각의 프로그래밍 언어로부터 이용가능하게 된다. 언어 기반 도구는 서로 그리고 가상 실행 시스템과 메타데이터를 사용하여 통신하여 애플리케이션을 구성하는데 사용되는 유형을 정의하고 참조한다. 가상 실행 시스템은 메타데이터를 사용하여 요구되는 유형의 인스턴스를 생성하고 기반구조의 다른 부분(원격 서비스, 어셈블리 다운로딩, 보안 등)에 데이터형 정보를 제공한다.
도 2를 이제 참조하면, 도면(200)은 본 발명의 일 양태에 따른 태그형 계층을 나타낸다. 유형 안정 방식(type safe way)으로 태그 값을 지원하기 위해서, 본 발명은 불투명, 자연 크기 값을 나타내는 계승 계층에 Top(210)으로 기재된 새로운 (추상) 루트형을 제공한다. 이 새로운 루트(210) 아래에, 일측에는 기존 System.Ojbect 계층(220)이 다른 측에는 (실링된) 유형의 태그(230)가 선언된다. 유형 Top(210)은 ECMA 파티션 III에서 제공된 바와 같은 객체 참조 유형 O의 개념에 통상 대응된다. 본 발명은 O에 제1 클래스 유형을 제공하여 새로운 서브타입 태그(230)을 추가한다. 240에서, Top(210)과 태그형(230)으로서 정의된 요소에 계승을 불허하는 하나 이상의 메타데이터 확인 규칙이 제공된다. 이들 규칙은 이하 보다 상세히 설명된다. 또한, 비록 두 브랜치가 Top(210) 아래에 도시되어 있지만, 다른 브랜치가 유사하게 제공될 수 있다(예를 들어, System.Obj의 태그형 옆 또는 아래에 정의된 다중 브랜치).
ECMA 파티션 III에서 정의된 객체 참조(유형 O)는 통상 완전히 불투명한 것으로 간주된다. 통상, 본 발명이 후술한 바와 같이 태그형에 대한 산술 연산을 제공하지만 피연산자로서 객체 참조를 허용하는 산술 연산은 없다. 허용된 비교 연산은 테스트 클래스 명령을 제공하는 본 발명을 사용한 객체 참조들 간의 등식(부등식)이다. ECMA 파티션 III에서 객체 참조에 대하여 정의된 변환 연산은 없지만, 본 발명은 태그값과 비태그값 사이에 변환을 제공한다. 객체 참조는 통상 특정CIL 객체 명령(예를 들어, newobj 및 newarr)에 의해 생성된다. 예를 들어, 이들 참조는 로컬 변수로서 저장되고, 값으로 리턴되며, 어레이에 그리고 객체의 필드로서 저장되는 인수로서 또한 전달될 수 있다.
또한, 본 발명은 진정한 다중언어 런타임(true multilanguage runtime)으로서 CLR의 채용을 실질적으로 용이하게 하는 공통 런타임 언어(CLR)에 대한 명시적인 지원을 제공한다. 본 발명의 하나의 특정 양태는 연산 추가(예를 들어, 산술 연산, 확인 규칙)를 제공하여 동적 언어(예를 들어, 오픈 소스 애플리케이션)를 또한 지원한다. 본 발명은 불투명, 자연 크기, 값을 나타내는 계승 계층을 갖는 추상 루트형(예를 들어, 탑)의 이용을 통해 유형 안전 방식으로 태그 값을 지원한다. 본 발명은 힙 상에 작은(예를 들어, 워드 크기) 객체를 할당하는 오버헤드를 극복하기 위해 여러 태깅 방식을 사용할 필요와 관련된 종래의 문제점을 완화하면서도, 예를 들어, 파라미터 연산에 대한 값의 일정한 표현의 이점을 여전히 유지한다.
도 3 내지 도 4 및 도 6 내지 도 9는 본 발명에 따른 여러 방법을 설명하고 있다. 설명의 간이함을 위해서, 이 방법들은 일련의 동작으로 도시되고 설명되지만, 본 발명은 이 동작 순서에 국한되는 것이 아니라, 본 발명에 따라서 몇몇 동작들이 다른 순서로 발생하거나 및/또는 여기서 도시되고 설명된 것과 다른 동작들과 동시에 발생할 수도 있음이 이해되어져야 한다. 예를 들어, 당업자는 상태도와 같이 일련의 상호관련된 상태 또는 이벤트로서 다르게 나타낼 수 있음을 이해할 것이다. 더욱이, 도시된 모든 동작이 본 발명에 따른 방법을 구현하는데 필요한 것은 아닐 수 있다.
도 3을 이제 참조하면, 도면(300)은 본 발명의 일 양태에 따른 태그형 프로세싱을 설명한다. 310과 320으로 진행하기 전에, 이들 동작은 ECMA 파티션 III의 변형으로서 제공될 수 있음이 주목된다. 310에서, 적어도 두개의 새로운 요소 유형 ELEMENT_TYPE_TAGGED 및 ELEMENT_TYPE_TOP은 태그값을 처리하는 계층 클래스 구조의 일부로서 정의된다. 320에서, 메타데이터 확인 규칙은 사용자 정의형이 TOP 또는 TAGGED 유형 요소로부터 유도할 수 없음을 보장하도록 확장된다. 전술한 바와 같이, CLI는 공통 유형 시스템에 의해 정의된 유형을 설명하고 참조하기 위해 메타데이터를 사용한다. 메타데이터는 특정 프로그래밍 언어에 독립적인 방식으로 저장("유지")된다. 따라서, 메타데이터는 도구 및 조작 프로그램(컴파일러, 디버거 등) 사이에서 뿐만 아니라 도구 및 가상 실행 시스템 사이에서 사용하기 위한 공통 교환 메커니즘을 제공한다. 메타데이터 토큰은, 예를 들어, 통상 메타데이타 테이블 내에서 행을 규정하는 4바이트값 또는 사용자 스트링 힙으로 개시 바이트 오프셋을 나타낸다.
진행하기 전에, 이하는 ECMA 파티션 III에 대한 변경의 일부로서 제공될 수 있음이 주목된다. 330에서, 통상, .ref 식별자를 갖는 모든 명령 변화는 태그형 값을 처리하기 위해 스택 상에서 유형 TOP의 값을 로딩할 수 있다. 340에서, 본 발명의 다른 양태에서, 산술 연산은 태그값에 작용하도록 재정의될 수 있다. 이를 달성하기 위해서, 파티션 III의 섹션 1.5에서의 표는 확장될 수 있다(예를 들어, TOP 및 TAG 유형 상에 동작하도록 피연산자를 변경, 산술 연산 동안 확인 규칙을 확장). 다음 표는 태그형 값에 동작하도록 확장될 수 있는 ECMA 파티션 III으로부터의 여러 명령을 나타낸다.
이진 수치 연산
A 유형 B 유형
int32 int64 native int F & O
int32 int32 x native int x &(add) x
int64 x int64 x x x x
native int native int x native int x &(add) x
F x x x F x x
& &(add,sub) x &(add,sub) x native int(sub) x
O x x x x x x
단항 수치 연산
피연산자 유형 int32 int64 native int F & O
결과 유형 int32 int64 native int F x x
이진 비교 또는 브랜치 연산
int32 int64 native int F & O
int32 x x x x
int64 x x x x x
native int x x Beq[.s], bne.un[.s], ceq x
F x x x x x
& x x beq[.s], bne.un[.s], ceq x x
O x x x x x beq[.s],bne.un[.s],ceq2
정수 연산
int32 int64 native int F & O
int32 int32 x native int x x x
int64 x int64 x x x x
native int native int x native int x x x
F x x x x x x
& x x x x x x
O x x x x x x
시프트 연산
시프트 요인
int32 int64 native int F & O
시프트 대상 int32 int32 x int32 x x x
int64 int64 x int64 x x x
native int native int x native int x x x
F x x x x x x
& x x x x x x
O x x x x x x
오버플로우 산술 연산
int32 int64 native int F & O
int32 int32 x native int x &add.ovf.un x
int64 x int64 x x x x
native int native int x native int x &add.ovf.un x
F x x x x x x
& & add.ovf.un, sub.ovf.un x & add.ovf.un, sub.ovf.un x native int sub.ovf.un x
O x x x x x x
변환 연산
변환후 입력(평가 스택으로부터)
int32 int64 native int F & O
int8 unsigned int8 int16 unsigned int16 Truncate Truncate Truncate Truncate to zero2 x x
int32 unsigned int32 Nop Truncate Truncate Truncate to zero x x
int64 Sign extend Nop Sign extend Truncate to zero GC 트래킹 중단 GC 트래킹 중단
unsigned int64 Zero extend Nop Zero extend Truncate to zero GC 트래킹 중단 GC 트래킹 중단
native int Sign extend Truncate Nop Truncate to zero GC 트래킹 중단 GC 트래킹 중단
native unsigned int Zero extend Truncate Nop Truncate to zero GC 트래킹 중단 GC 트래킹 중단
All float Types To Float To Float To Float Change precision3 x x
도 4를 참조하면, 도면(400)은 본 발명의 일 양태에 따른 태그형 명령 실행의 일 예를 나타낸다. 아래 설명된 명령은 "추가" 명령에 관련되지만, ECMA 또는 다른 표준에 관련된 임의의 명령이 태그형 처리 또는 태그형 및 비태그형 처리의 조합에 유사하게 확장 및 적용될 수 있다. 410에서, 클래스 또는 함수 요소가 선언된다. 예를 들어, 추가 명령(또는 다른 피연산자)를 갖는 리스트 펑션이 다음과 같이 작성될 수 있다:
List{
Add(Top x);
420에서, 태그형 및 비태그형이 예를 들어, 다음과 같이 선언될 수 있다:
List{
Add(Top x);
private Top[] values;
private(int, i);
430에서, 태그형 연산이 예를 들어, 다음과 같이 실행된다:
List{
Add(Top x);
private Top[] values;
private(int, i);
Add(Top x) {
values[i]=x;
i=i+1;
}
440으로 진행하면, 스택 연산은 태그형 처리 전, 그 동안, 및/또는 그 후에 실행된다. 450에서, 태그형 연산 또는 함수가 종료한다. 따라서, 이 예에서, 최종 예시 리스트 펑션은 다음과 같이 나타난다:
List{
Add(Top x);
private Top[] values;
private(int, i);
Add(Top x) {
values[i]=x;
i=i+1;
}
}
도 5는 본 발명의 일 양태에 따른 하나 이상의 실행 규칙(500)을 나타낸다. 일 양태에서, 캐스트 클래스 명령 또는 규칙은 520에서 제공될 수 있다. 이런 유형의 명령은 객체를 클래스에 캐스트하고 도 6을 참조하여 이하 상세히 설명된다. 다른 양태에서, 테스트 클래스 명령 또는 규칙은 524에서 제공될 수 있다. 이러한 유형의 명령은 객체가 클래스 또는 인터페이스의 인스턴스인지를 결정하도록 객체에 대하여 테스트를 수행하고 도 7을 참조하여 이하 상세히 설명한다. 또다른 양태에서, 정수의 객체 참조로의 변환 명령 또는 규칙으로 변환하는 것이 530에서 제공된다. 이런 유형의 명령(예를 들어, 태그 명령)은 정수값을 객체 참조로 변환하며 도 8을 참조하여 이하 상세히 설명한다. 또다른 실시예에서, 객체 참의 정수로의 변환 명령 또는 규칙이 534에서 제공될 수 있다. 이런 유형의 명령(예를 들어, 비태그 명령)은 객체 참조를 정수값으로 변환하여 이는 도 9를 참조하여 이하 상세히 설명한다. 다른 명령 또는 규칙(예를 들어, 산술 명령)이 유사하게 정의될 수 있음이 이해되어져야 한다.
도 6 내지 도 9의 설명을 하기 전에, 이에 사용되는 스택 개념이 이하 제공된다.
스택 천이도(stack transition diagram)
스택 천이 다이어그램은 명령이 실행되기 전과 후에 평가 스택의 상태를 표시한다. 다음은 통상의 스택 천이도이다.
..., value1, value 2 -> ..., 결과
상기 예는 스택이 그 위에 적어도 두개의 요소를 가져야 함을 나타내고, 정의에서 최상위 값("스택 상부" 또는 "가장 최근에 푸시된 것")은 value2라 불리고, 그 아래 값(value2 이전에 푸시된 것)은 value1이라 불린다. (이와 유사한 다이어그램에서, 스택은 페이지를 따라 오른쪽으로 진행한다). 명령은 이들 값을 스택에서 제거하고 이들을 "결과"로 기재된 다른 값으로 대체한다.
도 6은 본 발명의 일 양태에 따른 캐스트 클래스 규칙을 나타내는 도면(600)이다.
캐스트클래스 - 객체를 클래스에 캐스트
서식 어셈블리 서식 설명
74<T> castclass cast 객체를 클래스에 캐스트
610에서, 스택 천이는 캐스트 클래스에 대하여 다음과 같이 정의된다:
스택 천이:
..., obj-> ..., obj2
620에서, 캐스트 클래스는 이탤릭체 부분이 ECMA 파티션 III에 대한 변화를 나타내는 것으로 다음과 같이 정의된다.
캐스트클래스 명령은 클래스에 객체(예를 들어,Top)을 캐스트하려 한다. 클래스튼 메타데이터 토큰(typeref 또는 typedef)으로서, 원하는 클래스를 가리킨다.클래스 상부의 객체가 비태그이고 T가 태그이면, invalidexception이 주어진다.스택 상부의 객체 클래스가 클래스를 구현하지 않으면(클래스가 인터페이스이면), 그리고 클래스의 서브클래스가 아니면(클래스가 정규 클래스이면),InvalidCastException이 주어진다.
아래 사항이 확인된다:
1. 어레이가 System.Array를 계승
2. Foo가 Bar에 캐스트될 수 있으면, Foo[]가 Bar[]에 캐스트될 수 있다.
3. 2의 목적을 위해, enums은 그들의 하부 유형으로서 처리된다: 따라서, E1[]은 E1과 E2가 하부 유형을 공유하면 E2[]에 캐스트할 수 있다.
obj가 널(null)이면, 캐스트클래스가 성공하고 널로 복귀한다. 이들 동작은 후술하는 isInst와는 다르다.
630에서, 캐스트 클래스에 대한 예외는 다음과 같이 설명된다:
InvalidCastException은 obj가 클래스에 캐스트될 수 없으면 주어진다.
TypeLoadException은 클래스가 발견될 수 없으면 주어진다. 이는 통상 CIL이 런타임때가 아닌 네이티브 코드에 변환될 때 탐지된다.
640에서, 캐스트 클래스에 대한 검증가능성이 설명된다.
올바른 CIL은 유효 TypeRef 또는 TypeDef 토큰임과 obj가 널, 객체 참조 또는 태그 즉시값임을 보장한다.
도 7은 본 발명의 일 양태에 따른 테스트 클래스 규칙을 나타낸다.
isinst-객체가 클래스 또는 인터페이스의 인스턴스이면 테스트
서식 어셈블리 서식 설명
75 <T> isinst class obj가 클래스 인스턴스, 복귀 NULL 또는 그 클래스 또는 인터페이스의 인스턴스이면 테스트
710에서, 스택 천이는 캐스트 클래스에 대하여 다음과 같이 정의된다:
스택 천이:
..., obj -> ..., .결과
720에서, 캐스트 클래스는 이탤릭체 부분이 ECMA 파티션 III에 대한 변경을 나타내는 것으로서 다음과 같이 정의된다:
isinst 명령은 obj(Top 유형)이 클래스의 인스턴스인지를 테스트한다. 클래스는 원하는 토큰을 가리키는 메타데이터 토큰(typeref 또는 typedef)이다.스택 상부의 객체가 비태크이고 T가 태그이면, NULL이 스택 상으로 푸시된다. 스택 상부 객체의 클래스가 클래스(클래스가 인터페이스일 경우) 또는 클래스의 서브클래스(클래스가 정기 클래스인 경우)이면, 유형 클래스에 캐스트되고, 그 결과는 캐스트클래스가 호출되었던 것처럼 스택 상에 푸시된다. 다르게는, NULL이 스택 상으로 푸시된다. obj가 NULL이면, isinst는 NULL로 복귀한다.
다음이 확인된다:
1. 어레이는 System.Array로부터 계승한다.
2. Foo가 Bar에 캐스트될 수 있으면, Foo[]는 Bar[]에 캐스트될 수 있다.
3. 2의 목적으로, enum은 그들의 하부 유형으로서 취급된다: 따라서, E1[]은 E1과 E2가 하부 유형을 공유하면 E[2]에 캐스트할 수 있다.
730에서, 테스트 클래스에 대한 예외가 다음과 같이 설명된다:
TypeLoadException은 클래스가 발견되지 않으면 주어진다. 이는 통상 CIL이 런타임에서 보다 네이티브 코드로 변환될 때 감지된다.
740에서, 테스트 클래스에 대한 검증가능성이 설명된다:
올바른 CIL은 CIL이 클래스를 나타내는 유효 typeref 또는 typedef 토큰이다는 점과 obj가 항상 null 또는 객체 참조임을 보장한다.
도 8은 본 발명의 일 양태에 따른 정수로부터 태그형으로부터 변환 규칙을 나타내는 다이어그램(800)이다.
tag[.ovf] 정수에서 객체 참조로의 변환
서식 어셈블리 서식 설명
OPCODE_TAG Tag[.ovf] 정수 i를 태그형 참조 객체로 변환
810에서, 스택 천이는 태그 클래스에 대하여 다음과 같이 정의된다.
스택 천이:
..., i-> ..., obj
820에서, 태그는 다음과 같이 정의된다:
태그 명령은 비태그값 i(네이티브 정수)를 유형 탑(유형 0)의 인스턴스로 변경한다. 이는 특별 태그 비트를 i 내에 설정함으로써 달성된다.
830에서, 태그에 대한 예외가 다음과 같이 설명된다:
OverflowException은 값의 태그가 이미 설정되어 있으면 주어진다.
840에서, 태그에 대한 검증가능성이 설명된다:
올바른 CIL은 i가 유형 네이티브 int임을 보장한다.
도 9는 본 발명의 일 양태에 따라 태그형에서 정수로의 변환 규칙을 나타내는 다이어그램(900)이다.
untag[.ovf] 객체 참초의 정수로의 변환
서식 어셈블리 서식 설명
OPCODE_UNTAG* UnTag 태그 객체 참조를 정수 i로 변환
* 주의: 이 opcode OPCODE_TAG 및 OPCODE_UNTAG는 이용가능한 CLI opcode의 범위로부터 할당될 수 있다 (ECMA 파티션 III, 섹션 1.2.1 참조).
910에서, 스택 천이는 비태그 클래스에 대하여 다음과 같이 정의된다.
스택 천이:
..., obj ->..., i
920에서, 비태그는 다음과 같이 정의된다.
비태그 명령은 태그 객체 참조를 네이티브 정수로 변환한다. 이는 obj 내에 있는 특정 비트를 비설정함으로써 달성된다.
930에서, 비태그에 대한 예외가 다음과 같이 설정된다:
InvalidCastException은 obj가 태그된 값이 아닌 경우 주어진다.
NullReferenceException은 obj가 null인 경우에 주어진다.
940에서, 비태그에 대한 검증가능성이 설명된다:
올바른 CIL은 obj가 객체 참조, 즉, 유형 탑임을 보장하고 태그 정수를 나타낸다.
도 10을 참조하면, 본 발명의 여러 양태를 구현하기 위한 예시적인 환경(1010)은 컴퓨터(1012)를 포함한다. 컴퓨터(1012)는 처리부(1014), 시스템 메모리(1016), 시스템 버스(1018)을 포함한다. 시스템 버스(1018)는 시스템(1016)를 포함하지만 이에 한정되지는 않는 시스템 컴포넌트를 처리부(1014)에 결합시킨다. 처리부(1014)는 여러 이용가능 프로세서들 중의 임의의 것일 수 있다. 듀얼 마이크로프로세서 및 다른 멀티프로세서 아키텍쳐가 또한 처리부(1014)로서 사용될 수있다.
시스템 버스(1018)는 메모리 버스 또는 메모리 컨트롤러, 병렬 버스 또는 외부 버스 및/또는 11 비트 버스, 산업표준 아키텍쳐(ISA), 마이크로 채널 아키텍쳐(MSA), 확장형 ISA(EISA), 지능형 구동 전자(IDE), VESA 로컬 버스(VLB), 병령 콤포넌트 상호접속(PCI), 범용 직렬 버스(USB), 개선된 그래픽 포트(AGP), 국제 개인용 컴퓨터 메모리 카드 협회 버스(PCMAIA) 및 소형 컴퓨터 시스템 인터페이스(SCSI)를 포함하지만 이에 국한되지는 않는 다양한 이용가능 버스 아키텍쳐 중의 임의의 것을 사용한 로컬 버스를 포함하는 여러 유형의 버스 구조(들) 중의 임의의 것일 수 있다.
시스템 메모리(1016)는 휘발성 메모리(1020) 및 비휘발성 메모리(1022)를 포함한다. 기본 입출력 시스템(BIOS)는 시동 동안과 같이 컴퓨터(1012) 내부의 요소들 간의 정보를 전송하기 위한 기본 루틴을 포함하여, 비휘발성 메모리(1022)에 저장된다. 예를 들어, - 한정이 아님 -, 비휘발성 메모리(1022)는 판독 전용 메모리(ROM), 프로그래머블 ROM(PROM), 전기적 프로그래머블 ROM(EPROM), 전기적 소거가능 ROM(EEPROM) 또는 플래시 메모리를 포함할 수 있다. 비휘발성 메모리(1020)는 외부 캐시 메모리로서 동작하는 랜덤 액세스 메모리(RAM)을 포함한다. 예를 들어, - 한정이 아님 -, RAM은 동기 RAM(SRAM), 동적 RAM(DRAM), 동기 DRAM(SDRAM), 더블 데이터 레이트 SDRAM(DDR SDRAM), 개선된 SDRAM(ESDRAM), 싱크링크(Synchlink) DRAM(SLDRAM), 및 다이렉트 램버스 RAM(DRRAM)과 같은 여러 형태로 이용가능하게 된다.
또한, 컴퓨터(1012)는 분리형/비분리형, 휘발성/비휩랏어 컴퓨터 저장매체를 포함한다. 도 10은 예들 들어 디스크 스토리지(1024)를 나타내고 있다. 디스크 스토리지(1024)는 자기 디스크 드라이브, 플로피 디스크 드라이브, 테이프 드라이브, 재즈 드라이브, 집 드라이브, LS-100 드라이브, 플래시 메모리 카드 또는 메모리 스틱같은 장치를 포함하지만 이제 국한되지 않는다. 또한, 디스크 스토리지(1024)는 스토리지 매체를 컴팩트 디스크 ROM 장치(CD-ROM), CD 기록가능 드라이브(CD-R 드라이브), CD-재기입가능 드라이브(CD-RW 드라이브) 또는 디지털 다기능 디스크 ROM 드라이브(DVD-ROM)을 포함하지만 이에 국한되지 않는 다른 스토리지 매체와 조합으로 또는 개별적으로 포함할 수 있다. 디스크 스토리지 장치(1024)를 시스템 버스(1018)에 용이하게 접속하기 위해서, 통상 인터페이스 (1026)과 같은 분리형 또는 비분리형 인터페이스가 사용된다.
도 10은 적절한 운영 환경(101)에서 설명된 사용자와 기본 컴퓨터간의 중재자로서 동작하는 소프트웨어를 설명함이 이해될 것이다. 이러한 소프트웨어는 운영 체계(1028)을 포함한다. 운영 체계(1028)는 디스크 스토리지(1024) 상에 저장될 수 있으며, 컴퓨터 시스템(1012)의 자원을 제어하고 할당하도록 동작한다. 시스템 애플리케이션(1030)은 시스템 메모리(1016) 내에 또는 디스크 스토리지(1024) 상에 저장된 프로그램 모듈(1032) 및 프로그램 데이터(1034)를 통해 운영 체계(1028)에 의한 자원의 관리를 이용한다. 본 발명은 다양한 운영 쳬계 또는 운영 체계들의 조합을 사용하여 구현될 수 있음이 이해되어져야 한다.
사용자는 입력 장치(들)(1036)를 통해 컴퓨터(1012)에 명령 또는 정보를 입력한다. 입력 장치(1036)는 마우스, 트랙볼, 스타일러스, 터치 패드와 같은 포인팅 장치, 키보드, 마이크로폰, 조이스틱, 게임 패드, 위성 접시, 스캐너, TV 튜너 카드, 디지털 카메라, 디지터 ㄹ비디오 카메라, 웹 카메라를 포함하지만 이에 국한되지는 않는다. 이들 및 다른 입력 장치는 인터페이스 포트(들)(1038)에 의해 시스템 버스(1018)을 통해 처리부(1014)에 접속된다. 인터페이스 포트(들)(1038)은 예를 들어, 직렬 포트, 병렬 포트, 게임 포트 및 범용 직렬 버스(USB)를 포함한다. 출력 장치(들)(1040)는 입력 장치(들)(1036)와 동일한 유형의 포트 중의 일부를 사용한다. 따라서, 예를 들어, USB 포트는 컴퓨터(102)에 입력을 제공하거나 출력 장치(1040)에 컴퓨터(1012)로부터 정보를 출력하도록 사용될 수 있다. 출력 어댑터(1042)는 다른 출력 장치(1040)들 중에서 특정 어댑터를 요구하는 모니터, 스피커 및 프린터와 같은 일부 출력 장치(1040)이다는 점을 나타내도록 제공된다. 출력 어댑터(1042)는 출력 장치(1040)와 시스템 버스(1018) 간의 접속 수단을 제공하는 비디오 및 음성 카드를 예를 들어 포함하지만 이에 국한되지는 않는다. 다른 장치 및/또는 장치의 시스템은 원격 컴퓨터(들)(1044)와 같이 입력 및 출력 성능을 모두 제공함이 주목되어져야 한다.
컴퓨터(1012)는 원격 컴퓨터(들)(1044)과 같은 하나 이상의 원격 컴퓨터에 대한 논리적 접속을 사용하여 네트워크화된 환경에서 동작할 수 있다. 원격 컴퓨터(들)(1044)는 개인용 컴퓨터, 서버, 라우터, 네트워크 PC, 워크스테이션, 마이크로프로세서 기반 기기, 피어 장치 또는 기타 공통 네트워크 노드 등일 수 있으며, 통상 컴퓨터(1012)에 대하여 설명된 요소의 대다수 또는 모두를 포함한다. 간략함을 위해서, 단지 메모리 스토리지 장치(1046)가 원격 컴퓨터(들)(1044)에 설명되어 있다. 원격 컴퓨터(들)(1044)는 네트워크 인터페이스(1048)를 통해 컴퓨터(1012)에 논리적으로 접속되어 있으며, 그 후에, 통신 접속(1050)을 통해 물리적으로 접속된다. 네트워크 인터페이스(1048)는 근거리 네트워크(LAN) 및 원거리 네트워크(WAN)과 같은 통신 네트워크를 포함한다. LAN 기술은 파이버 분산 데이터 인터페이스(FDDI), 구리 분산 데이터 인터페이스(CDDI), 이더넷/IEEE 1102.3, 토큰 링/IEEE 1102.5 등을 포함한다. WAN 기술은 점 대 점 링크, 통합 서비스 디지털 네트워크(ISDN) 및 그 그 변이와 같은 회선 교환 네트워크, 및 패킷 교환 네트워크 및 디지털 가입자선(DSL)을 포함하지만 이에 국한되지는 않는다.
통신 접속(들)(1050)은 네트워크 인터페이스(1048)를 버스(1018)에 접속하는데 사용되는 하드웨어/소프트웨어를 의미한다. 통신 접속(1050)은 컴퓨터(1012) 내부에 있는 것으로 간략하게 예시적하였지만, 컴퓨터(1012) 에 대한 외부에 또한 있을 수 있다. 네트워크 인터페이스(1048)의 접속에 대하여 필요한 하드웨어/소프트웨어는 단시 예시의 목적으로, 일반적인 전화급의 모뎀, 케이블 모뎀 및 DSL 모뎀과 같은 모뎀, ISDAN 어댑터, 및 이더넷 카드와 같은 외장형 및 내장형 기술을 포함한다.
도 11은 본 발명이 상호작용할 수 있는 예시적인 컴퓨팅 환경(1100)의 개략 블록도이다. 시스템(1100)은 하나 이상의 클라이언트(들)(1110)을 포함한다. 클라이언트(들)(1110)은 하드웨어 및/또는 소프트웨어 (예를 들어, 스레드, 프로세스, 컴퓨팅 장치)일 수 있다. 또한, 시스템은 하나 이상의 서버(들)(1130)를 포함한다. 시스템(들)(1130)은 하드웨어 및/또는 소프트웨어 (예를 들어, 스레드, 프로세스, 컴퓨팅 장치)일 수 있다. 서버들(1130)은 예를 들어, 본 발명을 사용함으로써 변환을 수행하는 스레드를 포함할 수 있다. 클라이언트(1110)와 서버(1130) 간의 가능한 통신들 중의 하나는, 둘 이상의 컴퓨터 프로세스 사이에 전송되기에 적합한 데이터 패킷의 형태일 수 있다. 시스템(1100)은 클라이언트(들)(1110)와 서버(들)(1130) 사이의 통신을 용이하게 하도록 사용될 수 있는 통신 프레임워크(1150)를 포함한다. 클라이언트(들)(1110)는 클라이언트(들)(1110)에 국부적인 정보를 저장하는데 사용될 수 있는 하나 이상의 클라이언트 데이터 저장장치(들)(1160)에 동작가능하게 접속된다. 유사하게, 서버(들)(1130)는 상기 서버들(1130)에 국부적인 정보를 저장하는데 사용될 수 있는 하나 이상의 서버 데이터 저장장치(들)(1140)에 동작가능하게 접속된다.
상술한 것은 본 발명의 예들을 포함한다. 물론, 이는 본 발명을 설명하는 목적으로 콤포넌트 또는 방법들의 모든 생각가능한 조합을 설명하고 있는 것은 아니며, 그러나, 본 발명의 다른 조합 및 변경이 가능함을 당업자는 인식할 수 있을 것이다. 따라서, 본 발명은 첨부된 청구항들의 취지 및 범위 내에서 이러한 변경, 변형 및 변화를 포함하려는 것이다. 더욱이, "포함하다(include)"라는 용어로 상세한 설명 또는 청구하에 사용되는 경우에 있어서, 이러한 용어는 "포함하다(comprising)"가 청구항에서 변환어(transitional word)로서 사용될 때 해석되는 경우와 유사하게 용어 "포함하다(comprising)"로 포함(inclusive)되는 것이다.
상술한 본 발명에 따르면, 동적 런타임 환경에서 동적 언어의 동작 및 실행을 용이하게 할 수 있다. 관리 객체에 대한 참조가 추적되어, 객체에 대한 최종 참조가 제거될 때, 쓰레기 수집기는 객체가 차지한 메모리를 회수하여 참조 카운트 관리 객체에 대한 요구를 덜어주며, 관리 환경은 본질적으로 참조 카운팅을 내부적으로 처리함으로써 관리 코드 내에서 추적이 가능하게 된다.

Claims (27)

  1. 관리 객체 환경(managed object enviroment)에서 동적 코드 실행을 용이하게 하는 시스템에 있어서,
    동적 프로그래밍 언어에 관련된 하나 이상의 태그값(tagged value)에 대하여 계승 계층(inheritance hierarchy)을 선언하는 클래스 콤포넌트; 및
    사용자 정의형이 상기 태그 값을 계승하는 것을 완화시키는 규칙 콤포넌트(rules component)를 포함하는 시스템.
  2. 제1항에 있어서,
    상기 동적 프로그래밍 언어는 가상 머신에 의해 실행되는 중간 언어 명령(intermediate language instruction)을 생성하는 컴파일러에 제공되는 시스템.
  3. 제1항에 있어서,
    상기 동적 프로그래밍 언어는 Perl, Scheme, Ruby, Python 및 Smalltalk 중 적어도 하나를 포함하는 시스템.
  4. 제2항에 있어서,
    상기 가상 머신은 가상 실행 시스템(VES), 공통 언어 런타임(CLR), 및 자바가상 머신 중 적어도 하나를 포함하는 시스템.
  5. 제1항에 있어서,
    상기 태그값은 클래스 구조의 일측 또는 루트 상에는 태그값을 갖고 상기 클래스의 타측 또는 루트에는 비태그(non-tagged) 또는 사용자 정의 값을 갖는 분기된 클래스 구조로 선언되는 시스템.
  6. 제1항에 있어서,
    상기 태그값은 공통 언어 기반구조(CLI)를 정의하는 "ECMA 표준"에 부응하는 시스템.
  7. 제6항에 있어서,
    상기 ECMA 표준은 적어도 5개의 파티션을 포함하되, 상기 파티션은 파티션 I: 아키텍쳐, 파티션 II: 메타데이터 정의 및 의미(semantics), 파티션 III: CIL 명령 집합, 파티션 IV: 프로파일 및 라이브러리, 및 파티션 V: 부록을 포함하는 시스템.
  8. 제6항에 있어서,
    상기 공통 언어 기반구조(CLI)는 공통 유형 시스템, 메타데이터 설명, 공통 언어 사양, 및 가상 실행 시스템 중 적어도 하나를 포함하는 시스템.
  9. 제1항에 있어서,
    상기 계승 계층은 불투명, 자연 크기, 값(opaque, natural size, values)을 나타내는 추상 루트형(abstract root type)을 포함하는 시스템.
  10. 제9항에 있어서,
    상기 추상 루트형은 관련 트리의 일측 상에 기존 System.Object 계층을 포함하고 상기 트리의 타측 상에 실링형(sealed type)을 포함하는 시스템.
  11. 제9항에 있어서,
    상기 추상 루트형은 ECMA 파티션 III에 제공되는 바와 같이 유형 O의 객체 참조에 대응하는 시스템.
  12. 제9항에 있어서,
    상기 규칙 콤포넌트는 사용자 정의형이 상기 추상 루트형과 상기 태그값으로부터 유도되지 않게 조장하는 메타데이터 확인 규칙(metadata validation rule)을 사용하는 시스템.
  13. 제1항에 있어서,
    상기 태그값은 산술 연산(arithmetic operation)을 실행하도록 확장되는 시스템.
  14. 제9항에 있어서,
    ".ref" 첨자를 갖는 명령 변형(instruction variants)에 대하여 스택 상에 상기 추상 루트형에 관련된 값을 로딩하는 콤포넌트를 더 포함하는 시스템.
  15. 제1항에 있어서,
    상기 태그값을 다루는 적어도 하나의 명령을 더 포함하되, 상기 명령은 캐스트 클래스, 테스트 클래스, 정수의 객체 참조로의 변환을 위한 태그 명령, 객체 참조의 정수로의 변환을 위한 비태그 명령 중 적어도 하나를 포함하는 시스템.
  16. 제1항의 클래스 콤포넌트와 규칙 콤포넌트 중 적어도 하나를 구현하기 위해 저장된 컴퓨터 판독가능 명령을 갖는 컴퓨터 판독가능 매체.
  17. 동적 코드 실행을 용이하게 하는 시스템에 있어서,
    태그값에 관련된 추상 객체 유형과 사용자 정의값에 관련된 시스템 객체 유형을 갖는 데이터 구조를 할당하는 수단; 및
    상기 시스템 객체 유형이 상기 추사 객체형으로부터 계승되는 것을 방지하는 수단을 포함하는 시스템.
  18. 태그 데이터형 프로세싱을 용이하게 하는 방법에 있어서,
    일측에 객체 참조를 갖고 타측에 사용자 정의 참조를 갖는 분기된 클래스 구조를 정의하는 단계; 및
    동적 프로그래밍 환경에서 상기 분기된 클래스 구조를 실행하는 단계를 포함하는 방법.
  19. 제18항에 있어서,
    상기 사용자 정의 참조는 상기 객체 참조로부터 속성을 계승하지 않음을 자동 확인하는 단계를 더 포함하는 방법.
  20. 제18항에 있어서,
    상기 분기된 클래스 구조를 산술 연산을 수행하도록 확장하는 단계를 더 포함하는 방법.
  21. 제18항에 있어서,
    원하는 클래스를 나타내는 메타데이터 토큰을 사용하는 단계를 더 포함하는 방법.
  22. 제18항에 있어서,
    예외 처리, 결과 검증, 및 스택 연산 수행 중 적어도 하나를 포함하는 방법.
  23. 제18항에 있어서,
    객체가 클래스의 인스턴스인지를 검사하는 단계를 더 포함하는 방법.
  24. 제18항에 있어서,
    객체를 클래스에 캐스팅하는 단계를 더 포함하는 방법.
  25. 제18항에 있어서,
    정수를 객체 참조로 변화시키는 단계를 더 포함하는 방법.
  26. 제18항에 있어서,
    객체 참조를 정수로 변환시키는 단계를 더 포함하는 방법.
  27. 데이터 구조가 저장된 컴퓨터 판독가능 매체에 있어서,
    객체 참조형을 갖는 제1 데이터 필드;
    상기 객체 참조형으로부터 계승할 수 있는 적어도 하나의 태그값을 갖는 제2 데이터 필드; 및
    상기 객체 참조형으로부터 계승하지 않는 적어도 하나의 비태그값을 갖는 제3 데이터 필드를 갖는 컴퓨터 판독가능 매체.
KR1020040042322A 2003-06-10 2004-06-09 동적 코드 실행을 용이하게 하는 컴퓨터 시스템 및 태그 데이터형 프로세싱을 용이하게 하는 컴퓨터로 구현된 방법 KR101046035B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/458,460 US7168063B2 (en) 2003-06-10 2003-06-10 Systems and methods for employing tagged types in a dynamic runtime environment
US10/458,460 2003-06-10

Publications (2)

Publication Number Publication Date
KR20040111020A true KR20040111020A (ko) 2004-12-31
KR101046035B1 KR101046035B1 (ko) 2011-07-01

Family

ID=33299639

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040042322A KR101046035B1 (ko) 2003-06-10 2004-06-09 동적 코드 실행을 용이하게 하는 컴퓨터 시스템 및 태그 데이터형 프로세싱을 용이하게 하는 컴퓨터로 구현된 방법

Country Status (5)

Country Link
US (2) US7168063B2 (ko)
EP (1) EP1486870B1 (ko)
JP (1) JP4994580B2 (ko)
KR (1) KR101046035B1 (ko)
CN (1) CN100507837C (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009085440A2 (en) * 2007-12-19 2009-07-09 Yahoo! Inc. Tag aggregator
KR101245213B1 (ko) * 2010-07-16 2013-03-19 브로드콤 코포레이션 개방 가상화 형식 메타데이터 기반 네트워크 구성 및/또는 프로비저닝을 위한 방법 및 시스템

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050165837A1 (en) * 2004-01-22 2005-07-28 International Business Machines Corporation System and method for embedded java memory footprint performance improvement
US8566806B2 (en) * 2005-03-04 2013-10-22 Microsoft Corporation Command-line data-type discovery and conversion
US7571153B2 (en) * 2005-03-28 2009-08-04 Microsoft Corporation Systems and methods for performing streaming checks on data format for UDTs
US8701095B2 (en) * 2005-07-25 2014-04-15 Microsoft Corporation Add/remove memory pressure per object
US8176469B2 (en) * 2006-05-04 2012-05-08 Oracle International Corporation Inter language interoperability using a variant type
CN100403260C (zh) * 2006-08-24 2008-07-16 上海科泰世纪科技有限公司 一种构件的继承方法
US8190661B2 (en) * 2007-01-24 2012-05-29 Microsoft Corporation Using virtual repository items for customized display
US8850414B2 (en) * 2007-02-02 2014-09-30 Microsoft Corporation Direct access of language metadata
US8145673B2 (en) 2007-02-16 2012-03-27 Microsoft Corporation Easily queriable software repositories
US20080201330A1 (en) * 2007-02-16 2008-08-21 Microsoft Corporation Software repositories
US8490051B2 (en) * 2007-02-28 2013-07-16 Microsoft Corporation Generic interface for numeric types
US20080250325A1 (en) * 2007-04-03 2008-10-09 Feigenbaum Barry A Integrated Development Environment with Object-Oriented GUI Rendering Feature
US20080282238A1 (en) * 2007-05-10 2008-11-13 Microsoft Corporation Static type for late binding
US7831625B2 (en) * 2007-05-16 2010-11-09 Microsoft Corporation Data model for a common language
US8918772B1 (en) 2007-07-25 2014-12-23 Google Inc. Statically analyzing program correctness for a dynamic programming language
US8387020B1 (en) * 2007-07-25 2013-02-26 Google Inc. Verifying that a method has been implemented for a program written in a dynamic programming language
US8261248B2 (en) * 2007-11-05 2012-09-04 Sap Ag System and method of executing a dynamic program in a structured environment
US8011008B2 (en) * 2007-11-13 2011-08-30 Microsoft Corporation Application security model
US8601448B2 (en) * 2007-12-05 2013-12-03 Microsoft Corporation Representing pointers and boxing in environments using only reference types
US8250524B2 (en) * 2007-12-21 2012-08-21 Microsoft Corporation Contract programming for code error reduction
US9032374B2 (en) * 2008-04-03 2015-05-12 International Business Machines Corporation Metadata-integrated debugger
US20090271765A1 (en) * 2008-04-29 2009-10-29 Microsoft Corporation Consumer and producer specific semantics of shared object protocols
US8095963B2 (en) 2008-04-30 2012-01-10 Microsoft Corporation Securing resource stores with claims-based security
US9164737B2 (en) * 2008-05-16 2015-10-20 Microsoft Technology Licensing, Llc Augmenting programming languages with a type system
US8336035B2 (en) * 2008-12-16 2012-12-18 Microsoft Corporation Customizable dynamic language expression interpreter
US8782607B2 (en) 2009-02-20 2014-07-15 Microsoft Corporation Contract failure behavior with escalation policy
US8095571B2 (en) * 2009-06-22 2012-01-10 Microsoft Corporation Partitioning modeling platform data
GB2486965B (en) * 2009-10-21 2016-08-03 Ibm Method and system for improving software execution time by optimizing a performance model
US8572574B2 (en) * 2010-07-16 2013-10-29 Fujitsu Limited Solving hybrid constraints to validate specification requirements of a software module
US8862640B2 (en) 2011-04-25 2014-10-14 Microsoft Corporation Conservative garbage collecting and tagged integers for memory management
US8978007B2 (en) 2011-06-30 2015-03-10 Microsoft Technology Licensing, Llc Static metadata in dynamic programs
US9342450B2 (en) * 2011-11-29 2016-05-17 Red Hat Israel, Ltd. On-demand hypervisor memory mapping
KR20140052459A (ko) * 2012-10-24 2014-05-07 삼성에스디에스 주식회사 Odbc프로그램 자동 코딩 방법
CN103605543B (zh) * 2013-11-19 2017-06-06 北京国双科技有限公司 验证属性转换方法和装置
US10642903B2 (en) 2014-09-29 2020-05-05 International Business Machines Corporation Tagging and querying system objects
US10235176B2 (en) 2015-12-17 2019-03-19 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US10936713B2 (en) * 2015-12-17 2021-03-02 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
CN107748749A (zh) * 2017-08-18 2018-03-02 平安科技(深圳)有限公司 一种内存数据的更新方法、终端、设备以及可读存储介质
US11360976B2 (en) 2017-08-31 2022-06-14 Oracle International Corporation Deployment of javascript and typescript stored procedures and user-defined functions into database management systems
EP3746921B1 (en) 2018-02-02 2023-12-27 Dover Microsystems, Inc. Systems and methods for policy linking and/or loading for secure initialization
JP7039716B2 (ja) 2018-02-02 2022-03-22 ザ チャールズ スターク ドレイパー ラボラトリー, インク. ポリシ実行処理のためのシステムおよび方法
WO2019213061A1 (en) 2018-04-30 2019-11-07 Dover Microsystems, Inc. Systems and methods for checking safety properties
US10684873B2 (en) * 2018-06-12 2020-06-16 Oracle International Corporation Efficient data decoding using runtime specialization
WO2020097177A1 (en) 2018-11-06 2020-05-14 Dover Microsystems, Inc. Systems and methods for stalling host processor
WO2020132012A1 (en) 2018-12-18 2020-06-25 Dover Microsystems, Inc. Systems and methods for data lifecycle protection
CN112114862B (zh) * 2019-06-20 2023-12-22 普天信息技术有限公司 spring boot实例并发处理方法及装置
US11307837B2 (en) 2020-08-24 2022-04-19 International Business Machines Corporation Runtime type identification of an object utilizing class inheritance relationships
CN112333256B (zh) * 2020-10-28 2022-02-08 常州微亿智造科技有限公司 一种工业物联网下网络传输时数据转化框架系统及其方法
CN113377638B (zh) * 2021-06-11 2023-10-27 北京百度网讯科技有限公司 性能测试工具的生成方法和装置
CN115686888B (zh) * 2022-12-30 2023-03-21 浙江城云数字科技有限公司 一种基于规则的处置行为流程编排方法、装置及应用

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5519868A (en) * 1993-12-30 1996-05-21 International Business Machines Corporation Compilation of information contained in GDMO name bindings
GB2351370A (en) * 1999-06-25 2000-12-27 Ibm Data processing with policed object union
GB0023570D0 (en) * 2000-09-26 2000-11-08 Volantis Systems Ltd Web server
US6834301B1 (en) * 2000-11-08 2004-12-21 Networks Associates Technology, Inc. System and method for configuration, management, and monitoring of a computer network using inheritance
US7496892B2 (en) * 2003-05-06 2009-02-24 Andrew Nuss Polymorphic regular expressions

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009085440A2 (en) * 2007-12-19 2009-07-09 Yahoo! Inc. Tag aggregator
WO2009085440A3 (en) * 2007-12-19 2009-08-27 Yahoo! Inc. Tag aggregator
US8140963B2 (en) 2007-12-19 2012-03-20 Yahoo! Inc. Tag aggregator
US8972850B2 (en) 2007-12-19 2015-03-03 Yahoo! Inc. Tag aggregator
US10289746B2 (en) 2007-12-19 2019-05-14 Oath Inc. Tag aggregator
KR101245213B1 (ko) * 2010-07-16 2013-03-19 브로드콤 코포레이션 개방 가상화 형식 메타데이터 기반 네트워크 구성 및/또는 프로비저닝을 위한 방법 및 시스템

Also Published As

Publication number Publication date
EP1486870A2 (en) 2004-12-15
JP2005004737A (ja) 2005-01-06
EP1486870A3 (en) 2005-05-25
US20040255267A1 (en) 2004-12-16
JP4994580B2 (ja) 2012-08-08
US7168063B2 (en) 2007-01-23
CN1573688A (zh) 2005-02-02
US8024704B2 (en) 2011-09-20
US20070067372A1 (en) 2007-03-22
EP1486870B1 (en) 2016-04-13
CN100507837C (zh) 2009-07-01
KR101046035B1 (ko) 2011-07-01

Similar Documents

Publication Publication Date Title
KR101046035B1 (ko) 동적 코드 실행을 용이하게 하는 컴퓨터 시스템 및 태그 데이터형 프로세싱을 용이하게 하는 컴퓨터로 구현된 방법
US11175896B2 (en) Handling value types
AU2017200899B2 (en) Runtime system
JP4562918B2 (ja) インタプリティブ・ランタイム環境のためのコンパイル・プログラムの生成
US11599346B2 (en) Accessing a migrated member in an updated type
US7627594B2 (en) Runtime support for nullable types
US20040255268A1 (en) Systems and methods providing lightweight runtime code generation
US20030182457A1 (en) Method and apparatus for generating a code bridge
US6085034A (en) Constructor based object initialization with overrides
US7730465B2 (en) Mixed types
US9311111B2 (en) Programming environment with support for handle and non-handle user-created classes
US10846417B2 (en) Identifying permitted illegal access operations in a module system
US11347487B2 (en) Confining reflective access based on module boundaries
Bubak et al. Creating Java to native code interfaces with Janet extension
Earle et al. Functional Testing of Java Programs
Bubak et al. Creating java to native code interfaces with janet
Lee et al. Object-Oriented Programming
Schaad Inferring Universe Annotations on the Presence of Ownership Transfer
Watkins An Introduction to the Common Language Infrastructure (CLI)
Bosnakoski 1 Real-time Capabilities and Compound Types in Java
Economic The New C Standard (Excerpted material)

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20140516

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20150515

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20160527

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20170601

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20180529

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20190530

Year of fee payment: 9