KR101137126B1 - 확장성 컴파일러 및 툴의 기반 구조에 대한 기술 언어 - Google Patents
확장성 컴파일러 및 툴의 기반 구조에 대한 기술 언어 Download PDFInfo
- Publication number
- KR101137126B1 KR101137126B1 KR1020040053552A KR20040053552A KR101137126B1 KR 101137126 B1 KR101137126 B1 KR 101137126B1 KR 1020040053552 A KR1020040053552 A KR 1020040053552A KR 20040053552 A KR20040053552 A KR 20040053552A KR 101137126 B1 KR101137126 B1 KR 101137126B1
- Authority
- KR
- South Korea
- Prior art keywords
- software
- version
- classes
- extensions
- extension
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
설정 기반 확장성 소프트웨어 프로그램들의 확장에 대한 방법들 및 시스템들이 본 명세서에 기술된다. 중추 확장성 소프트웨어 프로그램 (core extensible software program)의 클래스들은 설정 기반 확장을 추가함으로써 확장될 수 있다. 확장들은 소프트웨어 프로그램의 중추 버전을 컴파일하기 전에 정적으로 또는 실행 시간에 동적으로 추가될 수 있다. 확장성 중추 클래스들의 선언은 클래스가 정적으로 확장 가능한지 혹은 동적으로 확장 가능한지를 표시하는 확장 속성을 포함할 수 있다. 객체 기술 언어는 또한 설정 기반 확장성 클래스들을 적절히 선언하기 위해 본 명세서에 기술된다. 또한, 전처리기는 확장성 클래스 선언들 및 그들의 확장들의 소스 코드 표현을 생성하기 위해 객체 기술 언어를 처리하기 위해 본 명세서에 기재된다. 그 다음, 소스 코드 표현은 중추 소프트웨어 프로그램의 확장 버전을 생성하기 위해 사용될 수 있다.
설정 기반 확장성 소프트웨어 (configuration dependent extensible software), 확장성 중추 클래스들 (extensible core classes), 객체 기술 언어 (object description language), 확장 포인트 (extensible point)
Description
도 1은 설정 기반 확장성 중추 소프트웨어 프래임워크의 예를 도시하는 블럭도이다.
도 2a는 객체 지향 프로그래밍 언어의 예에서 클래스들 및 객체들로서 구현되는 데이타 구조들을 설명하는 블럭도이다.
도 2b는 확장성 중추 소프트웨어 프로그램의 클래스들 및 그의 대응하는 확장들 간의 관계를 도시하는 블럭도이다.
도3a는 클래스 확장들을 추가해서 클래스 정의를 확장하는 전반적 방법의 흐름도이다.
도 3b는 중추 소프트웨어 프로그램의 설정 기반 확장 버전을 생성하는 전반적 방법의 흐름도이다.
도 4a는 중추 소프트웨어 프래임워크의 확장 버전을 도시하는 블럭도이고, 확장은 컴파일 시간 전에 정적으로 구현된다.
도 4b는 중추 소프트웨어 프로그램의 확장 버전을 도시하는 블럭도이고, 확장은 실행 시간에 동적으로 구현된다.
도 5는 중추 소프트웨어 프로그램을 정적으로 (statically) 확장하는 방법의 흐름도이다.
도 6은, 도 5에 도시된 바와 같이, 중추 소프트웨어 프로그램을 정적으로 확장하는 시스템을 도시하는 블럭도이다.
도 7은 중추 소프트웨어 프로그램을 동적으로 확장하는 방법의 흐름도이다.
도 8은, 도 7에서 도시된 바와 같이, 중추 소프트웨어 프로그램을 동적으로 확장하는 시스템을 도시하는 블럭도이다.
도 9a는 객체 기술 언어로의 정적 확장성 중추 클래스의 중추 클래스 선언의 리스트이다.
도 9b는 도 9a의 정적 확장성 중추 클래스 선언으로의 두 개의 클래스 확장들의 리스트이다.
도 9c는 도 9b의 클래스 확장들을 갖는 도 9a의 중추 클래스 선언을 연계해서 생성되는 확장 클래스 선언의 소스 코드 표현의 리스트이다.
도 10a는 객체 기술 언어로의 동적 확장성 중추 클래스의 중추 클래스 선언의 리스트이다.
도 10b는 도 10a의 동적 확장성 중추 클래스 선언의 한 확장 리스트이다.
도 10c는 도 10a의 중추 클래스 선언을 도 10b의 클래스 확장과 연계해서 생성되는 확장 클래스 선언의 소스 코드 표현의 리스트이다.
도 11a는 클래스 확장들의 삽입을 위한 확장 포인트들을 표시하는 중추 클래스 선언의 리스트이다.
도 11b는 도 11a의 중추 클래스 정의로의 확장 리스트이다.
도 12는 복수 소프트웨어 개발 시나리오들에 대응해서 소프트웨어 개발 툴들을 구성하는 구현의 예를 설명하는 블럭도이다.
<주요 도면 부호 설명>
101: 비주얼 베이직 (VB)
102: C#
103: .NET 언어
104: C++
110: 확장성 소프트웨어 개발 툴 프래임워크 중추
111: 저스트인타임 컴파일러 (JIT)
112: Pre-JIT
113: 자연 최적화 컴파일러들
114: 분석 툴들
120: IA-64, X86
기술 분야는 확장성 소프트웨어 시스템들에 관한 것이다. 더 구체적으로는, 확장성 클래스들의 사용에 관한 것이다.
컴퓨팅 분야는 복수 프로그래밍 언어들, 다양한 프로세서들, 및 복수 운영 시스템 환경들의 다량 배출 때문에 매일 더욱더 복잡해지고 있다. 특별 능력들을 갖는 다수의 프로그래밍 언어들은 (예를 들어, C++, Java, C#) 다양한 컴퓨팅 작업들의 프로그래밍에서 프로그래머들에게 특별 이득들을 제공하기 위해 현재 나와 있다. 유사하게, 다양한 프로세서들은 (예를 들어, X86, IA-64, AMD, 및 기타) 특정 작업들을 실행하기 위해 특별 이득들을 제공하기 위해 나와 있다. 예를 들어, 임베디드 프로세서들은 (embeded processors) 전자 장치들 내의 잘 정의된 작업들을 핸들링하기 위해 특히 적당하고, 인텔 펜티엄 프로세서와 같은 일반 목적 프로세서는 더 유연성 있고, 복잡한 작업들을 핸들링할 수 있다. 그러므로, 컴퓨팅 환경들, 설정들, 및 장치들의 다양성은 증가하고 있다.
이 다양성에 대한 증가된 수요는 컴파일러 프로그램들을 개발하는 이미 매우 복잡한 분야를 더 복잡하게 해 왔다. 관용적으로, 컴파일러 프로그램들은 특정 소스 코드 언어로 기록되는 소프트웨어를 컴파일하기 위해 기록되고, 특정 타입의 프로세서 구조 (예를 들어, IA-64, X86, AMD, ARM, 및 기타)로 타겟팅되어진다. 더 최근에, 복수 소스 언어들로 기록된 프로그램들을 한 개의 중간 언어 표현 (예를 들어, CIL (C++ 중간 언어) 및 MSIL (Microsoft Intermediate Language for .NET))으로 변환하는 번역기 프로그램들이 소개되어왔다. 그러나, 몇 개 다른 타입들의 타겟 구조들 간에 한 개 소스 프로그램의 컴파일을 재타겟팅 (retargetting)하는 것은 역시 복잡하고 시간 소비적이다.
복수 언어들 및 복수 타겟들과 같은 복수 소프트웨어 개발 시나리오들을 위한 컴파일러들 및 다른 소프트웨어 개발 툴들 (예를 들어, 분석 툴들, 최적기들)의 개발의 복잡성을 감소시키는 한 가지 적절한 방법은, 소프트웨어 확장들이 특별히 구성된 컴파일러들 및 기타 소프트웨어 개발 툴들을 개발하기 위해 추가될 수 있는 확장성 중추 기반 구조 또는 프래임워크를 개발하는 것이다. 예를 들어, 사용자가 특정 타겟 구조를 위해 설정된 저스트인타임 (just-in-time, JIT) 컴파일러를 개발하기를 원한다면, 그 혹은 그녀의 작업은 중추 컴파일러 프래임워크의 코드를 재사용하고 JIT 컴파일러 타입 시나리오에 고유한 코드를 갖는 확장들을 추가해서, JIT 컴파일러를 생성함으로써 더 쉽게 만들어 질 수 있다. 같은 방식이 최적화 툴들, 분석 툴들, 수행 툴들, 테스팅 툴들, 및 기타와 같은 다른 소프트웨어 개발 툴들을 위해 추측될 수 있다.
그런 확장성 중추 컴파일러 및 툴의 프래임워크를 사용해서 그러한 주문형 컴파일러들 및 기타 소프트웨어 개발 툴들을 개발하는 것은 그 자체의 복잡성들을 갖는다. 이것은 언어들, 타겟 구조들, 및 개발되는 컴파일러 타입들에 (예를 들어, JIT, Pre-JIT, 자연 최적화 컴파일러 (Native Optimizing Compiler), 및 기타) 따라 복수의 상이한 소프트웨어 시나리오들을 반영하는 복수의 다른 방법들로 구성될 수 있는 확장성 컴파일러 및 툴 프래임워크에 대해 특히 사실이다. 한 가지 그런 복잡성은, 복수의 다른 소프트웨어 시나리오들에 따른 확장 필드들은 중추 프래임워크의 데이타 구조들을 확장시키기 위해 추가될 수 있도록, 확장 가능 방식으로 중추 프래임웨크의 데이타 구조들을 (예를 들어, 객체 지향 언어의 객체 클래스들) 정의하는 것과 관련이 있다. 클래스 정의에 확장 필드들을 추가하는 관용 기술들은, 증대된 개발 및 유지보수 비용들로 귀결될 수 있는, 감소된 수행 능력 및 증대된 코드 복잡성에 대해 높은 값을 치루어야만 사용될 수 있다.
그러므로, 복수의 다른 가능한 소프트웨어 개발 시나리오들에 따른 복수의 다른 클래스 확장들을 사용해서 중추 프래임워크 소프트웨어 시스템의 객체 클래스들을 확장하기 위해 단순하지만 효과적인 방법에 대한 필요가 있다.
설정 기반 확장 클래스들을 제공해서 소프트웨어 프로그램을 확장하는 방법들 및 시스템들에 대해 본 명세서에 기재된다. 한 양태에서, 다양한 소프트웨어 개발 시나리오들에 따른 클래스 확장들은 중추 클래스들을 확장하기 위해 제공하고 추가될 수 있다. 다양한 클래스 확장들은 특별 설정 클래스들을 개발하기 위해 조합될 수 있다. 한 양태에서, 중추 소프트웨어 프로그램의 클래스들은 정적으로 혹은 동적으로 확장 가능하게 정의될 수 있다. 중추 클래스들이 정적으로 확장 가능하게 선언되면, 중추 클래스 정의들 및 그들의 대응하는 클래스 확장들을 조합하는 헤더 파일은 확장 클래스를 생성하기 위해 생성되고 함께 컴파일될 수 있다. 그런 확장 클래스는 설정 기반 방식으로 중추 소프트웨어 프로그램을 확장하기 위해 사용될 수 있다.
그러나, 중추 클래스가 실행 시간에 동적으로 확장 가능하도록 선언되면, 중추 클래스 선언들을 포함하는 분리된 헤더 파일들 및 확장 선언들을 포함하는 분리된 파일들이 생성될 것이다. 그 다음, 중추 클래스들에 대응하는 헤더 파일들 및 클래스 확장들에 대응하는 헤더 파일들은, 클래스 확장들이 실행 시간에 중추 클래스들을 확장하기 위해 추가되도록, 서로 링크된 컴퓨터 실행 파일들을 생성하기 위해 분리되어 컴파일된다.
또 다른 양태에서, 확장 포인트들은 클래스 확장들이 삽입되어야 되는 중추 클래스 선언들 내의 포인트를 특별히 표시하는 중추 클래스 선언들 내에 제공될 수 있다. 확장성 클래스들 및 클래스 확장들을 정의하기 위한 적절한 문법을 갖는 객체 기술 언어는 또한 본 명세서에 기재된다.
또한, 확장 버전의 소프트웨어 프로그램을 생성하기 위해, 객체 기술 언어로 입력을 수신하고 소스 코드 표현으로 출력을 발생할 수 있는 전처리 프로그램이 본 명세서에 기재된다. 또 다른 양태에서, 전처리기는 컴퓨터에 의해 실행될 수 있는 형태로 결국 컴파일될 수 있는 임의의 언어로 출력을 발생할 수 있다.
<소프트웨어 개발 툴의 예들>
본 명세서에서 기재된 기술들은 컴파일러들을 사용해서 예들을 통해 기본적으로 설명이 되지만, 그 기술들 중의 임의의 것도 기타 소프트웨어 개발 툴들과 (예를 들어, 디버거들, 최적기들 (optimizer), 해체기들 (disassemblers), 시뮬레이터들, 및 소프트웨어 분석 툴들) 함께 사용될 수 있다.
<확장성 소프트웨어 개발 툴 프래임워크>
도 1은 복수 소프트웨어 개발 시나리오들을 반영하기 위해 복수의 상이한 구성들의 주문형 컴파일러들 및 기타 소프트웨어 개발 툴들을 개발하기 위해 확장될 수 있는 중추 소프트웨어 프래임워크의 예를 도시한다. 중추(110)는 주문형 소프트웨어 개발 툴들(111-114)을 개발하기 위한 빌딩 블럭 (building block)으로서 사용될 수 있는 확장성 구조를 제공한다. 중추(110) 소프트웨어는 한 개 이상의 소 프트웨어 개발 시나리오들에 관련되는 소프트웨어 확장들을 추가해서 확장될 수 있다. 예를 들어, IA-64 프로세서(121)를 타겟팅하는 JIT (Just-In-Time) 컴파일러(111)는 중추(110)에 소프트웨어 확장들을 제공해서 구성될 수 있다. 이 경우에서, 컴파일러는 JIT 컴파일러(111)이고 특정 프로세서 구조를 ((121)의 IA-46 프로세서) 위해 타겟팅된다는 사실은 중추(110)의 소프트웨어 확장들의 형태 및 내용을 결정할 수 있다. 그러므로, JIT 컴파일러 시나리오 및 IA-64 타겟 시나리오에 관련되는 소프트웨어 확장들은 주문형 소프트웨어 개발 툴을 개발하기 위한 구성을 명시하기 위해 사용될 수 있다. 소스 언어들 (101-104) 및 특정 소프트웨어 개발 시나리오들에 기초해서 턴온 (turn on) 및 턴오프 (turn off)될 수 있는 툴의 특징들과 같은 기타 시나리오 요소들은, 도 1의 것과 같은 표준 중추 프래임워크을 확장해서 주문형 소프트웨어 개발 툴들을 개발하는 작업에 복잡성을 또한 추가할 수 있다.
<소프트웨어 개발 시나리오의 예들>
중추 프래임워크(110)로 합병되는 소프트웨어 확장들의 선택에 영향을 줄 수 있는 다수의 소프트웨어 개발 시나리오들이 있을 수 있다. 예를 들어, 특정 소프트웨어 개발 툴을 위한 소프트웨어 개발 시나리오는 그 툴이 타겟팅할 수 있는 다양한 프로세서 구조들을 (예를 들어, IA-64, X86, AMD, ARM, 및 기타) 포함할 수 있다. 또한, 소프트웨어 개발 시나리오들은 수행되는 컴파일의 타입에 (예를 들어, JIT, Pre-JIT, 자연 최적화 컴파일러 (Native Optimizing Compiler)) 관련될 수 있다. 소프트웨어 개발 시나리오들은 분석, 최적화, 시뮬레이션, 디버깅, 코드 생성, 및 기타의 타입과 같은 소프트웨어 개발 툴에 의해 수행되는 기타 타입들의 기능에 또한 관련될 수 있다. 또 다른 소프트웨어 개발 시나리오는 소프트웨어 개발 툴이 특별히 구성될 수 있는 특정 프로그래밍 언어에 (예를 들어, Java, C++, C#, 및 기타) 관련 있을 수 있다. 게다가, 소프트웨어 개발 시나리오들은 툴이 관리되는 실행 환경과 (예를 들어, 마이크로소프트 .NET 프래임워크에 의해 제공되는 마이크로소프트 CLR 환경) 함께 사용되는지의 여부에 또한 관련될 수 있다. 위의 예들은 중추 프래임워크(110)를 적절히 확장하기 위해 필요한 확장들의 선택에 영향 줄 수 있는 소프트웨어 개발 시나리오들 또는 요소들의 제한된 세트를 제공한다. 유사하게, 다른 시나리오들은 주문형 소프트웨어 개발 툴을 구성하기 위해 필요한 소프트웨어 확장들의 선택에 또한 영향을 줄 수 있다. 그런 시나리오들의 콜렉션은 구성으로서 일컬어질 수 있다. 그러나, 주문형 소프트웨어 개발 툴의 특정 구성은 한 개의 시나리오에 의해 영향받을 수 있다.
<객체의 예들>
객체 지향 프로그래밍에서, 객체들은 데이타를 저장하고, 그 데이타의 기능을 액세스하기 위해 사용될 수 있다. 객체들은 클래스에 속한 객체를 실체화하기 위해 사용될 수 있는 클래스 정의들을 제공해서 정의된다.
도 2a는 변수 또는 데이타 멤버들 (예를 들어, 또는 필드들)(201A-C) 및 방법들(202A-C)을 갖는 "자전거" 타입의 예를 위한 클래스 정의(201)를 도시한다. 클래스(201)의 특정 인스턴스는 객체(202)이다. 일반적으로 말해서, 데이타 멤버들은 객체 상태를 기술할 수 있고, 방법들은 동작들을 그 객체에 할당하기 위해 사 용된다. 이 예에서, 변수들(201A-C)은 클래스(201)의 객체(202)가 실체화될 때 특정 값들(202A-C)이 주어진다. 데이타 멤버들 및 방법들은 때때로 "클래스 멤버들"로 집합적으로 일컬어진다.
유사하게, (110)과 같은 확장성 중추 프래임워크를 위한 클래스 정의들은 중추(110)를 구현하기 위해 필요한 데이타 구조들을 기재하기 위해 제공될 수 있다. 게다가, 다양한 소프트웨어 개발 시나리오들에 따라 중추 프래임워크(110)를 확장하기 위해서, 중추 클래스들은 그런 소프트웨어 개발 시나리오들에 따라 변화되거나 확장될 수 있다.
<소프트웨어 확장의 예들>
선택된 소프트웨어 개발 시나리오들에 따른 중추 소프트웨어 프래임워크를 확장하는 한 방식은 소프트웨어 클래스들을 확장하는 것이다. 소프트웨어 클래스들은 객체 클래스들의 정의들을 변화시켜서 확장될 수 있다.
클래스 확장의 예들은 한 개 이상의 클래스 확장 멤버들을 (예를 들어, 데이타 멤버들 또는 방법들) 포함할 수 있다. 클래스가 확장될 때, 클래스 정의는 특정 클래스 확장 멤버들을 포함하기 위해 수정된다.
그러므로, 중추 클래스들은 추가 클래스 멤버들이 정의되고 그들의 중추 클래스 정의들로 병합되어서 확장될 수 있다. 이러한 추가 클래스 멤버들은 중추 클래스들을 확장하는 클래스 확장 멤버들로서 일컬어질 수 있다. 집합적으로, 그런 클래스 확장 멤버들은 "클래스 확장"이라고 불리울 수 있다.
클래스 확장들은 다수의 다른 방식들로 매우 다양해질 수 있다. 예를 들어, 일부 클래스 확장들에 요구되는 특정 클래스 멤버들은 다른 것들에는 요구되지 않을 수 있다. 또한, 특정 클래스 확장 내의 방법들, 함수들, 및 인터페이스들은 다른 것들에는 전혀 존재하지 않을 수 있고, 또는, 만약 그들이 존재한다면, 다르게 정의될 수 있다. 그런 클래스 확장 멤버들은 소프트웨어 개발 시나리오와 관련 있을 수 있다. 예를 들어, JIT 컴파일러(111)를 개발하기 위한 컴파일러 프래임워크의 중추 클래스에 추가되는 그외 필드들 또는 클래스 멤버들은, 자연 최적화 컴파일러(113)에 연관되는 클래스 확장을 위해 요구될 수 있는 필드들 또는 클래스 멤버들의 수보다 훨씬 적을 수 있다.
<소프트웨어 개발 시나리오 클래스 확장 세트들의 예>
일단 소프트웨어 개발 툴을 구성하기 위한 소프트웨어 개발 시나리오들이 개발자에 의해 결정되면, 그들의 각각 클래스 확장들은 중추 소프트웨어 프래임워크의 확장 버전을 개발하기 위해 명시될 수 있다. 그 다음, 적절한 소프트웨어는 (예를 들어, 전처리기 또는 컴파일러) 특정 시나리오를 수신할 수 있고, 그 시나리오에 적절한 확장들의 세트를 포함할 수 있다. 그러므로, 특정 소프트웨어 개발 시나리오를 위한 클래스 확장들은 그 시나리오를 위해 적절한 한 개 이상의 클래스 확장들을 갖는 소프트웨어 개발 시나리오 클래스 확장 세트로 그룹화될 수 있다. 소프트웨어 개발 시나리오 클래스 확장 세트는 소프트웨어 개발 툴을 개발할 때 적절한 클래스들을 확장하기 위해 호출될 수 있다. 클래스들은 개발 또는 실행 시간 동안 확장될 수 있다.
예를 들어, 다양한 소프트웨어 클래스들은 중추(110)를 구현하기 위해 사용 된다. 개발자가 JIT 컴파일의 소프트웨어 개발 시나리오들 및 IA-64 타겟 구조를 명시하면, JIT 컴파일러 및 IA-64 타겟 구조와 관련되는 클래스 확장들은 중추 클래스 정의들에 병합되어 확장된 버전의 중추 프래임워크를 생성하는 데에 사용되는 중추 프래임워크(110)의 클래스들을 확장한다.
<중추 클래스들 및 그들의 확장들 간의 관계 표현>
도 2b는 중추 클래스 정의들 및 그들의 클래스 확장들 간의 관계를 설명하는 블럭도이다. 중추 노드(210)는 중추 클래스의 정의에 관련될 수 있고, 클래스 멤버들 1 및 2를 갖는 것으로 도시된다. (220)의 확장 클래스 정의는 특정 소프트웨어 개발 시나리오들을 구현하기 위해 필요할 수 있고, 그것은 확장(225)을 통해 추가 클래스 멤버들(3 및 4)을 추가할 수 있다. 확장 클래스 정의(230)는 (220)과 동일하고, 중추 클래스 정의(210)에 확장(225)에서 동일한 추가 클래스 멤버들 3 및 4를 추가해서 생성될 수 있다. 그러나, 확장 클래스 정의(260)는 다르고, 확장(265)에 추가 클래스 멤버들 5 및 6을 추가해서 생성될 수 있다. 유사한 방식으로, 확장 클래스 정의들(240, 250)은 확장들(245, 255)을 클래스 정의들(220, 230)로 추가해서 확장될 수 있다. 또한, 확장 클래스 정의들(270)은 확장(255)을 확장 클래스 정의(260)로 추가해서 생성될 수 있다.
도 2b의 예에서, 클래스 확장들은 한 개 이상의 클래스 확장 멤버를 갖는 것으로 도시된다. 그러나, 한 개의 클래스 확장은 한 개이상의 클래스 확장 멤버들을 가질 수 있거나, 그것은 중추 클래스 정의의 한 개이상의 기존의 클래스 멤버들을 대체할 수 있다. 게다가, 클래스 확장은 중추 클래스 정의에서 발견되는 방법 멤버의 함수의 정의 형태일 수 있다.
그러므로, 중추 소프트웨어 개발 툴 프래임워크를 위한 클래스 정의들의 확장들은, 도1의 확장성 소프트웨어 개발 툴 프래임워크의 예의 확장 버전의 특정 구성에 영향을 줄 수 있는, 컴파일 시나리오 (JIT, Pre-JIT, 자연 최적화 컴파일러 (Native Optimizing Compiler), 및 기타), 언어 시나리오 (C#, Visual Basic, 및 기타), 타겟 시나리오 (IA-64, X86, AMD, ARM, 및 기타), 및 기타 변수들에 따른 추가 클래스 확장들을 갖고, 도 2b에 도시된 바와 같이, 표현될 수 있다.
그러나, 복수의 소프트웨어 개발 시나리오들에 (예를 들어, 타겟, 컴파일러, 및 기타) 따를 수 있는 특정 구성을 갖는 중추 프래임워크를 위한 클래스 확장들을 표현하는 것은, 곧 매우 복잡해질 수 있다. 예를 들어, 도 2b는 일부 단순화된 확장 경우들을 도시하고, 그 확장 클래스 정의들(220, 230, 240, 250)은 복수 부모 클래스들을 확장하기 위해 사용되고 있는 임의의 한 개의 확장도 없이 순서화된 방식으로 이전에 정의된 클래스들로부터 상속된다. 그러나, 이것은, 클래스 계층 구조의 다양한 레벨들에서 복수의 상이한 방식들로 확장될 필요가 있을 수 있는 소프트웨어 개발 툴의 특정 구성을 위한 확장 클래스를 표현할 때 그 경우가 아닐 수 있다.
예를 들어, 동일 확장들의 일부는, 한 개의 부모 클래스를 확장하는 대신에, 복수의 부모 클래스들을 확장하기 위해 사용될 필요가 있을 수 있다. 예를 들어, 확장(255)은 클래스 정의(260)를 비롯해서 클래스 정의(230)를 확장하기 위해 사용될 수 있다. 그러므로, 소프트웨어 개발 시나리오에 따라, 동일 확장은 다양한 부 모 클래스들을 확장하기 위해 사용될 수 있다. 명백한 수의 소프트웨어 개발 시나리오들 및 관련된 확장 구성들과 조합될 때 복수 상속들의 그런 가능성은 컴퓨터 프로그래머들에게 큰 짐이 된다.
한 가지 접근법에서, 중추 클래스 정의들 및 확장 중추 클래스들의 정의들 간의 관계는 기본 클래스들 및 그들의 서브클래스들 간에 상속들의 체인으로서 프로그램될 수 있다. 그러나, 그런 접근법은 클래스 블로트 (bloat)로 귀결하는 경향이 있고, 곧 프로그래머에게 짐이 될 수 있다. 이 접근법으로, 프로그래머는 확장 서브 클래스들을 수동으로 개발하는 작업 뿐만이 아니라 제한된 메모리 리소스들의 사용을 유지관리하기 위해 사용되지 않는 객체들을 삭제하는 추가 작업도 또한 갖는다.
기본 클래스 정의를 확장하는 또 하나의 수동적 접근법은 조건부 컴파일을 구현하는 IF-DEF 문들 또는 다른 방법들을 사용하는 것일 것이다. 그런 접근법에서, 프로그래머는 기본 클래스 정의를 제공할 수 있고, 기본 클래스 정의에 확장들을 조건부적으로 추가하기 위해 그들의 몸체에 확장들의 정의를 포함하는 IF-DEF 문들 또는 기타 조건 컴파일 문들을 수동으로 추가할 수 있다. 이 접근법은 필요시에만 클래스들을 확장하는 이득을 갖고 있고, 그러므로, 원치않은 오버헤드 (overhead)로 귀결될 수 있는, 각 확장에 대해 새 서브클래스를 생성하는 것보다 더 나은 접근법일 수 있다. 그러나, 이 접근법은 성격상 또한 수동이고, 프로그래머에게, 코드가 복수의 IF-DEF 문들로 어지럽혀지게되는, 각 가능한 구성의 다수의 위치들에 IF-DEF 문들을 포함하도록 요구한다.
<객체 기술 언어를 사용해서 클래스 확장들 및 중추 클래스에의 그들의 연계들을 생성하는 전반적 프로세스의 예>
도 3a는 중추 프래임워크를 확장해서 컴파일러 또는 툴을 개발하기 위한 중추 클래스 정의를 확장하는 전반적 프로세스를 도시한다. 첫째로, 확장을 표시하는 데이타는 (302) 및 (304)에서 대면되고, 소프트웨어 개발 툴의 클래스는 그 확장에 의해 지시된 대로 확장된다.
도 3b는 중추 프래임워크를 확장하기 위해 소프트웨어 시나리오에 따른 확장들을 사용해서 컴파일러 또는 소프트웨어 개발 툴을 개발하는 전반적 프로세스를 기재한다. (310)에서, 단순화된 객체 정의 언어 (ODL)는 중추 클래스들을 정의하기 위해 사용될 수 있다. 그 다음 (320)에서, 그 자신의 컴파일 타입 시나리오 및 개발되는 특정 타겟 시나리오를 포함하는 소프트웨어 개발 시나리오들에 기초한 특정 소프트웨어 개발 툴의 구성이 결정될 수 있다. 그 다음, 구성에 영향을 미치는 각 시나리오 요소에 기초해서, 객체 기술 언어는 중추 클래스를 확장하기 위해 필요한 추가 또는 다른 클래스 확장 멤버들을 표현하기 위해 (330)에서 확장들을 정의하기 위해 사용될 수 있다. (340)에서, 확장은 중추 클래스 정의를 적절히 확장하기 위해 중추 클래스와 연계될 수 있다. 객체 기술 언어를 위한 문법은 중추 클래스들을 확장 가능 여부로 정의하고 또한 특정 세트의 클래스 확장 멤버들을 선택된 중추 클래스의 확장들로서 더 연계하기 위해 제공되어야 한다. 그런 기술 언어를 위한 적절한 문법은 아래 예들에서 더 기재된다. 게다가, 전처리기 번역 프로그램은 데이타 또는 객체 기술 언어를 프로그래밍 언어의 소스 코드로 번역하기 위 해 사용될 수 있다. 그런 전처리 후에, (350)에서, 확장 클래스 정의는 더 처리될 수 있고, 중추 프래임워크를 확장해서 특정 구성의 컴파일러 또는 기타 소프트웨어 개발 툴들을 구현하기 위해 사용될 수 있다.
위의 프로세스를 사용해서, 확장들의 복수의 상이한 정의들은 분리되어 제공될 수 있고, 각 확장은 임의의 복잡한 상속 관계들을 유지할 필요 없이 필요하면 중추 또는 기본 클래스를 단순히 확장할 수 있다. 중추 클래스의 특정 확장을 제공하는 프로그래머들은 그 중추 클래스의 기타 확장들을 알 필요가 없다. 이것은 확장들을 정의하는 것을 단순하게 할 뿐만 아니라, 확장 중추 클래스의 사용자들은 그 확장 중추 클래스를 사용하기 위해 단지 그 중추 클래스 이름들만을 알 필요가 있다. 그러므로, 프로그래머들은 확장 클래스 정의들을 사용할 때 클래스 정의들 간에 복잡한 계층 관계들을 기억하는 작업을 안 해도 된다.
<실행시 동적 중추 프래임워크 프로그램의 확장 및 중추 프로그램의 컴파일 이전의 정적 중추 프래임워크 프로그램의 확장>
중추 프래임워크 프로그램을 확장하기 위한 한 가지 접근법은, 중추 프로그램의 소스 코드 파일들에 액세스를 얻기 위해서 및 확장들을 정의하기 위해 객체 기술 언어를 사용해서 필요하면 정적으로 중추 클래스들을 확장할 수 있고, 이것은 확장 클래스들과 관련된 소스 코드를 생성하기 위해 처리될 수 있다.
다른 경우에서, 확장 클래스들은 소스 코드 프로그래밍 언어로 확장들을 수동으로 직접 소스 코드에 추가해서 생성될 수 있다. 도 4a는 이 접근법을 도시하고, 확장들(420, 430, 및 440)은 그것을 확장하기 위해 중추 프래임워크 파일(410) 에 추가되고, 그 다음 확장들(420, 430, 및 440)은 이제 확장된 중추 프래임워크 파일(410)의 일부로서 컴파일된다.
그러나, 이 접근법은, (420, 430, 및 440)과 같은 확장들의 정의를 제공하는 프로그래머들은 중추 프래임워크(410)의 소스 코드로 액세스할 필요가 있을 것이기 때문에 모든 목적들에 적합하지는 않다. 이것은, 중추 프래임워크(410)의 제공자들이 중추 프래임워크 소스 코드를 비밀 또는 변환하지 않는 상태로 유지하기를 원하는 경우들에는 바람직하지 않을 것이다. 이 경우, 도 4b에 도시된 제2 접근법이 사용될 수 있고, 중추 컴파일러 및 툴 프래임워크(450)는 확장들(460, 470, 및 480)로부터 분리된 파일로서 컴파일된다.
제2 접근법에서, 확장들(460, 470, 480) 및 중추 프래임워크(450)는, 실행시에 확장들이 중추 프래임워크를 적절하게 확장하기 위해 중추 프래임워크에 연결되도록, 서로 링크들을 갖기 위해 채택될 수 있다. 링크들은, 어떤 확장들이 특정 중추 클래스들을 확장하기 위해 사용되어야 하는지를 명시하는 단순한 링크 리스트로서 구현될 수 있다. 이것은 필요할 때 중추 클래스들에 확장들을 적절히 관련시키는 단순한 관용의 이름짓기 형식들을 사용해서 또한 성취될 수 있다. 제1 접근법과 비교해서, 이 제2 접근법은 실행시에 링크의 양태에 관련된 추가 오버헤드 처리를 요구할 수 있고, 그러므로, 더딘 구현일 수 있다. 반면에, 이 제2 접근법은 개발자들이 중추 프래임워크의 소스 코드에 액세스를 갖지 않아서 중추 클래스의 확장을 허용하는 유연성을 제공한다.
<컴파일 전에 정적으로 중추 클래스를 확장하는 방법의 예>
도 5는, 위의 도 4a를 참조해서 도시된 바와 같이, 컴파일 시간 이전에 중추 프래임워크 프로그램에 관련된 클래스들을 정적으로 확장하는 방법을 도시한다. 중추 클래스들 및 그들의 확장들은 객체 기술 언어를 사용해서 정의될 수 있다. 중추 클래스들 및 클래스 확장들의 정의들은 동시에 또는 함께 생성될 필요가 없다. 그러나, 클래스 확장들을 추가하는 것은 그 중추 프로그램의 소스 코드를 어느 정도 액세스하는 것을 요구할 것이다. 일단 그런 클래스 정의들이 얻어지면, 그 다음 (510)에서, 중추 클래스들 및 그들의 확장들의 정의들은 객체 기술 언어 표현을 소스 코드 표현으로 번역할 수 있는 ODL 전처리기에 의해 함께 처리될 수 있다. 그러므로, (520)에서, ODL 프로세서에 의한 전처리의 결과는 C++와 같은 소스 코드 언어로 중추 클래스들 및 그들의 확장들의 정의들을 표현하는 헤더 파일 및 가능한 어떤 기타 코드일 것이다. 게다가, (530)에서, 중추 클래스 멤버들 및 클래스 확장 멤버들을 포함하는 확장 클래스 정의들을 갖는 헤더 파일은, 주문형 구성 컴파일러들 및 기타 소프트웨어 개발 툴들을 생성하기 위해 현재 확장된 중추 프래임워크에 관련된 나머지 코드와 함께 그 다음 컴파일될 것이다.
도 6은 도 5의 프로세스를 구현하는 시스템의 예를 도시한다. 도6에 도시된 바와 같이, 중추 클래스 정의들(620)의 확장들(610)의 복수 정의들은 객체 기술 언어 파일들로서 저장될 수 있다. 중추 클래스 정의들 및 클래스 확장 정의들 각각에 대응하는 파일들(610, 620)을 수신할 수 있는 ODL 전처리기(630)가 제공될 수 있다. 전처리기는 그들의 객체 기술 언어 형태로부터 소스 코드 표현(640)으로 파일들(610, 620)을 또한 번역할 수 있어야 한다. 소스 코드 표현은 컴퓨터 프로세 서에 의해 실행 가능한 형태로 결국은 컴파일될 수 있는 임의의 언어일 수 있다. 전처리기(630)에 의해 생성되는 소스 코드(640)는 클래스 정의들이 전형적으로 저장되는 헤더 파일들을 포함할 수 있다. 전처리기(630)에 의해 출력되는 소스 코드(640)의 언어에 적절한 소스 코드 컴파일러(650)는 컴파일러들 및 기타 소프트웨어 개발 툴들과 같은 주문형 확장 버전들의 중추 소프트웨어 프로그램들을 생성하기 위해 소스 코드 표현(640)을 컴파일하기 위해 제공될 수 있다.
<실행시 동적 중추 클래스 확장 방법의 예>
도 7은 실행시에 확장을 적절한 중추 클래스들로 링크해서 확장성 중추 프래임워크 소프트웨어 프로그램의 중추 클래스 정의를 확장하는 방법을 도시한다. 중추 클래스 정의들 및 확장들은 객체 기술 언어를 사용해서 분리해서 표현될 수 있다. 기술 언어는, 중추 클래스 정의가 동적 확장 가능함을 표현하기에 적절할 수 있다. 또한, 그런 언어는 특정 중추 클래스 정의들 및 그들의 확장들 간의 연계들을 표현하기에 적절할 수 있다. 한 가지 그런 적절한 언어의 문법은 아래 더 상세히 기재된다. 일단 정의들이 표현되면, ODL 전처리기는, 객체 기술 언어 표현의 정의들을 (720)에서 소스 코드 표현으로 번역하기 위해 (710)에서 사용될 수 있다. 그러나, 정적 프로세스 (도 6)와는 달리, 도 7의 동적 프로세스에서, 중추 클래스 정의들은 그들의 확장들의 정의와 함께 ODL 전처리기에 의해 처리되지 않는다. 그 대신, 중추 클래스 정의들에 대응하는 소스 코드 헤더 파일들 및 클래스 확장 정의들에 대응하는 소스 코드 헤더 파일들은 분리되어 생성된다. 이것들은 다른 ODL 전처리기들에 의해 생성될 수 있지만, 그것은 그럴 필요가 없다. 게다가, (730)에 서, 중추 클래스 정의들을 포함하는 헤더 파일들 및 클래스 확장 정의들을 포함하는 헤더 파일들은 컴퓨터에 의해 실행 가능한 분리된 파일들을 생성하기 위해 분리되어 컴파일된다. 그러나, (740)에서, 실행 시간 동안, 클래스 확장 정의들은 정의된 바와 같이 중추 클래스들을 확장하기 위해 적절한 중추 클래스 정의들에 연결될 수 있다.
도 8은 도 7의 프로세스를 구현하는 시스템의 한 예를 도시한다. 도 8에 도시된 바와 같이, 클래스 확장 정의들은 객체 기술 언어로 제공되고, 파일들(810)에 저장된다. 각 클래스 확장이 도시된 바와 같이 분리된 파일로서 저장되는 것은 불필요하다. 중추 클래스 정의들은 객체 기술 언어로 또한 제공되고, 파일들(820)에 저장된다. 도 7에 기재된 처리에 대응해서, ODL 전처리기(825)는 헤더 파일(835)에 저장되기 위해 객체 기술 언어 표현으로부터 소스 코드 언어 표현으로 중추 클래스 정의들을 번역해서 중추 클래스 정의들을 처리하기 위해 제공된다. 유사하게, 또 다른 ODL 전처리기(830)는 클래스 확장들을 포함하는 소스 코드 헤더 파일들(840)을 생성하기 위해 클래스 확장 파일들(810)을 처리하기 위해 제공될 수 있다. 소스 코드 컴파일러(845)는 클래스 확장 정의들을 포함하는 컴퓨터 실행 파일(860)을 생성하기 위해 클래스 확장 헤더 파일들(840)을 컴파일하기 위해 제공될 수 있다. 유사하게, 소스 컴파일러(850)는 중추 클래스 정의들을 포함하는 컴퓨터 실행 파일들(855)을 생성하기 위해 중추 클래스 정의들을 포함하는 헤더 파일들(835)을 컴파일하기 위해 제공될 수 있다. 그 다음, 실행시에, 중추 클래스들(855)에 대응하는 실행 파일들 및 클래스 확장들에 대응하는 실행 파일들은 실행되 고, 중추 및 확장 클래스들 내에 제공되는 링크들(870)은 중추 클래스들이 적절히 확장되도록 할 수 있다.
<정적 확장성 클래스 정의들을 제공하는 객체 기술 언어>
위에 기재된 바와 같이, 단순한 객체 기술 언어는 확장성 중추 프래임워크 프로그램의 원하는 구성에 따른 클래스 정의들을 제공하기 위해 사용될 수 있다. 예를 들어, 중추 프래임워크의 특정 구성은 컴파일러 타입 (예를 들어, JIT, Pre-JIT, 자연 최적화 (Native Optimizing), 및 기타), 타겟 타입 (예를 들어, IA-64, X86, ARM, 및 기타), 및 기타 시나리오 요소들과 같은 소프트웨어 개발 시나리오에 기초해서 클래스 정의들에 분리된 요구들을 할 수 있다. 다음 몇 개 섹션은, 위의 도 5에서 8로의 참조에서 기재된 바와 같이 소스 코드 언어로 클래스 정의들을 생성하기 위해 ODL 전처리기에 의해 처리될 수 있는 그런 언어를 기재한다.
도 9a는 객체 기술 언어를 사용해서 표준 클래스 선언을 도시한다. 일반적으로, 선언(900)은 헤더(912) 및 몸체(912)를 포함한다. 헤더는 클래스 가시성 (예를 들어, 퍼블릭 (public), 프라이비트 (private), 및 기타), 클래스 이름, 및 기타를 선언하기 위해 사용될 수 있다. (913)에서 도시된 바와 같이, 헤더는 다음 예에서와 같이 사각 꺽쇠들 안에 포함된 속성 정의를 또한 포함한다:
[속성_이름 (attribute_name)]
이 선언은, 관리 클래스 (managed class)인지 (예를 들어, .NET 시나리오에서) 여부와 같은, 클래스의 속성들, 및 클래스의 확장 속성을 정의하기 위해 사용될 수 있다. 예를 들어, 관리 클래스인지 여부를 정의하는 것은, 이 클래스의 객 체들을 위한 가비지 콜렉션 (garbage collection )이 자동 수행됨을 (예를 들어, .NET 프래임워크에 의해) 표시하기 위해 [gc] 속성을 선언해서 성취될 수 있다. 클래스 확장 속성에 대해서, 한 가지 접근법은 모든 클래스들이 위에 기재된 대로 정적으로 확장 가능함을 가정하는 것이다. 그러므로, 아무런 특수 속성이, 클래스가 정적으로 확장 가능함을 특별히 선언하기 위해 요구되지 않을 것이다. 그러나, 도 10a에 도시된 바와 같이, 실행시에 (즉, 동적으로) 확장되는 클래스는 [확장 가능 (extensible)]과 같은 특수 속성으로 선언될 수 있다.
도 9a에 도시된 예에서, 클래스 SYM은 그 자신의 몸체에 중추 클래스 멤버들(914, 915)을 갖는 정적 확장 가능 클래스이다. 클래스(900)는 중추 클래스일 수 있고, 클래스 멤버들 타입 (TYPE)(914) 및 이름 (NAME)(915)은 중추 클래스에 기반한 모든 설정 기반 확장 클래스들에 공통인 클래스 멤버들일 수 있다. 일단 중추 클래스(900)가 정의되면, 중추 프래임워크의 특정 구성을 위한 확장 버전의 중추 클래스 정의를 생성하기 위한 클래스 확장들이 제공될 수 있다.
도 9b는 객체 기술 언어로 두 개의 그런 클래스 확장 정의들(920)을 도시한다. 단순성을 위해서, 클래스 확장 형태는 중추 클래스 선언 또는 정의의 그것과 매우 유사하다. 확장(925)은 중추 프래임워크로부터 JIT 컴파일러를 개발하는 JIT 컴파일 시나리오에 관련된 클래스 멤버들(926)을 나타낸다. JIT 컴파일 시나리오는 JIT 컴파일러 구성에 고유하지만, 다른 구성들에는 그렇게 필요하지 않은 인터페이스들, 방법들, 및 변수들과 같은 고유의 클래스 멤버들(926)을 필요로 할 것이다. 그러므로, 확장(925)는 ODL 전처리기에 의해 처리될 때, 도 9a의 중추 클래스 정의를 확장하는 확장(925)이 제공될 수 있다. (927)에서 키워드 "확장 (extend)"은, 이것은 중추 클래스 SYM을 위한 정적 확장임을 표시한다. 또한, 속성 명시[JIT](928)는, 확장이 중추 프래임워크를 확장할 때 JIT 컴파일러를 구현하기 위해 단지 적용됨을 지시한다. 유사하게, 확장(930)은 IA-64 프로세서를 타겟팅하는 툴 개발에 고유한 클래스 멤버들(931)을 추가하기 위해 제공될 수 있다. 두 개의 확장들(925, 930)은 서로 독립적이고, 다른 것들에 의해 제공될 수 있고, 확장들은 관용의 클래스-서브클래스 의존성들을 사용해서 중추 클래스 정의를 확장하는 경우일 수 있는 것처럼, 임의의 방식으로 서로 의존할 필요가 없다. 게다가, 프로그래머들은 복잡한 의존 관계들을 트랙킹 (tracking)할 필요가 없다.
기타 요소들에 기인한 기타 확장들이 제공될 수 있다. 예를 들어, C++를 위한 중간 언어에서, 두 개 함수 심볼 (symbol)들을 함께 링크할 필요가 있을 수 있다. 이 함수는 C++를 위한 중간 언어를 처리하기 위해 구성된 소프트웨어 개발 툴들에 고유한 확장으로서 추가될 수 있고, 확장은 두 함수 심볼들을 함께 링크하는 방법을 포함할 수 있다.
확장(925)에 관련된 JIT 컴파일러의 예 및 확장(930)에 관련된 IA-64 타겟의 예의 실제 조건적 구현은, ODL 전처리기가 도 9c에 도시된 바와 같이 확장 클래스 정의의 소스 코드 표현을 생성할 때, 구현될 수 있다. 확장 클래스(940)는 중추 클래스 정의들에 관련된 원래 클래스 멤버들을 갖는 것만이 도시될 뿐만이 아니라, 그것은 이제 추가 클래스 멤버들(926, 931)도 갖는다. 그러므로, 도시된 바와 같이 확장 클래스는 IA-64 프로세서를 타겟팅하는 JIT 컴파일러의 구성을 위한 클래 스 정의이다. 동일한 방식으로, 복수의 다른 소프트웨어 개발 시나리오들에 기초한 복수의 다른 확장들은 중추 클래스를 정적으로 확장하기 위해 조건적으로 추가될 수 있다. 확장 중추 클래스(940)는, 적절한 소스 코드 컴파일러를 사용해서 컴파일될 때, 주문형 버전의 중추 프래임워크를 생성하는 것을 도울 것이다.
<동적 확장성 클래스 정의들을 제공하기 위한 객체 기술 언어>
정적 확장들의 한 가지 이득은, 그것이 컴퓨터에 의해 실행 가능한 한 개 파일을 생성하기 위해 중추 프래임워크 및 확장을 함께 컴파일하는 것을 요구한다는 것이다. 이것은, 확장들을 제공하고 있는 것들이 확장들과 더불어 그것을 재컴파일하기 위해 중추 프래임워크의 소스 코드에 액세스를 할 필요가 또한 있음을 의미한다. 다수의 다른 이유들로 바람직하지 않을 수 있는, 이 상황을 피하기 위해서, 확장 클래스 정의들은 실행시에 생성될 수 있다.
도 10a는 확장 버전의 중추 프래임워크의 특정 구성에 기초해서 중추 클래스 정의를 동적으로 확장하기 위해 객체 기술 언어 (ODL)를 사용해서 클래스 선언의 한 예를 도시한다. 클래스 INSTR(1010)를 위한 중추 클래스 정의는, 이것이 동적으로 확장 가능 클래스 선언임을 표시하기 위해 (1011)에서 속성 "확장 가능 (extensible)"을 갖는 헤더를 갖는다. 클래스 선언의 몸체(1012)는 프래임워크에 공통인 클래스 멤버들을 갖는다. 그러나, ODL 전처리기에 의해 처리될 때, (1011)에서 속성 [확장 가능]은, 적절히 링크된 확장에 의해 실행시에 나중에 제공되는 클래스 멤버들을 더 추가하기 위한 플래이스 홀더 (place holder)로서 역할할 수 있는 소스 코드에 확장 객체를 생성하고 삽입한다. 도 10b는 특정 타겟 시나리오 와 연계된 그런 한 개의 확장(1020)을 도시한다. 이 예에서, 확장(1020)은 IA-64 타겟 프로세서를 위한 소프트웨어 개발 툴의 구현에 특정한 클래스 확장 멤버들 HINTBITS(1021) 및 PREDICATES(1022)을 추가한다. 속성[IA-64](1023)은, 이 특정 확장이 속성[IA-64] 프로세서를 타겟팅하는 중추 컴파일러 및 툴 프래임워크의 주문형 구성에 단지 적용 가능함을 표시하기 위해 사용된다. 키워드(1024)"확장 (extends)"은, 확장(1020)이 (1025)에서 클래스 INSTR의 동적 확장임을 표시하기 위해 추가된다.
위에서 기재된 바와 같이, 확장 클래스를 동적으로 생성하는 경우에서, 중추 클래스 정의들(1010) 및 클래스 확장 정의들(1020)은 중추 클래스 정의들 및 그들의 확장들의 분리된 소스 코드 표현들을 생성하기 위해 처리된다. 또한, 이러한 분리된 소스 코드 표현들은 컴퓨터에 의해 실행 가능한 분리된 파일들을 생성하기 위해 나중에 분리되어 컴파일된다. 이 경우, 위에 기재된 정적 확장들과는 달리, 중추 클래스 정의를 확장하기 위해 필요한 클래스 확장 멤버들은 확장 클래스 정의들을 갖는 소스 코드 헤더 파일들에 단순히 추가되지 않는다, 대신에, 도 10c에 도시된 바와 같이, 기타 코드(1031)는, 동적으로 확장 가능 클래스 정의는 실행시에 중추 클래스 정의(1010)에 추가되기를 기대하는 GET 및 SET 클래스 확장들에 추가될 수 있다. 그러므로, 정적 확장에 비교해서, 동적 확장들은 실행시에 클래스 정의를 적절히 확장하기 위해 일부 추가 과정들(1031)을 실행해야 하는 추가 오버헤드를 가질 수 있다. 그러므로, 전형적으로 동적 확장은 처리 속도를 감소하지만, 다른 한편으로는, 이 접근법에서 중추 및 확장들은 분리되어 컴파일될 수 있기 때문에 확장들을 제공하는 추가 유연성을 제공한다. 이것은 중추 프래임워크의 소스 코드에 액세스할 필요 없이 제 3자들이 중추 클래스 정의들에 확장들을 제공하는 것을 허용한다.
도 11a는 동적으로 확장 가능한 중추 클래스 정의(1110)의 또 다른 예를 도시한다. 키워드 "확장 가능"(1111)은, 이 클래스 INSTR는 확장 가능하고, 클래스의 몸체는 또한 임의의 확장들의 추가 전에 클래스를 위해 클래스 멤버들을 또한 제공함을 표시한다. 클래스 멤버 방법들(1112) 중의 하나는 클래스 확장들 중의 하나는 방법 또는 인터페이스 FOO()를 구체적으로 정의해서 표시된 확장 포인트(1112)에 병합됨을 표시하는 키워드 "확장 포인트 (extension point)"를 갖는다.
도 11b는, IA-64 프로세서를 타겟팅하는 구성을 위해 필요한 클래스 확장 멤버들 HINTBITS(1121) 및 PREDICATES(1122) 뿐만 아니라, 확장 포인트(1112)에 의해 표시되는 방법 FOO()(1123)의 정의를 또한 제공해서 도 11a에 도시된 확장 가능 클래스를 확장하기 위한 적절한 동적 확장(1120)을 도시한다. "확장 포인트" 키워드는 확장들이 삽입될 수 있는 중추 클래스 정의들의 특정 포인터들을 표시하기 위해 면밀한 제어를 제공한다. 게다가, 이것은, 적절한 확장들에 적절한 포인트들을 자동 생성하는 객체 정의 언어의 사용에 의해 단순한 방식으로 수행될 수 있다. 유사하게, 확장 포인트들은 정적으로 확장 가능한 중추 클래스 정의로 또한 표현될 수 있다.
<소프트웨어 개발 툴들을 주문형화하기 위한 구현의 예>
도 12는 복수 소프트웨어 개발 시나리오들에 따라 소프트웨어 개발 툴들을 구성하는 실시예를 도시한다. 중추 클래스(1210)는 다양한 소프트웨어 개발 시나리오들에 관련된 클래스 확장들을 추가해서 확장될 수 있다. 예를 들어, 클래스 확장들은 특정 타겟 구조들(1220) (예를 들어, X86, IA-64, 및 기타)의 소프트웨어 개발 시나리오에 관련될 수 있고, 기타 확장들은 컴파일 시나리오들(1230) (예를 들어, JIT, 자연 최적화 컴파일러, 및 기타)에 관련될 수 있다. 유사하게, 기타 소프트웨어 개발 시나리오들은 확장들의 선택에 영향을 미친다. 예를 들어, 소프트웨어 개발 툴의 관리 코드 구현(1240)에 특정한 확장들일 수 있거나, 확장은 프로그래밍 언어의 세트 중의 한 개를 표시할 수 있다. 그러므로, 이러한 확장들의 다양한 구성들은 확장 가능 중추 프래임워크를 사용해서 소프트웨어 개발 툴(1250)을 구성하기 위해 중추 클래스(1210)를 확장하기 위해 추가될 수 있다.
<대체들 (alternatives)>
기재된 실시예들을 참조해서 본 발명의 원칙들을 기재하고 설명했으므로, 기재된 실시예들이 그런 원칙들로부터 벗어나지 않고 배치 및 상세성에서 수정될 수 있음이 인식될 것이다. 본 명세서에 기재된 기술은 컴파일러들을 사용한 예들을 통해 설명되지만, 그 기술들 중의 임의의 것은 기타 소프트웨어 개발 툴들을 (예를 들어, 디버거들, 최적기들, 시뮬레이터들, 및 소프트웨어 분석 툴들) 사용할 수 있다. 게다가, 확장들을 생성하는 원칙들은 중추 클래스들의 확장에 참조해서 본 명세서에 기본적으로 기재되지만, 동일 원칙들은 중추 클래스의 임의의 확장들 또는 서브클래스들을 확장하기 위해 동일하게 적용할 수 있다. 또한, ODL 프로세서는 객체 기술 언어를 수신하고 소스 코드 언어들을 생성할 수 있도록 위에서 참조된 다. 그러나, ODL 전처리기의 출력은 소스 코드 언어들로만 제한될 필요가 없다. 그것은, 중간 표현들 또는 마이크로소프트 .NET CIL과 같은 중간 언어들 또는 프로세서에 의해 실행 가능한 임의의 형태로, 출력으로서 또한 제공할 수 있다.
또한, 본 명세서에 기술된 프로그램들, 프로세스들, 또는 방법들은 임의의 특정 타입의 컴퓨터 장치에 관련되거나 제한되지 않는다. 다양한 타입들의 일반 목적 또는 특수 컴퓨터 장치가 함께 사용될 수 있고, 본 명세서에 기재된 지시에 따른 동작들을 수행할 수 있다. 본 명세서에서 기재된 동작들은 그런 동작들을 수행하기 위해 컴퓨터 실행 가능한 명령들을 포함하는 컴퓨터 판독 가능 매체에 의해 성취될 수 있다. 소프트웨어에 도시된 설명된 실시예의 요소들은 하드웨어에 구현될 수 있고, 그 반대도 성립한다. 본 발명의 원칙들이 적용될 수 있는 다수의 가능한 실시예들의 관점에서, 상세한 실시예들은 설명 목적일 뿐이고, 본 발명의 범위를 제한하도록 받아들여져서는 안됨이 인식되어야 한다. 그 보다는, 우리는 다음 청구항들 및 그것들의 동격들의 범위 및 취지 내에 올 수 있는 모든 그런 실시예들을 우리의 발명으로서 청구한다.
설정 기반 확장 클래스들을 갖는 소프트웨어 프로그램을 확장하는 방법들 및 시스템들이 제공된다. 확장성 중추 클래스들은 컴파일시 또는 실행시에 정적 또는 동적으로 확장 가능하도록 설정될 수 있다. 확장 가능 중추 클래스들 및 그 확장들은 객체 기술 언어로 정의된다. 전처리기는 객체 기술 언어로 기술된 입력을 소스 코드 표현으로 변환하여 확장 버전의 소프트웨어 프로그램을 생성한다.
Claims (44)
- 소프트웨어에 대한 복수의 확장을 통해, 객체 클래스들을 제공하는 객체 지향 프로그래밍 언어로 쓰인 상기 소프트웨어의 확장 버전을 생성하는 방법으로서,객체 기술 언어 전처리기에 의해, 상기 소프트웨어의 확장 버전에 의해 구현될 각 소프트웨어 개발 시나리오들에 대한 확장들을 포함하는 복수의 소프트웨어 개발 시나리오 클래스 확장 세트를 수신하는 단계 - 상기 각 소프트웨어 개발 시나리오들은 복수의 타겟 프로세서 구조와 복수의 컴파일 시나리오(compilation scenario)를 특정함 - ; 및상기 소프트웨어의 한 개 이상의 클래스를 확장하는 단계를 포함하고,상기 확장하는 단계는,상기 소프트웨어의 확장 버전을 생성하기 위해 정적으로 확장 가능한 것으로 표시되는 소프트웨어의 클래스들과 그들의 대응되는 확장들을 처리하는 단계를 포함하고,상기 처리하는 단계는,상기 객체 기술 언어 전처리기를 사용하여 상기 소프트웨어의 클래스들 및 그들의 대응하는 확장들을 포함하는 확장 클래스의 소스 코드 표현을 갖는 헤더 파일을 생성하는 단계; 및상기 헤더 파일을 컴파일하여 상기 소프트웨어의 확장 버전을 생성하는 단계를 포함하는, 방법.
- 제1항의 방법을 수행하는 컴퓨터 실행 가능 명령어들을 갖는 한 개 이상의 컴퓨터 판독 가능 저장 매체.
- 제1항에 있어서, 상기 확장 세트들 중 적어도 하나에 대한 수신은 상기 소프트웨어의 실행 시간에 일어나는 방법.
- 제1항에 있어서, 상기 확장하는 단계는 상기 확장들을 위한 소스 코드를 출력하는 단계를 포함하는 방법.
- 제1항에 있어서, 상기 확장 세트들은,타겟 구조를 구현하는 확장 세트를 포함하는 방법.
- 제5항에 있어서, 상기 확장 세트들은,컴파일 시나리오를 구현하는 확장 세트를 포함하는 방법.
- 제5항에 있어서, 상기 확장 세트들은 관리 코드(managed code) 시나리오를 구현하는 확장 세트를 포함하고, 상기 방법은,상기 수신에 기초해서, 관리 코드 기능을 제공하기 위해 상기 클래스들을 확장하는 단계를 더 포함하는 방법.
- 삭제
- 제1항에 있어서, 상기 확장들 중 적어도 한 개는 상기 소프트웨어의 객체 클래스들 중의 적어도 한 개에 대한 추가 클래스 멤버를 표시하는 방법.
- 소프트웨어의 확장 버전을 생성하기 위해, 상기 소프트웨어의 중추(core) 버전에 확장들을 추가해서 프로그래밍 언어로 쓰인 소프트웨어를 확장하는 방법으로서,상기 소프트웨어의 확장 버전의 구성을 수신하는 단계;상기 소프트웨어의 확장 버전의 구성에 따른 상기 소프트웨어의 중추 버전의 클래스들에 대한 확장들의 객체 기술 언어 정의들을 수신하는 단계 - 상기 소프트웨어의 중추 버전의 클래스들은 컴파일 시간 전에 정적으로 확장 가능하거나 실행 시간에 동적으로 확장 가능한 것으로 객체 기술 언어로 표시되고, 정적으로 확장 가능한 것으로 표시된 상기 소프트웨어의 중추 버전의 클래스들은 그들의 대응하는 확장들과 함께 처리되고, 동적으로 확장 가능한 것으로 표시된 상기 소프트웨어의 중추 버전의 클래스들은 그들의 대응하는 확장들로부터 분리되어 처리됨 - ; 및상기 소프트웨어의 확장 버전을 생성하기 위해 상기 소프트웨어의 중추 버전의 클래스들 및 상기 확장들을 처리하는 단계를 포함하고,상기 소프트웨어의 중추 버전의 클래스들을 그들의 대응하는 확장들과 함께 처리하는 단계는,객체 기술 언어 전처리기를 사용하여 상기 소프트웨어의 중추 버전의 클래스들 및 그들의 대응하는 확장들을 포함하는 확장 클래스의 소스 코드 표현을 갖는 헤더 파일을 생성하는 단계; 및상기 헤더 파일을 컴파일하여 상기 소프트웨어의 확장 버전을 생성하는 단계를 포함하는, 방법.
- 제10항에 있어서, 상기 소프트웨어의 상기 중추 버전의 클래스들을 그들의 대응하는 확장들로부터 분리해서 처리하는 단계는,객체 기술 언어 전처리기를 사용하여 상기 소프트웨어의 중추 버전의 클래스들의 소스 코드 버전을 포함하는 헤더 파일을 생성하는 단계; 및상기 헤더 파일을 컴파일하여 상기 소프트웨어의 중추 버전의 클래스들의 컴퓨터 실행 가능 버전을 생성하는 단계를 포함하는 방법.
- 제10항에 있어서, 상기 소프트웨어의 상기 중추 버전의 상기 클래스들을 그들의 대응하는 확장들로부터 분리해서 처리하는 단계는,객체 기술 언어 전처리기를 사용하여 상기 소프트웨어의 상기 중추 버전의 클래스들에 대한 상기 확장들의 소스 코드 버전을 포함하는 헤더 파일을 생성하는 단계; 및상기 헤더 파일을 컴파일하여 상기 소프트웨어의 상기 중추 버전의 클래스들에 대한 상기 확장들의 컴퓨터 실행 가능 버전을 생성하는 단계를 포함하는 방법.
- 제12항에 있어서, 상기 소프트웨어의 상기 중추 버전의 상기 클래스들에 대한 확장들의 컴퓨터 실행 가능 버전을 처리하여, 실행시에 상기 소프트웨어의 중추 버전의 클래스들을 그에 대응하는 확장들과 링크함으로써 확장된 클래스들을 생성하는 단계를 더 포함하는 방법.
- 제10항에 있어서, 상기 소프트웨어의 중추 버전의 클래스들의 정의는, 상기 소프트웨어의 코드 버전의 클래스들에 대한 확장들과 관련된 코드가 삽입되는 상기 소프트웨어의 상기 중추 버전과 관련된 코드 내의 포인트들을 지정하기 위한 한 개 이상의 확장 포인트들을 포함하는 방법.
- 제10항에 있어서, 상기 소프트웨어의 상기 중추 버전은 확장 가능 중추 컴파일러 프레임워크이고, 상기 소프트웨어의 상기 확장 버전은 주문형 컴파일러 (customized compiler)이고, 상기 소프트웨어의 상기 확장 버전의 구성을 수신하는 단계는 컴파일러 타입을 얻는 단계를 포함하는 방법.
- 제15항에 있어서, 상기 컴파일러 타입은 JIT 컴파일러, 프리-JIT (Pre-JIT) 컴파일러, 및 자연 최적화 컴파일러 (Native optimizing compiler)로 구성되는 그룹으로부터 선택되는 방법.
- 제10항에 있어서, 상기 소프트웨어의 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 상기 소프트웨어의 확장 버전은 주문형 소프트웨어 개발 툴이고, 상기 소프트웨어의 확장 버전의 구성을 수신하는 단계는 타겟 타입을 얻는 단계를 포함하는 방법.
- 제10항에 있어서, 상기 소프트웨어의 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 상기 소프트웨어의 확장 버전은 주문형 소프트웨어 개발 툴이고, 상기 소프트웨어의 확장 버전의 구성을 수신하는 단계는 적어도 프로세서 구조 타입, 컴파일러 타입, 및 프로그래밍 언어 타입을 얻는 단계를 포함하는 방법.
- 소프트웨어의 확장 버전을 생성하기 위해 상기 소프트웨어의 중추 버전에 확장들을 추가해서 소프트웨어를 확장하는 시스템으로서, 상기 시스템은,객체 기술 언어의 상기 소프트웨어의 중추 버전의 클래스들에 대한 확장들을 수신하고, 상기 소프트웨어의 중추 버전의 클래스들에 대한 상기 확장들의 소스 코드 버전을 생성하도록 동작 가능한 객체 기술 언어 전처리기 - 상기 소프트웨어의 상기 중추 버전의 상기 클래스들은 실행시에 동적으로 확장 가능하거나 컴파일 시간 전에 정적으로 확장 가능한 것으로 상기 객체 기술 언어로 표시되고,상기 객체 기술 언어 전처리기는 동적으로 확장 가능하도록 표시된 상기 소프트웨어의 상기 중추 버전의 상기 클래스들을 그들의 대응하는 확장들로부터 분리해서 처리하도록 프로그램되고, 상기 객체 기술 언어 전처리기는 상기 소프트웨어의 중추 버전의 클래스들 및 그들의 대응하는 확장들의 소스 코드 버전을 포함하는 확장 클래스들의 소스 코드 버전을 가지는 헤더 파일을 생성하기 위해 정적으로 확장 가능한 것으로 표시된 상기 소프트웨어의 중추 버전의 클래스들을 그들의 대응하는 확장들과 함께 처리하도록 동작함 - ; 및상기 소프트웨어의 상기 확장 버전을 생성하는데 사용되기 위한 상기 확장 클래스들의 컴퓨터 실행 가능 버전을 생성하기 위해 상기 확장 클래스들의 상기 소스 코드 버전을 갖는 상기 헤더 파일을 컴파일하기 위한 컴파일러를 실행하기 위한 컴퓨터 프로세서를 포함하는 시스템.
- 제19항에 있어서, 상기 소프트웨어의 중추 버전의 클래스들은 상기 소프트웨어의 중추 버전에 관련된 코드 내에 상기 확장들과 관련된 코드가 삽입되는 위치들을 표시하는 확장 포인트들을 더 포함하는 시스템.
- 제19항에 있어서, 상기 확장들의 컴퓨터 실행 가능 버전을 생성하기 위해 상기 소프트웨어의 상기 중추 버전의 상기 클래스들의 상기 확장들의 상기 소스 코드 버전을 컴파일하는 컴파일러를 더 포함하는 시스템.
- 제21항에 있어서, 상기 소프트웨어의 상기 중추 버전의 상기 클래스들과 그들의 대응하는 확장들을 링크해서, 실행시에 상기 소프트웨어의 확장 버전을 생성하기 위해 상기 확장들의 상기 컴퓨터 실행 가능 버전을 실행하는 컴퓨터 프로세서를 더 포함하는 시스템.
- 제22항에 있어서, 상기 프로세서는, 상기 소프트웨어의 상기 중추 버전의 컴퓨터 실행 가능 버전을 호출하고, 실행시에 상기 소프트웨어의 상기 중추 버전에 관련된 코드에 상기 확장들을 삽입해서, 상기 확장들의 상기 컴퓨터 실행 가능 버전을 실행하는 시스템.
- 제19항에 있어서, 상기 확장들은 상기 소프트웨어의 상기 확장 버전의 구성에 대응하는 시스템.
- 제24항에 있어서, 상기 소프트웨어의 상기 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 소프트웨어의 상기 확장 버전은 주문형 소프트웨어개발 툴이고, 상기 소프트웨어의 확장 버전의 구성은 타겟 타입을 포함하는 시스템.
- 제24항에 있어서, 상기 소프트웨어의 상기 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 소프트웨어의 상기 확장 버전은 주문형 소프트웨어 개발 툴이고, 상기 소프트웨어의 확장 버전의 구성은 컴파일러 타입을 포함하는 시스템.
- 제24항에 있어서, 상기 소프트웨어의 상기 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 소프트웨어의 상기 확장 버전은 주문형 소프트웨어 개발 툴이고, 상기 소프트웨어의 확장 버전의 구성은 적어도 프로세서 구조 타입, 컴파일러 타입, 및 프로그래밍 언어 타입을 포함하는 시스템.
- 소프트웨어 확장 버전을 생성하기 위해 상기 소프트웨어의 중추 버전을 확장하기 위한 확장 선언들에 의해 확장되는 상기 소프트웨어의 중추 버전의 클래스들의 클래스 선언들을 저장하는 컴퓨터 판독 가능 저장 매체로서, 상기 소프트웨어의 상기 중추 버전의 상기 클래스 선언은,하나 이상의 중추 클래스 멤버들; 및상기 중추 클래스들의 하나 이상의 확장 속성들을 포함하고,상기 확장 속성은 상기 중추 클래스들이 컴파일 시간 전에 정적으로 확장 가능하거나 실행시에 동적으로 확장 가능함을 표시하고,상기 소프트웨어의 중추 버전의 클래스들을 그들의 대응하는 확장 선언들과 함께 처리하는 것은,객체 기술 언어 전처리기를 사용하여 상기 소프트웨어의 중추 버전의 클래스들 및 그들의 대응하는 확장 선언들을 포함하는 확장 클래스의 소스 코드 표현을 갖는 헤더 파일을 생성하는 것과,상기 헤더 파일을 컴파일하여 상기 소프트웨어의 확장 버전을 생성하는 것을 포함하고,상기 확장 선언들은 상기 소프트웨어의 상기 확장 버전의 특정 구성에 대응하고, 상기 확장 선언은 상기 소프트웨어의 상기 확장 버전의 상기 구성을 지시하는 하나 이상의 속성 선언을 더 포함하고,상기 소프트웨어의 상기 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 상기 소프트웨어의 확장 버전은 주문형 소프트웨어 개발 툴이고,상기 소프트웨어의 확장 버전의 구성은 타겟 프로세서 구조를 선택하는 것을 포함하는, 컴퓨터 판독 가능 저장 매체.
- 제28에 있어서, 상기 확장 선언들을 더 포함하고, 상기 확장 선언들은 상기 소프트웨어의 상기 중추 버전을 확장하는 한 개 이상의 확장 클래스 멤버를 포함하는 컴퓨터 판독 가능 저장 매체.
- 제28항에 있어서,상기 소프트웨어의 상기 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 상기 소프트웨어의 확장 버전은 주문형 소프트웨어 개발 툴이고, 상기 소프트웨어의 확장 버전의 구성을 선택하는 것은 컴파일러 타입을 선택하는 것을 포함하는 컴퓨터 판독 가능 저장 매체.
- 제28항에 있어서, 상기 소프트웨어의 중추 버전에 관련된 코드 내에 그들의 대응하는 확장들에 관련된 코드가 삽입되어야 하는 위치들을 표시하는 확장 포인트들을 더 포함하는 컴퓨터 판독 가능 저장 매체.
- 전처리기 프로그램을 위한 소프트웨어 코드를 저장하는 컴퓨터 판독 가능 저장 매체로서,상기 전처리기 프로그램은 상기 소프트웨어의 중추 버전을 확장하기 위해 사용되는 소프트웨어의 중추 버전의 클래스들 및 상기 소프트웨어의 중추 버전의 클래스들의 대응하는 확장들을, 객체 기술 언어로, 수신하기 위해 동작할 수 있고, 상기 소프트웨어의 중추 버전의 클래스들은 컴파일 시간 전에 정적으로 확장 가능하거나 실행시에 동적으로 확장 가능한 것으로 객체 기술 언어로 표시되고,상기 전처리기 프로그램은 또한 상기 객체 기술 언어의 형태로 수신되는 상기 소프트웨어의 중추 버전의 클래스들의 상기 확장들을 사용하여, 상기 소프트웨어의 중추 버전을 확장하기 위해, 실행시에 상기 확장들과 그들에 대응하는 상기 소프트웨어의 중추 버전의 클래스들을 링크하기 위해 사용되는 상기 확장들의 소스 코드 버전을 생성하도록 동작 가능하고,상기 전처리기 프로그램은 또한 상기 객체 기술 언어의 형태로 수신되는 상기 소프트웨어의 중추 버전의 클래스들 및 그들의 대응하는 확장들을 사용하여 상기 소프트웨어의 중추 버전의 클래스들 및 그들의 대응하는 확장들을 포함하는 확장 클래스들의 소스 코드 버전을 갖는 헤더 파일을 생성하도록 동작 가능하고,상기 전처리기 프로그램은 또한 상기 소프트웨어의 확장 버전을 생성하기 위한 컴파일러에 상기 헤더 파일을 출력하도록 동작 가능한, 컴퓨터 판독 가능 저장 매체.
- 소프트웨어의 확장 버전을 생성하기 위해 상기 소프트웨어의 중추 버전에 확장들을 추가해서 소프트웨어를 확장하는 시스템으로서,객체 기술 언어 전처리기를 실행시키기 위해서,객체 기술 언어로 상기 소프트웨어의 상기 중추 버전의 클래스들의 확장들을 수신하고, 상기 소프트웨어의 상기 중추 버전의 클래스들의 상기 확장들의 소스 코드 버전을 생성하는 수단 - 상기 소프트웨어의 상기 중추 버전의 상기 클래스들은 실행시에 동적으로 확장 가능하거나 컴파일 시간 전에 정적으로 확장 가능한 것으로 상기 객체 기술 언어로 표시되고, 정적으로 확장 가능한 것으로 표시된 상기 소프트웨어의 중추 버전의 클래스들은 그들의 대응하는 확장들과 함께 처리되고, 동적으로 확장 가능한 것으로 표시된 상기 소프트웨어의 중추 버전의 클래스들은 그들의 대응하는 확장들로부터 분리되어 처리되고, 상기 소프트웨어의 중추 버전의 클래스들을 그들의 대응하는 확장들과 함께 처리하는 것은 상기 객체 기술 언어 전처리기를 사용하여 상기 소프트웨어의 중추 버전의 클래스들 및 그들의 대응하는 확장들을 포함하는 확장 클래스의 소스 코드 표현을 갖는 헤더 파일을 생성하는 것과 상기 헤더 파일을 컴파일하여 상기 소프트웨어의 확장 버전을 생성하는 것을 포함함 -; 및상기 소프트웨어의 상기 확장 버전을 생성하기 위해 사용되는 상기 소프트웨어의 상기 중추 버전의 클래스들의 상기 확장들의 상기 소스 코드 버전을 컴파일하는 수단을 포함하는 시스템.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/626,251 | 2003-07-23 | ||
US10/626,251 US7305666B2 (en) | 2003-07-23 | 2003-07-23 | Description language for an extensible compiler and tools infrastructure |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20050011685A KR20050011685A (ko) | 2005-01-29 |
KR101137126B1 true KR101137126B1 (ko) | 2012-04-19 |
Family
ID=33490900
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020040053552A KR101137126B1 (ko) | 2003-07-23 | 2004-07-09 | 확장성 컴파일러 및 툴의 기반 구조에 대한 기술 언어 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7305666B2 (ko) |
EP (1) | EP1501010A3 (ko) |
JP (1) | JP4716681B2 (ko) |
KR (1) | KR101137126B1 (ko) |
CN (1) | CN100478874C (ko) |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6986128B2 (en) * | 2000-01-07 | 2006-01-10 | Sony Computer Entertainment Inc. | Multiple stage program recompiler and method |
US7290243B1 (en) * | 2001-02-28 | 2007-10-30 | Apple Inc. | Method and apparatus for application building using build styles |
US7143407B2 (en) * | 2001-07-26 | 2006-11-28 | Kyocera Wireless Corp. | System and method for executing wireless communications device dynamic instruction sets |
US7086041B2 (en) * | 2003-06-27 | 2006-08-01 | Microsoft Corporation | Extensible type system for representing and checking consistency of program components during the process of compilation |
US7818729B1 (en) * | 2003-09-15 | 2010-10-19 | Thomas Plum | Automated safe secure techniques for eliminating undefined behavior in computer software |
US7856624B2 (en) * | 2003-09-15 | 2010-12-21 | Thomas Plum | Automated safe secure techniques for eliminating undefined behavior in computer software |
US7810080B2 (en) * | 2003-09-15 | 2010-10-05 | Thomas Plum | Automated safe secure techniques for eliminating undefined behavior in computer software |
US7512938B2 (en) * | 2005-03-18 | 2009-03-31 | Microsoft Corporation | Typed intermediate representation for object-oriented languages |
US7757224B2 (en) * | 2006-02-02 | 2010-07-13 | Microsoft Corporation | Software support for dynamically extensible processors |
US7844978B2 (en) * | 2006-06-02 | 2010-11-30 | International Business Machines Corporation | Artifact management for an extensible runtime environment |
US8161465B2 (en) * | 2006-07-27 | 2012-04-17 | Oracle International Corporation | Method and apparatus for performing conditional compilation |
US7743076B2 (en) * | 2007-01-26 | 2010-06-22 | Microsoft Corporation | Extensible action sequences coordinating independently created components |
US8239844B2 (en) * | 2007-02-14 | 2012-08-07 | The Mathworks, Inc. | Method of using parallel processing constructs and dynamically allocating program portions |
US8239845B2 (en) * | 2007-02-14 | 2012-08-07 | The Mathworks, Inc. | Media for using parallel processing constructs |
US8239846B2 (en) * | 2007-02-14 | 2012-08-07 | The Mathworks, Inc. | Device for performing parallel processing of distributed arrays |
US8250550B2 (en) * | 2007-02-14 | 2012-08-21 | The Mathworks, Inc. | Parallel processing of distributed arrays and optimum data distribution |
US8255890B2 (en) | 2007-02-14 | 2012-08-28 | The Mathworks, Inc. | Media for performing parallel processing of distributed arrays |
US8255889B2 (en) * | 2007-02-14 | 2012-08-28 | The Mathworks, Inc. | Method of using parallel processing constructs and dynamically allocating program portions |
US8010954B2 (en) | 2007-02-14 | 2011-08-30 | The Mathworks, Inc. | Parallel programming interface to dynamically allocate program portions |
US8762976B2 (en) * | 2007-03-09 | 2014-06-24 | Microsoft Corporation | Static extensibility models with dynamic languages and scripts |
US8181167B2 (en) * | 2008-01-09 | 2012-05-15 | Kan Zhao | Method and system for presenting and analyzing software source code through intermediate representation |
US20090183185A1 (en) * | 2008-01-16 | 2009-07-16 | Microsoft Corporation | Declarative and Extensible Process Definition |
KR101418969B1 (ko) * | 2008-02-27 | 2014-08-13 | 삼성전자주식회사 | 프로세서 및 컴파일 방법 |
US9158519B2 (en) * | 2008-05-21 | 2015-10-13 | Optumsoft, Inc. | Dynamic collection attribute-based computer programming language methods |
US20100088686A1 (en) * | 2008-10-06 | 2010-04-08 | Microsoft Corporation | Programming language with extensible syntax |
US8392895B2 (en) * | 2009-01-13 | 2013-03-05 | Mediatek Inc. | Firmware extension method and firmware builder |
CA2675680C (en) * | 2009-08-27 | 2013-05-14 | Ibm Canada Limited - Ibm Canada Limitee | Generating object code that uses calculated contents for a variable determined from a predicate |
CA2691851A1 (en) * | 2010-02-04 | 2011-08-04 | Ibm Canada Limited - Ibm Canada Limitee | Control flow analysis using deductive reaching definitions |
US8572591B2 (en) * | 2010-06-15 | 2013-10-29 | Microsoft Corporation | Dynamic adaptive programming |
US8997070B2 (en) * | 2011-12-15 | 2015-03-31 | Sap Se | Extension mechanism for scripting language compiler |
US8954939B2 (en) * | 2012-12-31 | 2015-02-10 | Microsoft Corporation | Extending a development environment |
US9250937B1 (en) * | 2013-11-06 | 2016-02-02 | The Regents Of The University Of California | Code randomization for just-in-time compilers |
US9542173B2 (en) * | 2015-05-15 | 2017-01-10 | Sap Se | Dependency handling for software extensions |
US9477447B1 (en) * | 2015-05-15 | 2016-10-25 | Sap Se | Semantic representations of software extensions |
US10120661B2 (en) * | 2015-07-16 | 2018-11-06 | Sugarcrm Inc. | Multi-flavored software execution from a singular code base |
CN106484489A (zh) * | 2015-09-01 | 2017-03-08 | 阿里巴巴集团控股有限公司 | 一种扩展编程语言特性的方法及装置 |
CN106909353B (zh) * | 2015-12-22 | 2019-12-13 | 阿里巴巴集团控股有限公司 | 应用程序的运行方法和装置 |
US10140105B2 (en) * | 2016-03-10 | 2018-11-27 | Wowza Media Systems, LLC | Converting source code |
US10268455B2 (en) | 2016-05-20 | 2019-04-23 | Microsoft Technology Licensing, Llc | Augmenting an original class with an augmenting class |
GB2573775A (en) * | 2018-05-16 | 2019-11-20 | Sage Uk Ltd | Application Deployment |
US11366658B1 (en) * | 2021-01-19 | 2022-06-21 | Sap Se | Seamless lifecycle stability for extensible software features |
US11995421B2 (en) | 2022-04-11 | 2024-05-28 | Microsoft Technology Licensing, Llc | Register allocation heuristics order |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5659753A (en) | 1991-02-27 | 1997-08-19 | Digital Equipment Corporation | Interface for symbol table construction in a multilanguage optimizing compiler |
EP1049010A2 (en) | 1999-04-23 | 2000-11-02 | Sun Microsystems, Inc. | Method and apparatus for generating a platform-specific compiler |
Family Cites Families (77)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4197978A (en) | 1978-06-29 | 1980-04-15 | The Boeing Company | Method of making an integral structural member |
US4734854A (en) | 1985-10-08 | 1988-03-29 | American Telephone And Telegraph Company | System for generating software source code components |
CA1248238A (en) | 1985-10-17 | 1989-01-03 | Francis D. Lawlor | Compiler including retargetable data generation |
JPS6488834A (en) * | 1987-09-30 | 1989-04-03 | Nec Corp | Program addition correcting system |
US5339419A (en) | 1990-06-25 | 1994-08-16 | Hewlett-Packard Company | ANDF compiler using the HPcode-plus compiler intermediate language |
US5598560A (en) | 1991-03-07 | 1997-01-28 | Digital Equipment Corporation | Tracking condition codes in translation code for different machine architectures |
JPH04361328A (ja) * | 1991-06-10 | 1992-12-14 | Fujitsu Ltd | 処理モード切り替え方式 |
US5488727A (en) | 1991-09-30 | 1996-01-30 | International Business Machines Corporation | Methods to support multimethod function overloading with compile-time type checking |
JPH0683605A (ja) * | 1992-09-07 | 1994-03-25 | Fujitsu Ltd | 改変したプログラムを実行するデータ処理方式 |
CA2102089C (en) | 1993-10-29 | 1999-05-25 | David M. Gillies | Recompilation of computer programs for enhanced optimization |
US5761511A (en) | 1994-01-28 | 1998-06-02 | Sun Microsystems, Inc. | Method and apparatus for a type-safe framework for dynamically extensible objects |
US5628016A (en) | 1994-06-15 | 1997-05-06 | Borland International, Inc. | Systems and methods and implementing exception handling using exception registration records stored in stack memory |
US5742828A (en) | 1994-08-03 | 1998-04-21 | Microsoft Corporation | Compiler and method for evaluation of foreign syntax expressions in source code |
US5778227A (en) | 1995-08-01 | 1998-07-07 | Intergraph Corporation | System for adding attributes to an object at run time in an object oriented computer environment |
US5754858A (en) | 1996-05-01 | 1998-05-19 | Microsoft Corporation | Customizable application project generation process and system |
WO1997048043A1 (en) | 1996-06-11 | 1997-12-18 | Codd Edgar F | Delta model processing logic representation and execution system |
US6463581B1 (en) | 1996-10-03 | 2002-10-08 | International Business Machines Corporation | Method for determining reachable methods in object-oriented applications that use class libraries |
US5778233A (en) | 1996-10-11 | 1998-07-07 | International Business Machines Corporation | Method and apparatus for enabling global compiler optimizations in the presence of exception handlers within a computer program |
US6247169B1 (en) | 1996-11-04 | 2001-06-12 | Sun Microsystems, Inc. | Structured exception-handling methods, apparatus, and computer program products |
US5937195A (en) | 1996-11-27 | 1999-08-10 | Hewlett-Packard Co | Global control flow treatment of predicated code |
US5943499A (en) | 1996-11-27 | 1999-08-24 | Hewlett-Packard Company | System and method for solving general global data flow predicated code problems |
US5857105A (en) | 1997-02-05 | 1999-01-05 | Hewlett-Packard Company | Compiler for reducing number of indirect calls in an executable code |
US6212672B1 (en) * | 1997-03-07 | 2001-04-03 | Dynamics Research Corporation | Software development system with an executable working model in an interpretable intermediate modeling language |
US5918235A (en) | 1997-04-04 | 1999-06-29 | Hewlett-Packard Company | Object surrogate with active computation and probablistic counter |
US6149318A (en) | 1997-04-15 | 2000-11-21 | Samuel C. Kendall | Link-time and run-time error detection, and program instrumentation |
US5999739A (en) | 1997-05-29 | 1999-12-07 | Hewlett-Packard Company | Method and apparatus for elimination of redundant branch instructions from a program |
US6009273A (en) | 1997-05-29 | 1999-12-28 | Hewlett-Packard Company | Method for conversion of a variable argument routine to a fixed argument routine |
US6070011A (en) | 1997-10-21 | 2000-05-30 | Hewlett-Packard Co. | Compiler for performing a loop fusion, dependent upon loop peeling and/or loop reversal |
US5966702A (en) | 1997-10-31 | 1999-10-12 | Sun Microsystems, Inc. | Method and apparatus for pre-processing and packaging class files |
US6148302A (en) | 1998-02-26 | 2000-11-14 | Sun Microsystems, Inc. | Method, apparatus, system and computer program product for initializing a data structure at its first active use |
US6202204B1 (en) | 1998-03-11 | 2001-03-13 | Intel Corporation | Comprehensive redundant load elimination for architectures supporting control and data speculation |
US6330717B1 (en) * | 1998-03-27 | 2001-12-11 | Sony Corporation Of Japan | Process and system for developing an application program for a distributed adaptive run-time platform |
US6249910B1 (en) | 1998-05-04 | 2001-06-19 | Hewlett-Packard Company | Apparatus and method for incrementally update static single assignment form for cloned variable name definitions |
US6578090B1 (en) | 1998-06-08 | 2003-06-10 | Ricoh Company, Ltd. | System and method for interfacing two modules supporting various applications |
JP3320358B2 (ja) * | 1998-06-18 | 2002-09-03 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイル方法、例外処理方法、及びコンピュータ |
US6289446B1 (en) | 1998-09-29 | 2001-09-11 | Axis Ab | Exception handling utilizing call instruction with context information |
US6182284B1 (en) | 1998-09-30 | 2001-01-30 | Hewlett-Packard Company | Method and system for eliminating phi instruction resource interferences and redundant copy instructions from static-single-assignment-form computer code |
US6292938B1 (en) | 1998-12-02 | 2001-09-18 | International Business Machines Corporation | Retargeting optimized code by matching tree patterns in directed acyclic graphs |
US6253304B1 (en) | 1999-01-04 | 2001-06-26 | Advanced Micro Devices, Inc. | Collation of interrupt control devices |
US6412109B1 (en) | 1999-01-29 | 2002-06-25 | Sun Microsystems, Inc. | Method for optimizing java bytecodes in the presence of try-catch blocks |
US6353924B1 (en) | 1999-02-08 | 2002-03-05 | Incert Software Corporation | Method for back tracing program execution |
US6526570B1 (en) | 1999-04-23 | 2003-02-25 | Sun Microsystems, Inc. | File portability techniques |
US6363522B1 (en) | 1999-04-23 | 2002-03-26 | Sun Microsystems, Inc. | Method and apparatus for handling exceptions as normal control flow |
US6374368B1 (en) | 1999-05-21 | 2002-04-16 | Microsoft Corporation | Weakest precondition analysis |
US20020166115A1 (en) | 1999-06-10 | 2002-11-07 | A.V.S. Sastry | System and method for computer program compilation using scalar register promotion and static single assignment representation |
US6662356B1 (en) | 1999-06-30 | 2003-12-09 | Microsoft Corporation | Application program interface for transforming heterogeneous programs |
US6481008B1 (en) | 1999-06-30 | 2002-11-12 | Microsoft Corporation | Instrumentation and optimization tools for heterogeneous programs |
US6460178B1 (en) | 1999-06-30 | 2002-10-01 | Microsoft Corporation | Shared library optimization for heterogeneous programs |
US6629312B1 (en) | 1999-08-20 | 2003-09-30 | Hewlett-Packard Development Company, L.P. | Programmatic synthesis of a machine description for retargeting a compiler |
US6560774B1 (en) | 1999-09-01 | 2003-05-06 | Microsoft Corporation | Verifier to check intermediate language |
US6625808B1 (en) | 1999-12-10 | 2003-09-23 | Microsoft Corporation | Method and apparatus for facilitating memory management in a program comprised of heterogeneous components |
US6598220B1 (en) | 1999-12-17 | 2003-07-22 | Dell Products L.P. | System and method for allowing registerable runtime modification of object behaviors |
US6804814B1 (en) | 1999-12-29 | 2004-10-12 | Veritas Operating Corporation | Method for simulating back program execution from a traceback sequence |
US6745383B1 (en) | 1999-12-29 | 2004-06-01 | Veritas Operating Corporation | Early warning mechanism for enhancing enterprise availability |
US6748584B1 (en) | 1999-12-29 | 2004-06-08 | Veritas Operating Corporation | Method for determining the degree to which changed code has been exercised |
US6981249B1 (en) | 2000-05-02 | 2005-12-27 | Microsoft Corporation | Methods for enhancing type reconstruction |
US6678805B1 (en) | 2000-05-25 | 2004-01-13 | Microsoft Corporation | Structure organization for improved cache performance |
US6625804B1 (en) | 2000-07-06 | 2003-09-23 | Microsoft Corporation | Unified event programming model |
CA2321018A1 (en) | 2000-09-27 | 2002-03-27 | Ibm Canada Limited-Ibm Canada Limitee | Optimizing compilation by forward store movement |
US6854110B2 (en) | 2000-12-21 | 2005-02-08 | Microsoft Corporation | System and method for obtaining scratch registers in computer executable binaries |
US6925639B2 (en) | 2001-02-23 | 2005-08-02 | Microsoft Corporation | Method and system for register allocation |
US7117488B1 (en) | 2001-10-31 | 2006-10-03 | The Regents Of The University Of California | Safe computer code formats and methods for generating safe computer code |
US6834383B2 (en) | 2001-11-26 | 2004-12-21 | Microsoft Corporation | Method for binary-level branch reversal on computer architectures supporting predicated execution |
US7426719B2 (en) | 2001-11-29 | 2008-09-16 | Microsoft Corporation | Method and system for rewriting unwind data in the presence of exceptions |
JP3870112B2 (ja) | 2002-03-13 | 2007-01-17 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイル方法、コンパイル装置、及びコンパイル用プログラム |
US7213245B2 (en) | 2002-05-14 | 2007-05-01 | Microsoft Corporation | Software on demand system |
US7228540B2 (en) | 2002-05-14 | 2007-06-05 | Microsoft Corporation | Preparation for software on demand system |
US7185328B2 (en) | 2002-05-30 | 2007-02-27 | Microsoft Corporation | System and method for improving a working set |
US7055132B2 (en) | 2002-06-28 | 2006-05-30 | Microsoft Corporation | System and method for associating properties with objects |
US7367022B2 (en) | 2002-09-05 | 2008-04-29 | Intel Corporation | Methods and apparatus for optimizing the operating speed and size of a computer program |
US7240346B2 (en) | 2002-11-13 | 2007-07-03 | Microsoft Corporation | Method and system for accessing drawing resources |
US7203941B2 (en) | 2002-11-14 | 2007-04-10 | Microsoft Corporation | Associating a native resource with an application |
US7370321B2 (en) | 2002-11-14 | 2008-05-06 | Microsoft Corporation | Systems and methods to read, optimize, and verify byte codes for a multiplatform jit |
US7546607B2 (en) | 2002-11-19 | 2009-06-09 | Microsoft Corporation | Native code exposing virtual machine managed object |
US7281248B2 (en) | 2002-11-19 | 2007-10-09 | Microsoft Corporation | Virtualized and realized user interface controls |
US7472400B2 (en) | 2003-02-28 | 2008-12-30 | Bea Systems, Inc. | Method for dynamically generating a wrapper class |
US7120898B2 (en) * | 2003-06-26 | 2006-10-10 | Microsoft Corporation | Intermediate representation for multiple exception handling models |
-
2003
- 2003-07-23 US US10/626,251 patent/US7305666B2/en not_active Expired - Fee Related
-
2004
- 2004-06-30 JP JP2004194759A patent/JP4716681B2/ja not_active Expired - Lifetime
- 2004-07-01 EP EP04103108A patent/EP1501010A3/en not_active Ceased
- 2004-07-09 KR KR1020040053552A patent/KR101137126B1/ko active IP Right Grant
- 2004-07-23 CN CNB2004100589703A patent/CN100478874C/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5659753A (en) | 1991-02-27 | 1997-08-19 | Digital Equipment Corporation | Interface for symbol table construction in a multilanguage optimizing compiler |
EP1049010A2 (en) | 1999-04-23 | 2000-11-02 | Sun Microsystems, Inc. | Method and apparatus for generating a platform-specific compiler |
Also Published As
Publication number | Publication date |
---|---|
US7305666B2 (en) | 2007-12-04 |
EP1501010A2 (en) | 2005-01-26 |
EP1501010A3 (en) | 2007-09-12 |
US20050022161A1 (en) | 2005-01-27 |
CN1577265A (zh) | 2005-02-09 |
KR20050011685A (ko) | 2005-01-29 |
JP2005044347A (ja) | 2005-02-17 |
JP4716681B2 (ja) | 2011-07-06 |
CN100478874C (zh) | 2009-04-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101137126B1 (ko) | 확장성 컴파일러 및 툴의 기반 구조에 대한 기술 언어 | |
US7707566B2 (en) | Software development infrastructure | |
Tanter et al. | A versatile kernel for multi-language AOP | |
JP5851396B2 (ja) | 処理方法 | |
US7086041B2 (en) | Extensible type system for representing and checking consistency of program components during the process of compilation | |
US6701515B1 (en) | System and method for dynamically designing and evaluating configurable processor instructions | |
JP3041222B2 (ja) | ソース・コード作成システム及び方法 | |
JPH06103075A (ja) | オブジェクト指向適用業務 | |
Cifuentes et al. | Specifying the semantics of machine instructions | |
WO2004102303A2 (en) | Compiling intermediate language bytecodes into java bytecodes | |
US6219834B1 (en) | Extensible compiler and method | |
Spinczyk et al. | Advances in AOP with AspectC++. | |
Mateos et al. | An approach for non-intrusively adding malleable fork/join parallelism into ordinary JavaBean compliant applications | |
Smith et al. | POPLOG's Two-level virtual machine support for interactive languages | |
Murai et al. | Metaprogramming framework for existing HPC languages based on the Omni compiler infrastructure | |
Tsay | A Code Generation Framework for Ptolemy II. | |
Dümmel et al. | MuLE: A Multiparadigm Language for Education. The Object-Oriented Part of the Language | |
Forgáč et al. | Static and dynamic approaches to weaving | |
US20030177478A1 (en) | Initial object capacity determination | |
Lilis et al. | Aspects for Stages: Cross Cutting Concerns for Metaprograms. | |
Brown et al. | The C-Breeze compiler infrastructure | |
Havrila | Implementace jazyku Dart pro Smalltalk/X | |
Malm et al. | Analysing the transformability from Action Language for fUML to ALF | |
Dovey et al. | Object-oriented programming | |
Banerji et al. | Design, Distribution, and Management of Object Oriented Software. |
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: 20160318 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20170317 Year of fee payment: 6 |