KR101137126B1 - 확장성 컴파일러 및 툴의 기반 구조에 대한 기술 언어 - Google Patents

확장성 컴파일러 및 툴의 기반 구조에 대한 기술 언어 Download PDF

Info

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
Application number
KR1020040053552A
Other languages
English (en)
Other versions
KR20050011685A (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 KR20050011685A publication Critical patent/KR20050011685A/ko
Application granted granted Critical
Publication of KR101137126B1 publication Critical patent/KR101137126B1/ko

Links

Images

Classifications

    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • 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

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

확장성 컴파일러 및 툴의 기반 구조에 대한 기술 언어 { DESCRIPTION LANGUAGE FOR AN EXTENSIBLE COMPILER AND TOOLS INFRASTRUCTURE }
도 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)

  1. 소프트웨어에 대한 복수의 확장을 통해, 객체 클래스들을 제공하는 객체 지향 프로그래밍 언어로 쓰인 상기 소프트웨어의 확장 버전을 생성하는 방법으로서,
    객체 기술 언어 전처리기에 의해, 상기 소프트웨어의 확장 버전에 의해 구현될 각 소프트웨어 개발 시나리오들에 대한 확장들을 포함하는 복수의 소프트웨어 개발 시나리오 클래스 확장 세트를 수신하는 단계 - 상기 각 소프트웨어 개발 시나리오들은 복수의 타겟 프로세서 구조와 복수의 컴파일 시나리오(compilation scenario)를 특정함 - ; 및
    상기 소프트웨어의 한 개 이상의 클래스를 확장하는 단계를 포함하고,
    상기 확장하는 단계는,
    상기 소프트웨어의 확장 버전을 생성하기 위해 정적으로 확장 가능한 것으로 표시되는 소프트웨어의 클래스들과 그들의 대응되는 확장들을 처리하는 단계
    를 포함하고,
    상기 처리하는 단계는,
    상기 객체 기술 언어 전처리기를 사용하여 상기 소프트웨어의 클래스들 및 그들의 대응하는 확장들을 포함하는 확장 클래스의 소스 코드 표현을 갖는 헤더 파일을 생성하는 단계; 및
    상기 헤더 파일을 컴파일하여 상기 소프트웨어의 확장 버전을 생성하는 단계
    를 포함하는, 방법.
  2. 제1항의 방법을 수행하는 컴퓨터 실행 가능 명령어들을 갖는 한 개 이상의 컴퓨터 판독 가능 저장 매체.
  3. 제1항에 있어서, 상기 확장 세트들 중 적어도 하나에 대한 수신은 상기 소프트웨어의 실행 시간에 일어나는 방법.
  4. 제1항에 있어서, 상기 확장하는 단계는 상기 확장들을 위한 소스 코드를 출력하는 단계를 포함하는 방법.
  5. 제1항에 있어서, 상기 확장 세트들은,
    타겟 구조를 구현하는 확장 세트를 포함하는 방법.
  6. 제5항에 있어서, 상기 확장 세트들은,
    컴파일 시나리오를 구현하는 확장 세트를 포함하는 방법.
  7. 제5항에 있어서, 상기 확장 세트들은 관리 코드(managed code) 시나리오를 구현하는 확장 세트를 포함하고, 상기 방법은,
    상기 수신에 기초해서, 관리 코드 기능을 제공하기 위해 상기 클래스들을 확장하는 단계
    를 더 포함하는 방법.
  8. 삭제
  9. 제1항에 있어서, 상기 확장들 중 적어도 한 개는 상기 소프트웨어의 객체 클래스들 중의 적어도 한 개에 대한 추가 클래스 멤버를 표시하는 방법.
  10. 소프트웨어의 확장 버전을 생성하기 위해, 상기 소프트웨어의 중추(core) 버전에 확장들을 추가해서 프로그래밍 언어로 쓰인 소프트웨어를 확장하는 방법으로서,
    상기 소프트웨어의 확장 버전의 구성을 수신하는 단계;
    상기 소프트웨어의 확장 버전의 구성에 따른 상기 소프트웨어의 중추 버전의 클래스들에 대한 확장들의 객체 기술 언어 정의들을 수신하는 단계 - 상기 소프트웨어의 중추 버전의 클래스들은 컴파일 시간 전에 정적으로 확장 가능하거나 실행 시간에 동적으로 확장 가능한 것으로 객체 기술 언어로 표시되고, 정적으로 확장 가능한 것으로 표시된 상기 소프트웨어의 중추 버전의 클래스들은 그들의 대응하는 확장들과 함께 처리되고, 동적으로 확장 가능한 것으로 표시된 상기 소프트웨어의 중추 버전의 클래스들은 그들의 대응하는 확장들로부터 분리되어 처리됨 - ; 및
    상기 소프트웨어의 확장 버전을 생성하기 위해 상기 소프트웨어의 중추 버전의 클래스들 및 상기 확장들을 처리하는 단계
    를 포함하고,
    상기 소프트웨어의 중추 버전의 클래스들을 그들의 대응하는 확장들과 함께 처리하는 단계는,
    객체 기술 언어 전처리기를 사용하여 상기 소프트웨어의 중추 버전의 클래스들 및 그들의 대응하는 확장들을 포함하는 확장 클래스의 소스 코드 표현을 갖는 헤더 파일을 생성하는 단계; 및
    상기 헤더 파일을 컴파일하여 상기 소프트웨어의 확장 버전을 생성하는 단계
    를 포함하는, 방법.
  11. 제10항에 있어서, 상기 소프트웨어의 상기 중추 버전의 클래스들을 그들의 대응하는 확장들로부터 분리해서 처리하는 단계는,
    객체 기술 언어 전처리기를 사용하여 상기 소프트웨어의 중추 버전의 클래스들의 소스 코드 버전을 포함하는 헤더 파일을 생성하는 단계; 및
    상기 헤더 파일을 컴파일하여 상기 소프트웨어의 중추 버전의 클래스들의 컴퓨터 실행 가능 버전을 생성하는 단계
    를 포함하는 방법.
  12. 제10항에 있어서, 상기 소프트웨어의 상기 중추 버전의 상기 클래스들을 그들의 대응하는 확장들로부터 분리해서 처리하는 단계는,
    객체 기술 언어 전처리기를 사용하여 상기 소프트웨어의 상기 중추 버전의 클래스들에 대한 상기 확장들의 소스 코드 버전을 포함하는 헤더 파일을 생성하는 단계; 및
    상기 헤더 파일을 컴파일하여 상기 소프트웨어의 상기 중추 버전의 클래스들에 대한 상기 확장들의 컴퓨터 실행 가능 버전을 생성하는 단계
    를 포함하는 방법.
  13. 제12항에 있어서, 상기 소프트웨어의 상기 중추 버전의 상기 클래스들에 대한 확장들의 컴퓨터 실행 가능 버전을 처리하여, 실행시에 상기 소프트웨어의 중추 버전의 클래스들을 그에 대응하는 확장들과 링크함으로써 확장된 클래스들을 생성하는 단계를 더 포함하는 방법.
  14. 제10항에 있어서, 상기 소프트웨어의 중추 버전의 클래스들의 정의는, 상기 소프트웨어의 코드 버전의 클래스들에 대한 확장들과 관련된 코드가 삽입되는 상기 소프트웨어의 상기 중추 버전과 관련된 코드 내의 포인트들을 지정하기 위한 한 개 이상의 확장 포인트들을 포함하는 방법.
  15. 제10항에 있어서, 상기 소프트웨어의 상기 중추 버전은 확장 가능 중추 컴파일러 프레임워크이고, 상기 소프트웨어의 상기 확장 버전은 주문형 컴파일러 (customized compiler)이고, 상기 소프트웨어의 상기 확장 버전의 구성을 수신하는 단계는 컴파일러 타입을 얻는 단계를 포함하는 방법.
  16. 제15항에 있어서, 상기 컴파일러 타입은 JIT 컴파일러, 프리-JIT (Pre-JIT) 컴파일러, 및 자연 최적화 컴파일러 (Native optimizing compiler)로 구성되는 그룹으로부터 선택되는 방법.
  17. 제10항에 있어서, 상기 소프트웨어의 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 상기 소프트웨어의 확장 버전은 주문형 소프트웨어 개발 툴이고, 상기 소프트웨어의 확장 버전의 구성을 수신하는 단계는 타겟 타입을 얻는 단계를 포함하는 방법.
  18. 제10항에 있어서, 상기 소프트웨어의 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 상기 소프트웨어의 확장 버전은 주문형 소프트웨어 개발 툴이고, 상기 소프트웨어의 확장 버전의 구성을 수신하는 단계는 적어도 프로세서 구조 타입, 컴파일러 타입, 및 프로그래밍 언어 타입을 얻는 단계를 포함하는 방법.
  19. 소프트웨어의 확장 버전을 생성하기 위해 상기 소프트웨어의 중추 버전에 확장들을 추가해서 소프트웨어를 확장하는 시스템으로서, 상기 시스템은,
    객체 기술 언어의 상기 소프트웨어의 중추 버전의 클래스들에 대한 확장들을 수신하고, 상기 소프트웨어의 중추 버전의 클래스들에 대한 상기 확장들의 소스 코드 버전을 생성하도록 동작 가능한 객체 기술 언어 전처리기 - 상기 소프트웨어의 상기 중추 버전의 상기 클래스들은 실행시에 동적으로 확장 가능하거나 컴파일 시간 전에 정적으로 확장 가능한 것으로 상기 객체 기술 언어로 표시되고,
    상기 객체 기술 언어 전처리기는 동적으로 확장 가능하도록 표시된 상기 소프트웨어의 상기 중추 버전의 상기 클래스들을 그들의 대응하는 확장들로부터 분리해서 처리하도록 프로그램되고, 상기 객체 기술 언어 전처리기는 상기 소프트웨어의 중추 버전의 클래스들 및 그들의 대응하는 확장들의 소스 코드 버전을 포함하는 확장 클래스들의 소스 코드 버전을 가지는 헤더 파일을 생성하기 위해 정적으로 확장 가능한 것으로 표시된 상기 소프트웨어의 중추 버전의 클래스들을 그들의 대응하는 확장들과 함께 처리하도록 동작함 - ; 및
    상기 소프트웨어의 상기 확장 버전을 생성하는데 사용되기 위한 상기 확장 클래스들의 컴퓨터 실행 가능 버전을 생성하기 위해 상기 확장 클래스들의 상기 소스 코드 버전을 갖는 상기 헤더 파일을 컴파일하기 위한 컴파일러
    를 실행하기 위한 컴퓨터 프로세서를 포함하는 시스템.
  20. 제19항에 있어서, 상기 소프트웨어의 중추 버전의 클래스들은 상기 소프트웨어의 중추 버전에 관련된 코드 내에 상기 확장들과 관련된 코드가 삽입되는 위치들을 표시하는 확장 포인트들을 더 포함하는 시스템.
  21. 제19항에 있어서, 상기 확장들의 컴퓨터 실행 가능 버전을 생성하기 위해 상기 소프트웨어의 상기 중추 버전의 상기 클래스들의 상기 확장들의 상기 소스 코드 버전을 컴파일하는 컴파일러를 더 포함하는 시스템.
  22. 제21항에 있어서, 상기 소프트웨어의 상기 중추 버전의 상기 클래스들과 그들의 대응하는 확장들을 링크해서, 실행시에 상기 소프트웨어의 확장 버전을 생성하기 위해 상기 확장들의 상기 컴퓨터 실행 가능 버전을 실행하는 컴퓨터 프로세서를 더 포함하는 시스템.
  23. 제22항에 있어서, 상기 프로세서는, 상기 소프트웨어의 상기 중추 버전의 컴퓨터 실행 가능 버전을 호출하고, 실행시에 상기 소프트웨어의 상기 중추 버전에 관련된 코드에 상기 확장들을 삽입해서, 상기 확장들의 상기 컴퓨터 실행 가능 버전을 실행하는 시스템.
  24. 제19항에 있어서, 상기 확장들은 상기 소프트웨어의 상기 확장 버전의 구성에 대응하는 시스템.
  25. 제24항에 있어서, 상기 소프트웨어의 상기 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 소프트웨어의 상기 확장 버전은 주문형 소프트웨어개발 툴이고, 상기 소프트웨어의 확장 버전의 구성은 타겟 타입을 포함하는 시스템.
  26. 제24항에 있어서, 상기 소프트웨어의 상기 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 소프트웨어의 상기 확장 버전은 주문형 소프트웨어 개발 툴이고, 상기 소프트웨어의 확장 버전의 구성은 컴파일러 타입을 포함하는 시스템.
  27. 제24항에 있어서, 상기 소프트웨어의 상기 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 소프트웨어의 상기 확장 버전은 주문형 소프트웨어 개발 툴이고, 상기 소프트웨어의 확장 버전의 구성은 적어도 프로세서 구조 타입, 컴파일러 타입, 및 프로그래밍 언어 타입을 포함하는 시스템.
  28. 소프트웨어 확장 버전을 생성하기 위해 상기 소프트웨어의 중추 버전을 확장하기 위한 확장 선언들에 의해 확장되는 상기 소프트웨어의 중추 버전의 클래스들의 클래스 선언들을 저장하는 컴퓨터 판독 가능 저장 매체로서, 상기 소프트웨어의 상기 중추 버전의 상기 클래스 선언은,
    하나 이상의 중추 클래스 멤버들; 및
    상기 중추 클래스들의 하나 이상의 확장 속성들을 포함하고,
    상기 확장 속성은 상기 중추 클래스들이 컴파일 시간 전에 정적으로 확장 가능하거나 실행시에 동적으로 확장 가능함을 표시하고,
    상기 소프트웨어의 중추 버전의 클래스들을 그들의 대응하는 확장 선언들과 함께 처리하는 것은,
    객체 기술 언어 전처리기를 사용하여 상기 소프트웨어의 중추 버전의 클래스들 및 그들의 대응하는 확장 선언들을 포함하는 확장 클래스의 소스 코드 표현을 갖는 헤더 파일을 생성하는 것과,
    상기 헤더 파일을 컴파일하여 상기 소프트웨어의 확장 버전을 생성하는 것을 포함하고,
    상기 확장 선언들은 상기 소프트웨어의 상기 확장 버전의 특정 구성에 대응하고, 상기 확장 선언은 상기 소프트웨어의 상기 확장 버전의 상기 구성을 지시하는 하나 이상의 속성 선언을 더 포함하고,
    상기 소프트웨어의 상기 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 상기 소프트웨어의 확장 버전은 주문형 소프트웨어 개발 툴이고,
    상기 소프트웨어의 확장 버전의 구성은 타겟 프로세서 구조를 선택하는 것을 포함하는, 컴퓨터 판독 가능 저장 매체.
  29. 제28에 있어서, 상기 확장 선언들을 더 포함하고, 상기 확장 선언들은 상기 소프트웨어의 상기 중추 버전을 확장하는 한 개 이상의 확장 클래스 멤버를 포함하는 컴퓨터 판독 가능 저장 매체.
  30. 제28항에 있어서,
    상기 소프트웨어의 상기 중추 버전은 확장 가능 중추 소프트웨어 개발 툴 프레임워크이고, 상기 소프트웨어의 확장 버전은 주문형 소프트웨어 개발 툴이고, 상기 소프트웨어의 확장 버전의 구성을 선택하는 것은 컴파일러 타입을 선택하는 것을 포함하는 컴퓨터 판독 가능 저장 매체.
  31. 제28항에 있어서, 상기 소프트웨어의 중추 버전에 관련된 코드 내에 그들의 대응하는 확장들에 관련된 코드가 삽입되어야 하는 위치들을 표시하는 확장 포인트들을 더 포함하는 컴퓨터 판독 가능 저장 매체.
  32. 전처리기 프로그램을 위한 소프트웨어 코드를 저장하는 컴퓨터 판독 가능 저장 매체로서,
    상기 전처리기 프로그램은 상기 소프트웨어의 중추 버전을 확장하기 위해 사용되는 소프트웨어의 중추 버전의 클래스들 및 상기 소프트웨어의 중추 버전의 클래스들의 대응하는 확장들을, 객체 기술 언어로, 수신하기 위해 동작할 수 있고, 상기 소프트웨어의 중추 버전의 클래스들은 컴파일 시간 전에 정적으로 확장 가능하거나 실행시에 동적으로 확장 가능한 것으로 객체 기술 언어로 표시되고,
    상기 전처리기 프로그램은 또한 상기 객체 기술 언어의 형태로 수신되는 상기 소프트웨어의 중추 버전의 클래스들의 상기 확장들을 사용하여, 상기 소프트웨어의 중추 버전을 확장하기 위해, 실행시에 상기 확장들과 그들에 대응하는 상기 소프트웨어의 중추 버전의 클래스들을 링크하기 위해 사용되는 상기 확장들의 소스 코드 버전을 생성하도록 동작 가능하고,
    상기 전처리기 프로그램은 또한 상기 객체 기술 언어의 형태로 수신되는 상기 소프트웨어의 중추 버전의 클래스들 및 그들의 대응하는 확장들을 사용하여 상기 소프트웨어의 중추 버전의 클래스들 및 그들의 대응하는 확장들을 포함하는 확장 클래스들의 소스 코드 버전을 갖는 헤더 파일을 생성하도록 동작 가능하고,
    상기 전처리기 프로그램은 또한 상기 소프트웨어의 확장 버전을 생성하기 위한 컴파일러에 상기 헤더 파일을 출력하도록 동작 가능한, 컴퓨터 판독 가능 저장 매체.
  33. 소프트웨어의 확장 버전을 생성하기 위해 상기 소프트웨어의 중추 버전에 확장들을 추가해서 소프트웨어를 확장하는 시스템으로서,
    객체 기술 언어 전처리기를 실행시키기 위해서,
    객체 기술 언어로 상기 소프트웨어의 상기 중추 버전의 클래스들의 확장들을 수신하고, 상기 소프트웨어의 상기 중추 버전의 클래스들의 상기 확장들의 소스 코드 버전을 생성하는 수단 - 상기 소프트웨어의 상기 중추 버전의 상기 클래스들은 실행시에 동적으로 확장 가능하거나 컴파일 시간 전에 정적으로 확장 가능한 것으로 상기 객체 기술 언어로 표시되고, 정적으로 확장 가능한 것으로 표시된 상기 소프트웨어의 중추 버전의 클래스들은 그들의 대응하는 확장들과 함께 처리되고, 동적으로 확장 가능한 것으로 표시된 상기 소프트웨어의 중추 버전의 클래스들은 그들의 대응하는 확장들로부터 분리되어 처리되고, 상기 소프트웨어의 중추 버전의 클래스들을 그들의 대응하는 확장들과 함께 처리하는 것은 상기 객체 기술 언어 전처리기를 사용하여 상기 소프트웨어의 중추 버전의 클래스들 및 그들의 대응하는 확장들을 포함하는 확장 클래스의 소스 코드 표현을 갖는 헤더 파일을 생성하는 것과 상기 헤더 파일을 컴파일하여 상기 소프트웨어의 확장 버전을 생성하는 것을 포함함 -; 및
    상기 소프트웨어의 상기 확장 버전을 생성하기 위해 사용되는 상기 소프트웨어의 상기 중추 버전의 클래스들의 상기 확장들의 상기 소스 코드 버전을 컴파일하는 수단을 포함하는 시스템.
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 삭제
  39. 삭제
  40. 삭제
  41. 삭제
  42. 삭제
  43. 삭제
  44. 삭제
KR1020040053552A 2003-07-23 2004-07-09 확장성 컴파일러 및 툴의 기반 구조에 대한 기술 언어 KR101137126B1 (ko)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (2)

* Cited by examiner, † Cited by third party
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